Suivi de modification par macro
Bonjour à tous
J'ai un fichier qui est utilisé par plusieurs personnes. Chaque personne doit s'identifier pour entrer dans le programme.
Le nom de cette personne est mis à la première ligne à chaque fois.
Toutes ces personnes ont la possibilité de modifier des évaluations.
Là où le hic commence est lorsque je veux savoir quelles sont les personnes qui ont modifié l'évaluation.
J'ai besoin que sur la feuille d'identification apparaisse toutes les modifications qu'elles ont effectuées.
pour cela, je voudrais passé par une macro à l'enregistrement du fichier.
J'ai donc besoin de faire une boucle sur toutes les évaluations et une autre sur chaque ligne de l'évaluation.
Dès que la colonne E est différente de la colonne C, il faut mettre le nom de l'onglet ainsi que la ligne dans la case E2 de l'onglet "identification"
Je ne sais pas si j'ai été bien clair. Je vous joins un fichier exemple avec ce qu'il me faudrait.
PS: Je ne peux pas passer par le suivi de modification qu'Excel propose... Ca aurait été trop simple
-- 10 Aoû 2010, 00:36 --
Re.
J'ai essayé quelque chose en passant par un bouton pour valider ou non les modifications ce qui me permet de les voir directement.
Cependant, j'ai une erreur de compilation qui me dit que j'ai "next" sans "for"
J'ai bien compris que le problème venait de ma boucle mais je ne comprends pas pourquoi.
Pourriez vous me donner un coup de main? Merci d'avance.
Sub suivi_de_modification()
Dim info%
'on commence la boucle en E2 pour finir en E66
For i = Cells("E2") To Cells("E66")
' on commence la boucle en C2 pour finir en C66
For j = Cells("C2") To Cells("C66")
' Si la cellule de la boucle "i" est différente de la cellule de la boucle "j" alors,
If Cells(i) <> Cells(j) Then
' On envoie un message
info = MsgBox("Cette ligne présente une modification. Validez vous la modification?" _
, vbYesNo, "Pakaloux dit")
'Si on ne veut pas valider la modification, alors on récupère la valeur de la cellule
'j" pour la mettre dans la cellule de la boucle "i"
If info = vbNo Then
Range("j").Select
Selection.Copy
Range("i").Select
ActiveSheet.Paste
Else:
'Une fois la comparaison des deux cellules finie, on continue la boucle
Next i
Next j
End If
End Sub
Bonjour
A première vu comme ça, pour ton erreur, tu as deux "if" mais un seul "end if", rétablie l'équilibre et tu ne devrait plus avoir cette erreur.
Cordialement
Merci de ta réponse.
Malheureusement, j'obtiens toujours le même message d'erreur à savoir
"Erreur de compilation. Next sans for"
J'ai sans doute pas bien compris la façon de faire une boucle. Sur ce que j'ai pu voir, il y a toujours un chiffre après
for i = ...
Cependant, ça ne marche toujours pas
Une âme charitable pour déchiffrer le code?
Merci encore
re:
essai ça :
Sub suivi_de_modification()
Dim info%
'on commence la boucle en E2 pour finir en E66
For i = Cells("E2") To Cells("E66")
' on commence la boucle en C2 pour finir en C66
For j = Cells("C2") To Cells("C66")
' Si la cellule de la boucle "i" est différente de la cellule de la boucle "j" alors,
If Cells(i) <> Cells(j) Then
' On envoie un message
info = MsgBox("Cette ligne présente une modification. Validez vous la modification?" _
, vbYesNo, "Pakaloux dit")
'Si on ne veut pas valider la modification, alors on récupère la valeur de la cellule
'j" pour la mettre dans la cellule de la boucle "i"
If info = vbNo Then
Range("j").Select
Selection.Copy
Range("i").Select
ActiveSheet.Paste
Else:
End If
End If
'Une fois la comparaison des deux cellules finie, on continue la boucle
Next j
Next i
End Sub
Si tu pouvait envoyer un fichier avec les macro identique au tiens, ça permettrais de connaitre la configuration de ton fichier.
Dans le fichier que tu as joint; la cellule E2 est une cellule fusionnée, tu devrais éviter, ce n'est pas conseillé.
Cordialement
Re
j'ai trouvé le code pour avoir un message dès qu'il y a une modification sur une cellule de la colonne E par rapport à ma colonne C.
Ce message me permet de rétablir la valeur qu'il y avait avant.
Mon problème est que ce code se fait uniquement pour la feuille active.
Je n'arrive pas à rajouter de boucle pour que je puisse faire le suivi des modifications sur toutes les feuilles à l'aide d'un seul bouton.
Voici le code actuel:
dim suivi_de_modification ()
Dim x As Integer
Dim info%
'La variable x va successivement prendre les valeurs 6 à 66
For x = 6 To 66
'Vérifie si la cellule en colonne E est différente de la cellule en colonne C
'Si pas le cas, on envoie un msgbox
If Cells(x, 5).Value <> Cells(x, 3).Value Then
Cells(x, 5).Select
info = MsgBox("L'item :" & Cells(x, 4) & Chr(10) _
& " est passé de " & Cells(x, 3) & "à " & Cells(x, 5) & ". Etes-vous d'accord?" & Chr(10) _
& "Oui pour valider, et Non pour que la cellule reprenne sa valeur initiale", vbInformation + vbYesNo, "Pakaloux dit")
'si on appuie sur le bouton "non", on récupère la donnée de la colonne C
If info = vbNo Then
Cells(x, 3).Copy
Cells(x, 5).Select
ActiveSheet.Paste
End If
End If
Next x
End Sub
Je pensais rajouter dans la ligne
If Cells(x, 5).Value <> Cells(x, 3).Value Then
une variable i pour boucler également sur les différentes feuilles
For i = 10 to sheets.count............ (dans le fichier réel, les modifications se feront qu'à partir de la feuille 10)
et à la ligne if
if sheets(i).cells(x,5).value<>sheets(i).cells(x,3).value then
Je vous joins le fichier exemple avec le code en cours et éventuellement à modifier si vous pouvez lier la boucle des différentes feuilles au code actuel.
Merci.
-- 10 Aoû 2010, 23:01 --
Et bien, finalement, il n'y a rien de mieux que de chercher par soi-même.
Même si ça prend beaucoup... beaucoup plus de temps.
L'essentiel étant d'avoir trouvé la solution.
Dim x As Integer
Dim info%
[b]For i = 1 To Sheets.Count[/b]
[b]Sheets(i).Select[/b]
'La variable x va successivement prendre les valeurs 6 à 66
For x = 6 To 66
'Vérifie si la cellule en colonne E est diiférente de la cellule en colonne C
'Si pas le cas, on envoie un msgbox
If Cells(x, 5).Value <> Cells(x, 3).Value Then
Cells(x, 5).Select
info = MsgBox("L'item :" & Cells(x, 4) & Chr(10) _
& " est passé de " & Cells(x, 3) & " à " & Cells(x, 5) & ". Etes-vous d'accord?" & Chr(10) _
& "Oui pour valider, et Non pour que la cellule reprenne sa valeur initiale", vbInformation + vbYesNo, "Pakaloux dit")
'si on appuie sur le bouton "non", on récupère la donnée de la colonne C
If info = vbNo Then
Cells(x, 3).Copy
Cells(x, 5).Select
ActiveSheet.Paste
End If
End If
Next x
[b]Next i[/b]