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
122suivi-modif-test.zip (20.11 Ko)

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]
229suivi-modif-test.xlsm (56.01 Ko)
Rechercher des sujets similaires à "suivi modification macro"