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 !

E

EliotN

Guest
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 modification par un modérateur:
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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

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