XL 2016 Bug automatisation lorsque je supprime une valeur ou en ajoute une sur une case vide

ZAKAO

XLDnaute Nouveau
Bonjour tout le monde,

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.

1637914590641.png

Merci :)
 

Pièces jointes

  • Salidas de Transporte NB - copia.xlsm
    89.8 KB · Affichages: 0
Dernière édition:
Solution
:)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...

ZAKAO

XLDnaute Nouveau
Bonjour Zakao,

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 ? :)
Bonjour @sylvanu ,

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
1637918750429.png

Je renseigne une valeur :
1637918816016.png

Puis quand j'entre cette valeur, j'obtient ce message :
1637918995367.png

1637919010315.png

Merci pour votre aide :)
 

Pièces jointes

  • Salidas de Transporte NB - copia.xlsm
    89.8 KB · Affichages: 1

ZAKAO

XLDnaute Nouveau
Re,

Malheureusement je n'arrive pas à reproduire votre erreur, voyez ci dessous :

Regarde la pièce jointe 1122953

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.

Prenez bien ce fichier joint. Merci encore ^^
 

Pièces jointes

  • Salidas de Transporte NB - copia.xlsm
    89.8 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
:)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
 

Pièces jointes

  • Salidas de Transporte NB - V2.xlsm
    73.3 KB · Affichages: 0

ZAKAO

XLDnaute Nouveau
:)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 :)
 

Statistiques des forums

Discussions
298 009
Messages
1 965 109
Membres
200 850
dernier inscrit
fakihan