Recherche une chaîne de caractères par textbox

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
 

Dranreb

XLDnaute Barbatruc
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
 

EliotN

XLDnaute Nouveau
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:

Lone-wolf

XLDnaute Barbatruc
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
 

Dranreb

XLDnaute Barbatruc
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
 

Dranreb

XLDnaute Barbatruc
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
 

EliotN

XLDnaute Nouveau
En fait je crois que ce n'était pas bon ce que vous m'avez imposé :

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
 

EliotN

XLDnaute Nouveau
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

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
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87