Microsoft 365 EXCEL - VBA - Problème sur la sélection d'une textbox

Yann Sama

XLDnaute Nouveau
Bonjour,

Je suis en difficultés sur un formulaire.
Je dois renseigner une date dans un textbox mais je souhaiterais y mettre un message d'erreur si ce qui est saisi n'est pas une date.
Jusque là tout va bien, mais je souhaiterais rajouter un détail, à savoir que le texte soit sélectionné automatiquement après la validation du message.

DateEve c'est le nom de ma textbox.
Je me suis déjà renseigné sur les forums et il semblerait que le bon code soit :
DateEve.SetFocus
DateEve.SelStart = 0
DateEve.SelLength = Len(DateEve.Text)

Mais ça ne veut pas marcher.
Pire encore, ça fonctionne si j'écris du texte dans la seconde textbox qui est totalement absente de mon code.

Alors est-ce que mon code n'est pas bon ou incomplet?
Est-ce que j'utilise la bonne procédure événementielle, à savoir que j'ai déjà utilisé after update, exit et change avec le même code?
Quand je le mets dans "Change", ça fonctionne mais ça le fait à chaque caractère que je tape.

Merci à vous

VB:
Private Sub DateEve_AfterUpdate()

If IsDate(DateEve) Or DateEve = "" Then
    Exit Sub
Else
    MsgBox "Tu sais pas écrire une date ou quoi?"
    DateEve.SetFocus
    DateEve.SelStart = 0
    DateEve.SelLength = Len(DateEve.Text)

End If

End Sub
 

Pièces jointes

  • Test Selection Date.xlsm
    17.6 KB · Affichages: 22

patricktoulon

XLDnaute Barbatruc
re
VB:
option explicit
Dim xx&
Dim terminate
Private Sub TextBox5_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
   if  terminate=false then
   With TextBox5
        If Not (IsNumeric(.Value) Or .Value = "" ) Then
            xx = xx + 1
            If xx = 1 Then MsgBox "Merci de saisir une donnée numérique"
            If xx = 2 Then MsgBox "tu es sourd gros balo!!!!Des chiffres...!!! Avec des 1, des 2, des 3,...tete d'ampoule figure de poulpe !!!!!!!"
            If xx = 2 Then xx = 0
            TextBox5.SelStart = 0
            TextBox5.SelLength = Len(TextBox5)
            Cancel = True
        Else
            xx = 0
        End If
    End With
end if
End Sub


Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
terminate = True
TextBox5 = ""
End Sub
 

Yann Sama

XLDnaute Nouveau
Non navré. Ca ne fonctionne toujours pas.
Après deux tentatives, le formulaire est "figé"

Ah ça y est, enfin... J'ai essayé de comprendre un peu ton code.
En fait, le fait de mettre :
VB:
Cancel = True
L'évènement "Before Update" tourne en boucle.
Donc le check sur le contenu de la cellule se fait de nouveau.
En incrémentant une variable, on peut savoir donc combien de fois on boucle l'évènement.

C'est bien ça?

Donc j'ai fini par remplacer If xx = 2 Then xx = 0 par If xx > 2 Then xx = 1.
Comme ça on finit par retomber sur le deuxième message.

Alors je vais pas chipoter mais bizarrement après 3 messages rigolos (correspondant à 3 tentatives de mettre du texte), rien ne se passe les deux fois suivantes où je valide du texte, puis j'ai le droit à nouveau à 3 messages rigolos, puis rien les deux tours suivants, puis 3 messages rigolos et ainsi de suite.

En tout cas merci pour votre aide et vos explications passées et à venir ;)
 

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 139
Membres
112 669
dernier inscrit
Guigui2502