Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Recherche une chaîne de caractères par textbox

  • Initiateur de la discussion Initiateur de la discussion EliotN
  • Date de début Date de début

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 !

EliotN

XLDnaute Nouveau
Bonjour à toutes et tous.
Excel 2010.
Dans un userform, j'ai deux textbox.
Dans textbox1 je saisi une valeur (par exemple 24) et si je sors (par exit entre autre) , la valeur de textbox2 sera 1.
Par contre ce que je cherche à faire est que quand je saisi dans textbox1 24+33, à la sortie la valeur de textbox2 passe à 2, puisqu'il y a eu 1 signe +, et ce à chaque fois que j'ajoute un +
Par contre il ne faudrait pas que je puisse "sortir" si ma saisie se termine par un signe +, auquel cas cela voudrait dire qu'il me manque une donnée.
J'espère que ce n'est pas trop du charabia ?
Merci du coup de main.

Cordialement
Eliot
 
Bonjour.
Comme ça :
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim TSpl$(), U&
TSpl = Split(TextBox1.Text, "+")
U = UBound(TSpl)
TextBox2.Text = U + 1
If U > 0 Then Cancel = TSpl(U) = ""
End Sub
 
Cela fonctionne très bien, super !
mais comment interdire la sortie si le dernier caractère est le + (en cas d'oubli de saisir la dernière valeur) ? 🙁
Et même en "poussant" un peu, faire cela au fur et à mesure de la saisie, ca pourrait être possible ??
 
Dernière édition:
Bonjour Eliot, Dranreb 🙂

VB:
Private Sub TextBox1_AfterUpdate()
Dim signe$, nb&, i&

    signe = "+"

    For i = 1 To Len(TextBox1)
        If Right(TextBox1, 1) = signe Then
            MsgBox "Il y a un signe + en trop" & vbLf & "Veuillez rectifiez", vbExclamation, "ERREUR"
            Exit For
        ElseIf Mid(TextBox1, i, 1) = signe Then
            nb = nb + 1
        End If
        TextBox2 = nb
    Next i

End Sub

Private Sub TextBox2_Enter()
    TextBox1.SetFocus
End Sub
 
Comme ça peut être :
VB:
Option Explicit
Private SortieInterdite As Boolean
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Dim TSpl$(), U&
   TSpl = Split(TextBox1.Text, "+")
   U = UBound(TSpl)
   TextBox2.Text = U + 1
   If U > 0 Then SortieInterdite = TSpl(U) = "" Else SortieInterdite = False
   Cancel = SortieInterdite
   End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
   Cancel = SortieInterdite
   End Sub
 
En fait je crois que ce n'était pas bon ce que vous m'avez imposé :
si je sors (par exit entre autre)
Il vaut mieux le faire quand la TextBox1 change :
VB:
Option Explicit
Private SortieInterdite As Boolean
Private Sub TextBox1_Change()
   Dim TSpl$(), U&
   TSpl = Split(TextBox1.Text, "+")
   U = UBound(TSpl)
   TextBox2.Text = U + 1
   If U > 0 Then SortieInterdite = TSpl(U) = "" Else SortieInterdite = False
   End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   Cancel = SortieInterdite
   End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
   Cancel = SortieInterdite
   End Sub
 

Nos messages se sont croisés, ce serait mieux en effet, je teste
 

Ne soyez pas trop pressés je fais de mon mieux 🙁.
Oui je viens de tester, ce n'est pas bon désolé, normalement à la première saisie, la valeur de texbox2 doit passer à 1, et si on saisit un +, cela doit passer à 2, mais si on l'efface cela doit repasser à 1 et ainsi de suite.
La soluce jusqu'à maintenant de Dranreb me convient mais si vous trouvez mieux pourquoi pas.
merci
 
- 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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…