VBA excel - bouclage infini worksheet_change
ayato
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
j'ai un petit souci sur une macro excel, j'ai fait une macro mettant en forme (coloration) une ligne de cellule lorsque une case est non vide, tout ça grace à la macro worksheet_change. Donc dès qu'une modification est faite dans la feuiile, le programme vérifie les cases d'une colonne et si elles ne sont pas vides ça colore la ligne correspondante.
Le problème est que j'aimerais par la même occasion qu'il me mette à jour une case où se trouve la date de mise à jour mais cela fait recommencer la macro puisque ca modifie la feuille d'où un bouclage quasi infini du programme...
Avez vous une meilleure idée pour faire ce que je veux ou alors y'a t il une fonction qui permette d'empecher le programme de repartir à zéro? Voir le programme ci dessous.
Merci d'avance
Voici mon programme:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
cellule = ActiveCell.Address
On Error GoTo arret
Cells(5, 7).Select
Do While ActiveCell.Interior.ColorIndex <> 1
If ActiveCell.Value <> "" Then
Range(ActiveCell.Offset(0, -6), ActiveCell).Select
Selection.Interior.ColorIndex = 4
ActiveCell.Offset(0, 6).Select
Else
Range(ActiveCell.Offset(0, -6), ActiveCell).Select
Selection.Interior.ColorIndex = xlNone
ActiveCell.Offset(0, 6).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
'''''Range("A2")="Mise à jour le : " & Date '''''c'est cette ligne qui fait redémarrer
Range(cellule).Select
arret:
Application.ScreenUpdating = True
End Sub
j'ai un petit souci sur une macro excel, j'ai fait une macro mettant en forme (coloration) une ligne de cellule lorsque une case est non vide, tout ça grace à la macro worksheet_change. Donc dès qu'une modification est faite dans la feuiile, le programme vérifie les cases d'une colonne et si elles ne sont pas vides ça colore la ligne correspondante.
Le problème est que j'aimerais par la même occasion qu'il me mette à jour une case où se trouve la date de mise à jour mais cela fait recommencer la macro puisque ca modifie la feuille d'où un bouclage quasi infini du programme...
Avez vous une meilleure idée pour faire ce que je veux ou alors y'a t il une fonction qui permette d'empecher le programme de repartir à zéro? Voir le programme ci dessous.
Merci d'avance
Voici mon programme:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
cellule = ActiveCell.Address
On Error GoTo arret
Cells(5, 7).Select
Do While ActiveCell.Interior.ColorIndex <> 1
If ActiveCell.Value <> "" Then
Range(ActiveCell.Offset(0, -6), ActiveCell).Select
Selection.Interior.ColorIndex = 4
ActiveCell.Offset(0, 6).Select
Else
Range(ActiveCell.Offset(0, -6), ActiveCell).Select
Selection.Interior.ColorIndex = xlNone
ActiveCell.Offset(0, 6).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
'''''Range("A2")="Mise à jour le : " & Date '''''c'est cette ligne qui fait redémarrer
Range(cellule).Select
arret:
Application.ScreenUpdating = True
End Sub
A voir également:
- VBA excel - bouclage infini worksheet_change
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
- Déplacer colonne excel - Guide
3 réponses
bonjour
Comme tu as mis : "Application.ScreenUpdating = False " pour éviter la mise à jour de l'écran, tu mets :
L'événement ne se déclenchera pas avec tes mises à jour mais il faut impérativement le remettre à true même si erreur car sinon il est vraiment désactivé.
Comme tu as mis : "Application.ScreenUpdating = False " pour éviter la mise à jour de l'écran, tu mets :
Application.EnableEvents = False ton code modification Application.EnableEvents = True
L'événement ne se déclenchera pas avec tes mises à jour mais il faut impérativement le remettre à true même si erreur car sinon il est vraiment désactivé.