J'ai rédigé une macro qui compare les valeurs sur la même ligne avec un pas de 4, en changeante les couleurs des cellules. Le programme comporte des bugs qui me sont obscurs et c'est pour cela que je requiert votre aide. Je vous joint une copie de l'Excel. Vous pouvez tester le programme comme vous voulez.
Exact, Continent était vide. Encore fallait il le savoir !
Je pense que vous avez un problème de réentrance, à savoir que quand vous modifiez une cellule vous appelez Worksheet_Change qui modifie des cellules ... donc qui appelle Worksheet_Change, ad vitam aeternam.
Testez cette solution possible :
Remplacez le début de Private Sub Worksheet_Change(ByVal Target As Range) par :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
Application.EnableEvents = False
...
...
Remplacez la fin par :
Code:
Fin:
Application.EnableEvents = True
End Sub
Application.EnableEvents à False permet d'inhiber tout appel à une macro liée à une modif de cellule. Pensez à la rétablir à la fin avec True, sinon vous ne pourrez plus...
Pouvez vous nous dire lesquels et dans quel contexte ?
( par ex en nous donnant la procédure à suivre )
J'ai "joué" avec vos différents boutons et n'est pas eu de message d'erreur. Alors comment faire pour en avoir ?
Pouvez vous nous dire lesquels et dans quel contexte ?
( par ex en nous donnant la procédure à suivre )
J'ai "joué" avec vos différents boutons et n'est pas eu de message d'erreur. Alors comment faire pour en avoir ?
Je vous joint une version que je viens de finir beaucoup plus propre mais qui comporte encore ce bug. Ce dernier intervient lorsque que vous supprimez une valeur qui étais déjà coloré en appuyant sur supr ou dans le cas inverse lorsque vous renseignez une valeur qui était un tiret auparavant.
En image : Je sélectionne une case vide
Je renseigne une valeur :
Puis quand j'entre cette valeur, j'obtient ce message :
Merci pour votre aide
Malheureusement je n'arrive pas à reproduire votre erreur, voyez ci dessous :
A noter que les macro évènementielles sont bien activées, Worksheet_BeforeDoubleClick et Worksheet_Change de la feuille Terrestre. La ligne Elimination des doublons n'est pas en erreur.
A noter que les macro évènementielles sont bien activées, Worksheet_BeforeDoubleClick et Worksheet_Change de la feuille Terrestre. La ligne Elimination des doublons n'est pas en erreur.
C'est étrange car les couleurs ne se changent pas quand vous modifiez les valeurs. Est ce que vous avez bien des valeurs dans la colonne continent ? Sinon la macro ne se déclenchera pas.
Exact, Continent était vide. Encore fallait il le savoir !
Je pense que vous avez un problème de réentrance, à savoir que quand vous modifiez une cellule vous appelez Worksheet_Change qui modifie des cellules ... donc qui appelle Worksheet_Change, ad vitam aeternam.
Testez cette solution possible :
Remplacez le début de Private Sub Worksheet_Change(ByVal Target As Range) par :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
Application.EnableEvents = False
...
...
Remplacez la fin par :
Code:
Fin:
Application.EnableEvents = True
End Sub
Application.EnableEvents à False permet d'inhiber tout appel à une macro liée à une modif de cellule. Pensez à la rétablir à la fin avec True, sinon vous ne pourrez plus l'appeler.
Il faut donc aussi remplacer le IF ... Exit sub par :
Code:
If Target.Column < 8 Or Target.Column > last_column Or Target.Row < 5 Or Target.Row > last_row Or (Target.Column Mod 4) = 2 Or (Target.Column Mod 4) = 3 Then
Application.EnableEvents = True
Exit Sub
End If
Exact, Continent était vide. Encore fallait il le savoir !
Je pense que vous avez un problème de réentrance, à savoir que quand vous modifiez une cellule vous appelez Worksheet_Change qui modifie des cellules ... donc qui appelle Worksheet_Change, ad vitam aeternam.
Testez cette solution possible :
Remplacez le début de Private Sub Worksheet_Change(ByVal Target As Range) par :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
Application.EnableEvents = False
...
...
Remplacez la fin par :
Code:
Fin:
Application.EnableEvents = True
End Sub
Application.EnableEvents à False permet d'inhiber tout appel à une macro liée à une modif de cellule. Pensez à la rétablir à la fin avec True, sinon vous ne pourrez plus l'appeler.
Il faut donc aussi remplacer le IF ... Exit sub par :
Code:
If Target.Column < 8 Or Target.Column > last_column Or Target.Row < 5 Or Target.Row > last_row Or (Target.Column Mod 4) = 2 Or (Target.Column Mod 4) = 3 Then
Application.EnableEvents = True
Exit Sub
End If
Je vous remercie beaucoup, cela fonctionne parfaitement. Je n'avais jamais utilisé de Worksheet_Change donc je n'avais pas percuté que ma boucle infini venait de là.
En effet, en voulant vous donnez un Excel vierge, je l'ai un peu trop vidé pour le coups ahah.
Encore une fois merci, la solution était claire et concise, je comprend très bien mon erreur. Passez une agréable fin de journée