Le 22/10/19 à 02:53, MarieDo a écrit :
Bonjour,
Oui c'est possible par macro. Cette macro est plus facile à gérer que
l'utilisation de la bibliothèque "ADO pour "Microsoft Activex data
objects". Cependant, contrairement à l'emploi de "ADO, la solution
retenue ouvre le fichier s'il n'est pas déjà ouvert.
Cette procédure doit être placée OBLIGATOIREMENT dans le module de la
feuille de l'ancien classeur. Pour ce faire, tu fais un clic droit sur
l'onglet de la feuille et tu choisis la commande "Visualiser le code".
Tu vas te retrouver dans l'éditeur de code (vba) devant une page
blanche. Tu copies le code à cet endroit.
Dans la procédure, il y a des variables à définir. Ces variables sont
bien identifiées.
Lorsque le classeur s'ouvre, la macro masque le fichier. Si tu veux le
voir, mets cette ligne de code à true Wk.Windows(1).Visible =True
Le nouveau classeur s'enregistre lorsqu'une cellule change de couleur.
Ce n'est pas obligatoire. Si tu ne désires pas, place une apostrophe
devant cette ligne : Wk.Save dans le code
'--------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Chemin As String, Feuille As String
Dim Fichier As String, Adr As String
Dim Wk As Workbook, Rg As Range, C As Range
'******** Variables à définir selon ton environnements*********
'Chemin du répertoire et répertoire de l'ancien fichier
Chemin = "E:\Téléchargements\" 'Ne pas oublier le "\"
'Nom du fichier de l'ancien fichier
Fichier = "toto.xlsm"
'Nom de l'onglet de la feuille où sont les
'données de l'ancien fichier
Feuille = "Feuil1"
'La plage de cellule à surveiller dans cette feuille
Adr = "A1:A10" 'plage de cellules où tu veux effectuer la surveillance
'***************************************************************
Set Rg = Intersect(Target, Range(Adr))
If Not Rg Is Nothing Then
Application.ScreenUpdating = False
On Error Resume Next
Set Wk = Workbooks(Fichier)
If Err <> 0 Then
Err = 0
Set Wk = Workbooks.Open(Chemin & Fichier)
Wk.Windows(1).Visible = False
End If
For Each C In Rg
With Wk.Worksheets(Feuille).Range(C.Address)
If .Value <> C.Value Then
.Interior.Color = vbYellow
End If
End With
Next
Wk.Save ' à chaque fois qu'il y a une modification
'de couleur dans la plage visée, le fichier
' est sauvegardé
Application.ScreenUpdating = True
End If
End Sub
'--------------------------------------------
MichD