Partage
  • Partager sur Facebook
  • Partager sur Twitter

VBA Excel : Evenement click et change

Sujet résolu
    2 mars 2022 à 22:35:52

    Bonjour à tous,

    Merci de votre indulgence, c'est mon premier post...

    Voilà mon souci:

    J'ai créé un projet VBA qui évolue entre plusieurs Userform (modal).

    Dans ceux-ci des boutons et des textbox. Lorsque j'exécute ma macro en utilisant la souris pour cliquer sur les boutons : pas de soucis , tout se déroule comme prévu.

    Aux boutons, j'ai associé une image code barre qui lorsque je scanne, rempli une textbox (hors de l'écran) qui sous l'évènement change renvoie à l'évènement click du bouton. Pour le premier Userform, ça fonctionne, mais à partir du deuxième, cela ne détecte pas l'évènement change de la textbox concernée. Et si je reprends en cliquant ça marche.

    Quelqu'un aurait une idée de ce qui n'irait pas  ?

    • Partager sur Facebook
    • Partager sur Twitter
      3 mars 2022 à 11:18:16

      "à partir du deuxième" du deuxième quoi ? userform ? le textbox qui est rempli se trouve sur lequel des deux userform ? il y en a un par userform ? 

      Si c'est le même texte qui est entré dans le textbox, ça ne déclenchera pas l'évènement (puisqu'il n'y a pas de changement du contenu); dans ce cas-là, il vaut vider le texte (ce qui va déclencher l'événement change, donc il faudra gérer le cas où le texte est vide), puis remettre le texte (ce qui va de nouveau déclencher l'événement change)

      • Partager sur Facebook
      • Partager sur Twitter
        3 mars 2022 à 18:40:51

        Bonjour Umfred,

        Je vais essayer d'être plus précis:

        dans mon uerform1 j'ai 2 textbox, 1 bouton et une image:

        Private Sub TextBox11_Change()
        TextBox12.SetFocus
        End Sub
        
        Private Sub TextBox12_Change()
        If Mid(TextBox12.Value, 1, 1) = "$" Then
        TextBox12.Value = Right(TextBox12.Value, Len(TextBox12.Value) - 1)
        Else
        End If
        TextBox12.SetFocus
        If TextBox12.Value = "A1" Then
        UserForm1.TextBox12.Value = ""
        CommandButton1_Click
        Else
        End If
        End Sub
        
        Public Sub CommandButton1_Click()
        Dim msg As String
        UserForm2.Show
            UserForm2.Image2.Visible = False
            TextBox11.Value = ""
        End Sub
        

        dans mon 2ème Userform, j'ai la même chose mais avec l'image en non visible par défaut :

        Private Sub TextBox21_Change()
        UserForm2.Image2.Visible = True
        TextBox22.SetFocus
        End Sub
        
        Private Sub TextBox22_Change()
        
        If Mid(TextBox22.Value, 1, 1) = "$" Then
        TextBox22.Value = Right(TextBox22.Value, Len(TextBox22.Value) - 1)
        Else
        End If
        If TextBox22.Value = "A2" Then
        UserForm2.TextBox22.Value = ""
        CommandButton2_Click
        Else
        End If
        End Sub
        
        Private Sub CommandButton2_Click()
        UserForm3.Show
        End Sub

        puis cela s'en va vers un 3ème...

        Lorsque dans mon 1er userform, je rentre une valeur dans ma 1ere textbox , ça mets le focus sur la deuxième Textbox, je click sur le bouton et cela m'ouvre le 2ème Userform.

        Dans ce 2eme userform, si je rentre une valeur dans sa 1ere textbox, cela fait apparaitre l'image et mets le focus sur sa 2eme textbox. Je click et ça va vers le 3ème userform.

        Maintenant si je veux passer par des flashcode au lieu de clicker:

        Dans mon 1ere userform ,  je rentre une valeur dans ma 1ere textbox , ça mets le focus sur la deuxième Textbox, je flash et cela me rempli ma 2eme textbox qui renvoi à l'évènement click. Cela m'ouvre mon 2eme userform (comme prévu) , mais si je mets une valeur dans la 1ere textbox de ce 2eme userform ; rien ne se passe, alors que l'évènement change devrait démarrer.

        Voilà mon problème : en cliquant sur le bouton cela fonctionne mais pas en flashant.

        J'espère avoir été plus clair...



        • Partager sur Facebook
        • Partager sur Twitter
          3 mars 2022 à 19:17:16

          Est-ce que la valeur que tu mets dans la 1ere textbox du 2nd userform est la même qu'au moment de son affichage ? si oui, pas de changement de valeur, donc pas d'événement change.

          et questions bêtes, mais as-tu essayé plusieurs fois de suite avec le clic? et as-tu essayé en commençant avec les flashcode ?

          • Partager sur Facebook
          • Partager sur Twitter
            3 mars 2022 à 20:23:30

            Quelle que soit la valeur dans la textbox, c'est pareil.

            Si je ne fais que du cliclk pas de problème (autant de fois que je veux).

            Et j'ai aussi essayé de débuter par le flash mais rien y fait.

            D'où mon désarroi ...

            Vous pouvez faire l'essai avec le code que j'ai fourni et en tapant "A1" dans la deuxième textbox du 1er userform. Vous verrez que si vous rentrez une valeur dans le 1er textbox du 2eme userform , rien ne se passe.

            • Partager sur Facebook
            • Partager sur Twitter
              4 mars 2022 à 13:33:07

              Je crois que le problème vient du fait que dans le cas où l'on a A1, on reste dans le événement TextBox12_Change jusqu'à que l'on ai fermé le UserForm2

              et du coup, on ne peut traiter d'autres événements change(). (sauf sur le même UserForm, vu que le UserForm1.TextBox12.Value = "" déclenche le TextBox12_Change())

              Une solution serait d'afficher tes fenêtres en non modales (UserForm1.Show vbModeLess) 

              Une autre solution serait d'appeler de manière asynchrone le clic, à l'aide de Application.OnTime par exemple 

              Remplace le CommandButton1_Click dans TextBox12_change() par Application.OnTime Now, "Call_USF1_Click"

              et dans un module (pas dans le code d'un UserForm), ajouter

              Public Sub Call_USF1_Click()
                  UserForm1.CommandButton1_Click
              End Sub
              



              • Partager sur Facebook
              • Partager sur Twitter
                6 mars 2022 à 21:47:50

                Bonjour umfred,

                J'avais remarqué qu'en mode non modal cela marchait mais je perdais le focus.

                Je ne connaissais pas mais Application.OnTime c'est ce qu'il me faut.

                Merci beaucoup.

                • Partager sur Facebook
                • Partager sur Twitter

                VBA Excel : Evenement click et change

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown