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

Statistiques des forums

Discussions
312 069
Messages
2 085 041
Membres
102 764
dernier inscrit
nestu