Msgbox ne se ferme qu'au 2e clic [RESOLU]

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

cathodique

XLDnaute Barbatruc
Bonjour🙂,

Faisant suite à ce fil https://www.excel-downloads.com/threads/formulaire-de-modification.20027552/

J'ai eu des propositions qui ne correspondent pas exactement à mes attentes.
Je dois aussi bien comprendre les codes pour essayer de les adapter à mes besoins.
Sur mon userform, une textbox récupère un numéro de facture au clic dans une listbox.
Le code ci-dessous ne plante mais je ne comprends pas pourquoi, je dois cliquer à 2 reprises sur ok pour que le message (MsgBox) se ferme.
VB:
Private Sub ComboBox2_Change()
   If Me.TextBox2 <> "" Then 'signifie aussi: aucune ligne sélectionnée dans la Listbox
      Me.TextBox3.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 1)
      Me.TextBox9.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 2)
   Else
      Me.ComboBox2="": Me.TextBox3 = "": Me.TextBox9 = ""
      MsgBox "Sélectionnez la ligne à modifier.", vbCritical, "ERREUR DE MANIPULATION"
   End If
End Sub
Merci pour votre précieuse aide.

Bon dimanche.

ps: le fichier joint est en cours de correction.
 

Pièces jointes

Bonjour Cath,
combobox2_change interviens dès changement...
Comme tu as combobox2.clear la macro est re-excécutée
Un conseil teste en mettant un point d'arrêt en ligne combobox2.clear
Fait tourner le formulaire jusqu'au retour VBA et presse F8 autant de fois
que tu veux pour voir l'exécution et ou va la macro.
Pour ma part pour résoudre un cas comme cela je déclare en tête de Module
Cela peut servir aussi pour d'autres controles
Public kit As Boolean
et en macro
Private Sub ComboBox2_Change()
if kit=true then exit sub
If Me.TextBox2 <> "" Then
Me.TextBox3.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 1)
Me.TextBox9.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 2)
Else
kit=true
Me.ComboBox2.Clear: Me.TextBox3 = "": Me.TextBox9 = ""
kit=false
MsgBox "Sélectionnez la ligne à modifier.", vbCritical, "ERREUR DE MANIPULATION"
End If
End Sub
Bruno
 
Bonjour youky(BJ)🙂,

Effectivement, en utilisant F8 j'ai remarqué la double exécution de la procédure change.
J'ai donc modifié la procédure, j'ai utilisé la clic. ça semble donné un bon résultat.
VB:
Private Sub ComboBox2_Click()
If Me.TextBox2 = "" Then
         MsgBox "Sélectionnez la ligne à modifier.", vbCritical, "ERREUR DE MANIPULATION"
         Me.ComboBox2 = ""
      Exit Sub
   Else
      Me.TextBox3.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 1)
      Me.TextBox9.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 2)
   End If
End Sub

Merci pour ta solution que je vais tester et surement adopter.

Permets-moi de te suggérer l'utilisation des balises de code afin que l'édition soit comme celle de ci-dessus.
[ code=VB ]ici ton code[ /code ] qui se fait au moment de l'édition du code (image), sinon il faut supprimer les espaces entre-crochets.
Balise de code VB.JPG


Encore merci. Bon dimanche.
 
Bonjour,

la solution ' Solution 1
VB:
Private Sub ComboBox2_Change()
    If Me.TextBox2 <> "" Then
        Me.TextBox3.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 1)
        Me.TextBox9.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 2)
    Else
        If Me.ComboBox2.Value <> "" Then
        Application.EnableEvents = False ' => désactive les événements
        ' Le code ...
            Me.ComboBox2.Clear: Me.TextBox3 = "": Me.TextBox9 = ""
            MsgBox "Sélectionnez la ligne à modifier.", vbCritical, "ERREUR DE MANIPULATION"
        Application.EnableEvents = True ' => réactive les événements
        End If
    End If
End Sub
 
Dernière édition:
Youky(BJ)🙂,Laurent950🙂,

Merci beaucoup. J'ai adopté la solution Bruno comme ci-dessous
VB:
Private Sub ComboBox2_Change()
   If MAJ = True Then Exit Sub
   If Me.TextBox2 <> "" Then
      Me.TextBox3.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 1)
      Me.TextBox9.Value = ComboBox2.List(Me.ComboBox2.ListIndex, 2)
   Else
      MAJ = True
      Me.ComboBox2.Clear: Me.TextBox3 = "": Me.TextBox9 = ""
      MAJ = False
      MsgBox "Sélectionnez la ligne à modifier.", vbCritical, "ERREUR DE MANIPULATION"
   End If
End Sub
ps: je n'ai encore testé la proposition de Laurent.
Bon dimanche.
 
Re :
Une autres solution
la solution ' Solution 2
VB:
Private Sub ComboBox2_Change()
With Me
    If .TextBox2 <> "" Then
        .TextBox3.Value = .ComboBox2.List(.ComboBox2.ListIndex, 1)
        .TextBox9.Value = .ComboBox2.List(.ComboBox2.ListIndex, 2)
    Else
        If .ComboBox2 <> Empty Then
                .ComboBox2.Clear: .TextBox3 = "": .TextBox9 = ""
            MsgBox "Sélectionnez la ligne à modifier.", vbCritical, "ERREUR DE MANIPULATION"
        End If
    End If
End With
End Sub
 
Dernière édition:
Re :
Une autres solution
la solution ' Solution 2
VB:
Private Sub ComboBox2_Change()
With Me
    If .TextBox2 <> "" Then
        .TextBox3.Value = .ComboBox2.List(.ComboBox2.ListIndex, 1)
        .TextBox9.Value = .ComboBox2.List(.ComboBox2.ListIndex, 2)
    Else
        If .ComboBox2 <> Empty Then
                .ComboBox2.Clear: .TextBox3 = "": .TextBox9 = ""
            MsgBox "Sélectionnez la ligne à modifier.", vbCritical, "ERREUR DE MANIPULATION"
        End If
    End If
End With
End Sub
Merci beaucoup, ça fonctionne aussi bien que les codes proposés.

Bonne journée.😉
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
751
Réponses
7
Affichages
1 K
Retour