OVH Cloud OVH Cloud

Changer la couleur d'une cellule, si différent du premier fichier

5 réponses
Avatar
MarieDo
Bonjour,

Sur excel, j'ai créé un fichier qui me permets de prendre les infos dont j'ai besoin depuis un autre fichier excel. Je voulais savoir si c'était possible que sur ce nouveau fichier la cellule change de couleur si dans le premier fichier nous avons fait une modification?
Afin que rien ne change pour le premier fichier mais que l'on puisse voir qu'il y a eu une modification dans le second.

Merci!

5 réponses

Avatar
MichD
Le 22/10/19 à 02:53, MarieDo a écrit :
Bonjour,
Sur excel, j'ai créé un fichier qui me permets de prendre les infos dont j'ai
besoin depuis un autre fichier excel. Je voulais savoir si c'était possible que
sur ce nouveau fichier la cellule change de couleur si dans le premier fichier
nous avons fait une modification?
Afin que rien ne change pour le premier fichier mais que l'on puisse voir qu'il
y a eu une modification dans le second.
Merci!

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
Avatar
Jacquouille
Bonjour
C'est quand même dommage qu'on ne puisse faire une MEFC entre deux fichiers
..... du moins sur mon 2003. -((
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"MichD" a écrit dans le message de groupe de discussion :
qomvk5$113n$
Le 22/10/19 à 02:53, MarieDo a écrit :
Bonjour,
Sur excel, j'ai créé un fichier qui me permets de prendre les infos dont
j'ai
besoin depuis un autre fichier excel. Je voulais savoir si c'était
possible que
sur ce nouveau fichier la cellule change de couleur si dans le premier
fichier
nous avons fait une modification?
Afin que rien ne change pour le premier fichier mais que l'on puisse voir
qu'il
y a eu une modification dans le second.
Merci!

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
Avatar
MichD
Le 22/10/19 à 12:31, Jacquouille a écrit :
Bonjour
C'est quand même dommage qu'on ne puisse faire une MEFC entre deux
fichiers ..... du moins sur mon 2003.  -((

Je n'ai jamais essayé. Voici un petit exemple que tu peux faire dans ton
classeur Excel 2003.
Dans un module STANDARD, copie cette fonction personnalisée.
'------------------------------------------
Function MaFunction(C As Range) As Boolean
If C.Value = 5 Then
MaFunction = True
End If
End Function
'------------------------------------------
Pour la cellule A1, tu appliques cette mise en forme conditionnelle.
La formule est : =ET(Mafunction(A1)=VRAI) et tu appliques le format que
tu désires.
Maintenant, si tu veux appliquer cela à la plage A1:A10, tu recopies la
cellule A1 sur la plage. Ça fonctionne.
En utilisant ADO (Microsoft activex data objects) dans la fonction
personnalisée, je ne vois pas pourquoi on ne pourrait pas obtenir le
même résultat. Je testerai peut-être si la paresse passe... ;-))
MichD
Avatar
Jacquouille
"MichD" a écrit dans le message de groupe de discussion :
qoo1ho$1vs4$
Je testerai peut-être si la paresse passe... ;-))
MichD
Maintenant que les élections sont terminées et vu que vous demandez des
travailleurs, il va falloir retrousser ses manches.
La sieste, il faut la mériter. Elle ne vient automatiquement qu'à partir de
70 ans.
Ceci dit, je vais tester cette solution.
Merci et bonne journée.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
Avatar
MichD
La sieste, il faut la mériter

**** La retraite n'est pas synonyme de sieste, pour moi.
Ça fait déjà un moment que je n'ouvre plus Excel si ce n'est que pour
répondre à quelques questions ici. Tester des trucs qui ne servent à
personne d'autre et sûrement pas à moi ne suscite pas beaucoup
d'enthousiastes chez moi. J'espère que tu t'entraines pour prendre la
relève sur ce forum...
Ceci dit, je vais tester cette solution.

**** Il ne faut pas l'écrire, mais la tester vraiment!
;-)
MichD