[VBA] (excel) Lancement évènement sans raison
Dinoda
-
Dinoda -
Dinoda -
Bien le bonjour,
Je me résigne à venir vous demander de l'aide quant à un problème sur un simple programme VBA, il s'agit d'une évènement TextBox_AfterUpdate() qui se lance sans raison apparente lorsque je me rend dans une autre TextBox, que je clique sur la TextBox ou que je me rende dessus à l'aide de la touche "tab", elle se lance, mais pas toujours, cela lui arrive après 2 ou 3 lancement d'une petite section (en faisant les mêmes actions lors de ces différents lancements, mais parfois avec la touche "tab" et des fois avec la souris), pendant laquelle je passe sur tout les textbox du UserForm.
Il existe de plus 4 Textbox subissant les mêmes manipulations et seule la 4ème à ce problème, et même en l'échangeant de place avec une autre (dans l'ordre d'exécution) c'est toujours la 4ème qui bug.
Après une petite heure de débugage, ce problème persiste, je pourrais bien sur contourner le problème en mettant une condition au lancement du contenu de l'évènement mais j'aimerais autant éviter et comprendre le pourquoi de ce lancement inexpliqué.
Quel pourrait d'après vous en être la raison ?
Si vous désirez voir mon code je pourrais vous le donner,
Merci d'avance pour votre aide,
Dinoda
P.S.: désolé pour le pavé
Je me résigne à venir vous demander de l'aide quant à un problème sur un simple programme VBA, il s'agit d'une évènement TextBox_AfterUpdate() qui se lance sans raison apparente lorsque je me rend dans une autre TextBox, que je clique sur la TextBox ou que je me rende dessus à l'aide de la touche "tab", elle se lance, mais pas toujours, cela lui arrive après 2 ou 3 lancement d'une petite section (en faisant les mêmes actions lors de ces différents lancements, mais parfois avec la touche "tab" et des fois avec la souris), pendant laquelle je passe sur tout les textbox du UserForm.
Il existe de plus 4 Textbox subissant les mêmes manipulations et seule la 4ème à ce problème, et même en l'échangeant de place avec une autre (dans l'ordre d'exécution) c'est toujours la 4ème qui bug.
Après une petite heure de débugage, ce problème persiste, je pourrais bien sur contourner le problème en mettant une condition au lancement du contenu de l'évènement mais j'aimerais autant éviter et comprendre le pourquoi de ce lancement inexpliqué.
Quel pourrait d'après vous en être la raison ?
Si vous désirez voir mon code je pourrais vous le donner,
Merci d'avance pour votre aide,
Dinoda
P.S.: désolé pour le pavé
A voir également:
- [VBA] (excel) Lancement évènement sans raison
- Liste déroulante excel - Guide
- Pc qui freeze sans raison - Guide
- Word et excel gratuit - Guide
- Excel compter cellule couleur sans vba - Guide
- Si ou excel - Guide
12 réponses
Bonjour,
Excel version ?
L'évènement TextBox_AfterUpdate() survient quand tu quitte un TextBox après l'avoir modifié, que ce soit par la souris ou le code.
Mais pour "voir" comment ça fonctionne..
Dans l'évènement TextBox_AfterUpdate() tu met un stop
Tu travail normalement..
Quand le code s'arrête sur le stop tu tape F8 pour passer à l'instruction suivante.
F8 à répétition jusqu'à retrouver l'origine, où si c'est par la souris tu verras pourquoi suivant ce que tu auras fais avant.
y a-t-il du code dans l'évènement TextBox_AfterUpdate() ?
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Excel version ?
L'évènement TextBox_AfterUpdate() survient quand tu quitte un TextBox après l'avoir modifié, que ce soit par la souris ou le code.
Mais pour "voir" comment ça fonctionne..
Dans l'évènement TextBox_AfterUpdate() tu met un stop
Tu travail normalement..
Quand le code s'arrête sur le stop tu tape F8 pour passer à l'instruction suivante.
F8 à répétition jusqu'à retrouver l'origine, où si c'est par la souris tu verras pourquoi suivant ce que tu auras fais avant.
y a-t-il du code dans l'évènement TextBox_AfterUpdate() ?
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Bonjour
Je me permets de compléter un peu ce qu'a écrit lermite222
Quand tu es arrêté sur le stop, utilise Affichage - Pile des appels pour voir d'où tu viens, plutôt que de faire F8 jusqu'à sortir du sub
Et il y a un autre cas où TextBox_AfterUpdate() peut être appelé : c'est tout bêtement celui où on l'appelle explicitement depuis le code. Commence donc par la fonction Recherche de l'éditeur pour voir s'il n'y aurait pas un appel quelque part...
Je me permets de compléter un peu ce qu'a écrit lermite222
Quand tu es arrêté sur le stop, utilise Affichage - Pile des appels pour voir d'où tu viens, plutôt que de faire F8 jusqu'à sortir du sub
Et il y a un autre cas où TextBox_AfterUpdate() peut être appelé : c'est tout bêtement celui où on l'appelle explicitement depuis le code. Commence donc par la fonction Recherche de l'éditeur pour voir s'il n'y aurait pas un appel quelque part...
Après utilisation de "Stop", j'ai exactement ce que je disais, l'évènement TextBox4_AfterUpdate() se lance exactement lorsque je clique sur une autre case du UserForm.
Il y a effectivement du code dans Textbox4_afterupdate() qui permet d'entrer son contenu dans une cellule, mais elle s'exécute anormalement et est donc vide lorsqu'elle s'exécute à nouveau, j'ai modifié une variable, ce qui fait que maintenant elle cherche une cellule 0 et bug donc et ne met pas "" dans ma cellule mais ça continu de bugger.
En tout cas merci pour la fonction "Stop", elle pourra m'être utile plus tard.
Merci pour l'aide
P.S. : En regardant la pile des appels, j'ai les informations suivantes :
VBAProject.UserFormAlchimieIngredient.TextBoxEffet4_AfterUpdate
[<Code non Basic>]
VBAProject.module1.Bouton1_Clic
La dernière ligne est liée au bouton dans la feuille excel et n'existe pas si je le lance depuis VBE
P.S. : Je suis sous excel 2007
Il y a effectivement du code dans Textbox4_afterupdate() qui permet d'entrer son contenu dans une cellule, mais elle s'exécute anormalement et est donc vide lorsqu'elle s'exécute à nouveau, j'ai modifié une variable, ce qui fait que maintenant elle cherche une cellule 0 et bug donc et ne met pas "" dans ma cellule mais ça continu de bugger.
En tout cas merci pour la fonction "Stop", elle pourra m'être utile plus tard.
Merci pour l'aide
P.S. : En regardant la pile des appels, j'ai les informations suivantes :
VBAProject.UserFormAlchimieIngredient.TextBoxEffet4_AfterUpdate
[<Code non Basic>]
VBAProject.module1.Bouton1_Clic
La dernière ligne est liée au bouton dans la feuille excel et n'existe pas si je le lance depuis VBE
P.S. : Je suis sous excel 2007
trouver un problème comme ça à l'aveuglette n'est pas évident, tu n'aurais pas des évènements MouseMove qui seraient employés ? ou MouseDown/Up
Tu à fais comme j'ai dis ? quand arret sur stop continuer avec F8 ?
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Tu à fais comme j'ai dis ? quand arret sur stop continuer avec F8 ?
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Non je n'ai aucun évènement lié à la souris, les seuls évènement sont liés au clic sur des boutons, à la mise à jour des textbox, ou au lancement du UserForm (c'est un programme assez simple en fait me permettant de stocker plus facilement des informations sous forme de colonne), puis les récupérer sous certain critères.
Et j'ai effectivement fait tourner le programme de la première exécution du afterupdate jusqu'au bug avec F8
Et j'ai effectivement fait tourner le programme de la première exécution du afterupdate jusqu'au bug avec F8
Bonjour,
Je pense qu'effectivement, tout ton code ne serait pas de refus... Ca donnerait peut être une piste...
Là, à l'aveuglette...
Je pense qu'effectivement, tout ton code ne serait pas de refus... Ca donnerait peut être une piste...
Là, à l'aveuglette...
Bonjour,
Ok alors le voilà :
Le début du code :
Le code des boutons :
Le code des TextBox :
Les quelques fonctions créées à côté :
Le problème est tout simplement l'évènement TextBoxEffet4_AfterUpdate() se déclenche lorsque j'arrive sur la TextBoxNomIngredient, que j'y arrive par la souris ou avec tab.
Ok alors le voilà :
Le début du code :
Dim nouveau As Boolean
Dim Identifiant As Byte
Private Sub UserForm_Initialize()
Range("IngredientRecherche").ClearContents
End Sub
Le code des boutons :
Private Sub CommandButtonAcceder_Click()
UserForm2.Show
End Sub
Private Sub CommandButtonFin_Click()
End
End Sub
Private Sub CommandButtonNouveauIngredient_Click()
FrameIngredient.Visible = True
LabelNomIngredient.Visible = True
TextBoxNomIngredient.Visible = True
nouveau = True
Identifiant = Range("NouvelIngredient").Value
FrameIngredient.Caption = "Nouvel ingrédient"
End Sub
Private Sub CommandButtonModifierIngredient_Click()
FrameIngredient.Visible = True
LabelNomIngredient.Visible = True
TextBoxNomIngredient.Visible = True
nouveau = False
FrameIngredient.Caption = "Modification d'un ingrédient existant"
End Sub
Private Sub CommandButtonTerminer_Click()
nouveau = False
EffetInvisible
FrameIngredient.Visible = False
LabelNomIngredient.Visible = False
TextBoxNomIngredient.Visible = False
TextBoxEmpty
Identifiant = 0
End Sub
Le code des TextBox :
Private Sub TextBoxEffet1_AfterUpdate()
Range("IngredientEffet1").Cells(Identifiant).Value = TextBoxEffet1.Value
End Sub
Private Sub TextBoxEffet2_AfterUpdate()
Range("IngredientEffet2").Cells(Identifiant).Value = TextBoxEffet2.Value
End Sub
Private Sub TextBoxEffet3_AfterUpdate()
Range("IngredientEffet3").Cells(Identifiant).Value = TextBoxEffet3.Value
End Sub
Private Sub TextBoxEffet4_AfterUpdate()
Range("IngredientEffet4").Cells(Identifiant).Value = TextBoxEffet4.Value
End Sub
Private Sub TextBoxNomIngredient_AfterUpdate()
MsgBox "AfterUpdate : TextBoxNomIngredient"
Range("IngredientRecherche").Value = TextBoxNomIngredient.Value
If (nouveau) Then
If (Range("RechercheIngredient").Value = "") Then
Range("Ingredient").Cells(Identifiant).Value = TextBoxNomIngredient.Value
EffetVisible
Range("IdentifiantIngredient").Cells(Identifiant).Value = Identifiant
Else
MsgBox "Ingrédient déjà existant"
End If
Else
If (Range("RechercheIngredient").Value <> "") Then
Identifiant = Range("RechercheIngredientIdentifiant").Value
TextBoxEffet1.Value = Range("IngredientEffet1").Cells(Identifiant).Value
TextBoxEffet2.Value = Range("IngredientEffet2").Cells(Identifiant).Value
TextBoxEffet4.Value = Range("IngredientEffet4").Cells(Identifiant).Value
TextBoxEffet3.Value = Range("IngredientEffet3").Cells(Identifiant).Value
EffetVisible
Else
MsgBox "Ingrédient introuvable"
End If
End If
End Sub
Les quelques fonctions créées à côté :
Sub EffetVisible()
LabelEffet1.Visible = True
LabelEffet2.Visible = True
LabelEffet3.Visible = True
LabelEffet4.Visible = True
TextBoxEffet1.Visible = True
TextBoxEffet2.Visible = True
TextBoxEffet3.Visible = True
TextBoxEffet4.Visible = True
End Sub
Sub EffetInvisible()
LabelEffet1.Visible = False
LabelEffet2.Visible = False
LabelEffet3.Visible = False
LabelEffet4.Visible = False
TextBoxEffet1.Visible = False
TextBoxEffet2.Visible = False
TextBoxEffet3.Visible = False
TextBoxEffet4.Visible = False
End Sub
Sub TextBoxEmpty()
TextBoxNomIngredient.Value = ""
TextBoxEffet1.Value = ""
TextBoxEffet2.Value = ""
TextBoxEffet4.Value = ""
TextBoxEffet3.Value = ""
End Sub
Le problème est tout simplement l'évènement TextBoxEffet4_AfterUpdate() se déclenche lorsque j'arrive sur la TextBoxNomIngredient, que j'y arrive par la souris ou avec tab.
Il est LA ton probl...
met ces lignes en commentaire (je sais ca marchera plus ,mais c'est provisoire)
et vois si tu a encore ce phénomène !!
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
If (Range("RechercheIngredient").Value <> "") Then
Identifiant = Range("RechercheIngredientIdentifiant").Value
TextBoxEffet1.Value = Range("IngredientEffet1").Cells(Identifiant).Value
TextBoxEffet2.Value = Range("IngredientEffet2").Cells(Identifiant).Value
TextBoxEffet4.Value = Range("IngredientEffet4").Cells(Identifiant).Value
TextBoxEffet3.Value = Range("IngredientEffet3").Cells(Identifiant).Value
EffetVisible
Else
MsgBox "Ingrédient introuvable"
End If
End If
met ces lignes en commentaire (je sais ca marchera plus ,mais c'est provisoire)
et vois si tu a encore ce phénomène !!
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Et tu pourrais déjà simplifier..
Appel>>
EffetVisible True si tu dois les voir ou EffetVisible False si tu dois les cacher
et tu supprime l'autre procédure >> EffetInvisible
Sub EffetVisible( B as boolean)
LabelEffet1.Visible = B
LabelEffet2.Visible = B
LabelEffet3.Visible = B
LabelEffet4.Visible = B
TextBoxEffet1.Visible = B
TextBoxEffet2.Visible = B
TextBoxEffet3.Visible = B
TextBoxEffet4.Visible = B
End Sub
Appel>>
EffetVisible True si tu dois les voir ou EffetVisible False si tu dois les cacher
et tu supprime l'autre procédure >> EffetInvisible
Merci pour le conseil.
Sinon même en mettant :
En commentaire, le programme continu de lancer le afterupdate sans raison apparente. C'est seulement celui de TextBoxEffet4 qui se lance.
Qui plus est ça se lance sans passer par ce textboxnomingredient_afterupdate.
Sinon même en mettant :
TextBoxEffet1.Value = Range("IngredientEffet1").Cells(Identifiant).Value
TextBoxEffet2.Value = Range("IngredientEffet2").Cells(Identifiant).Value TextBoxEffet4.Value = Range("IngredientEffet4").Cells(Identifiant).Value TextBoxEffet3.Value = Range("IngredientEffet3").Cells(Identifiant).Value
En commentaire, le programme continu de lancer le afterupdate sans raison apparente. C'est seulement celui de TextBoxEffet4 qui se lance.
Qui plus est ça se lance sans passer par ce textboxnomingredient_afterupdate.
IngredientEffet1 >> C'est quoi ?
IngredientEffet2 >> c'est quoi, .. etc.
Identifiant >> C'est quoi ? où c'est déclarer ?
en fait ça plante mais parce que tu à des problème dans tes range, prochaine fois décrit AVEC EXACTITUDE le N° et le nom de l'erreur.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
IngredientEffet2 >> c'est quoi, .. etc.
Identifiant >> C'est quoi ? où c'est déclarer ?
en fait ça plante mais parce que tu à des problème dans tes range, prochaine fois décrit AVEC EXACTITUDE le N° et le nom de l'erreur.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.