Userform Excel : Trouver si 2 valeurs différentes [Résolu]

Messages postés
41
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
17 février 2019
- - Dernière réponse : vb95
Messages postés
1866
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 mai 2019
- 29 août 2018 à 22:55
Bonjour,

Contexte :
Je suis dans mon UserForm, je note le code dans ma TextBox et je clique sur mon bouton rechercher pour afficher les données de mes 21 TextBox.

Voici 2 exemples de formats différents pour les codes :
4108633 (sans tirets)
41-086-33 (avec des tirets)

Action :
Je note le code 41-086-33 dans ma TextBox3 et que je clique sur mon bouton rechercher :
>>> Résultat : Ok ; Ça me récupère bien les données de mes 21 TextBox.

Par contre, si je note ce même code mais sans les tirets 4108633 et que je clique sur mon bouton rechercher :
>>> Résultat : Ça ne me récupère rien (normal, puisque ce code est connu avec des tirets dans ma feuille Excel)

Ce que j'aimerais :
J'aimerais qu'en cliquant sur mon bouton de recherche, ça me trouve aussi bien le code avec que sans tirets.


Merci d'avance pour votre aide

Cordialement,
Alexis
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
6033
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 mai 2019
79
1
Merci
Bonjour,

cela ne serait pas plus simple de faire cela:

Private Sub CommandButton1_Click()
If TextBox3.Text = "4108633" Then
TextBox3.Text = "41-086-33"
End If
MsgBox TextBox3.Text
End Sub



Où en es-tu avec ce post, as-tu trouvé la solution?


https://codes-sources.commentcamarche.net/forum/affich-10086698-signature-outlook-dans-macro-excel

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 141 internautes nous ont dit merci ce mois-ci

1Alexiiis
Messages postés
41
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
17 février 2019
-
Bonjour,
Non, ce n'est jamais le même code. il y a environ une centaine de codes différents
vb95
Messages postés
1866
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 mai 2019
58 > 1Alexiiis
Messages postés
41
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
17 février 2019
-
Bonjour !
As-tu essayé le code que je t'ai fourni ?
1Alexiiis
Messages postés
41
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
17 février 2019
-
En utilisant ton code ça fonctionne (uniquement pour le code 41-086-33, normal)
vb95
Messages postés
1866
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 mai 2019
58 > 1Alexiiis
Messages postés
41
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
17 février 2019
-
bonjour

Les codes sont-ils toujours sous le format XX-XXX-XX où X représente un chiffre ?
Mon code ne spécifie aucun chiffre spécifiquement
1Alexiiis
Messages postés
41
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
17 février 2019
-
Bjr,
Toujours un chiffre à la place des X
Commenter la réponse de cs_Le Pivert
Messages postés
6033
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
22 mai 2019
79
1
Merci
une autre manière de procéder, forcer la saisie des tirets:

Option Explicit
Dim num As Boolean
Dim caract As String
Dim Valeur As Byte
Private Sub TextBox1_Change()
If num = True Then '1er caractère
'ancien
TextBox1.MaxLength = 9 'nb caracteres maxi dans textbox
 Valeur = Len(TextBox1)
If Valeur = 2 Or Valeur = 6 Then TextBox1 = TextBox1 & "-"
End If
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
caract = Left(TextBox1.Value, 1)
If IsNumeric(caract) Then
num = True
Else
num = False '
End If
End Sub


Voilà tu as le choix

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 141 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Le Pivert
Messages postés
1866
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 mai 2019
58
1
Merci
Bonsoir
J'ai modifié mon code car j'ai fait un oubli

Private Sub CommandButton3_Click()

Dim R As Range
Dim Chaine as String = Textbox3.Value ' code oublié 
Dim Ok as Boolean = false
' Test 9 caractères et si tirets en position 3 et 7 dans la Textbox
If Chaine.Length = 9 then
    If InStr(1,Chaine,,"-") = 3 And InStr(1,Chaine,"-") = 7 Then
        Ok = True ' la chaine est bien XX-XXX-XX
    End If
Else 
    ' Test si 7 Caractères et si la TextBox ne contient aucun tiret 
    If InStr(1, Chaine, "-") = 0 And Chaine.Length = 7 Then
        ' on insère les 2 tirets manquants
        Chaine = Chaine.Left(1,2) & "-" & Chaine.Mid(3,3) & "-" & Chaine(6,2)
        Ok = True
     End if
End If
If Ok = True Then
    Set R = Range("S1:a" & Range("A65536").End(xlUp).Row).Find(Chaine)
         If Not R Is Nothing Then
         Me.TextBox1 = R.Offset(0, -2).Text
         Me.TextBox2 = R.Offset(0, -1).Text
         Me.TextBox4 = R.Offset(0, 1).Text
         Me.TextBox5 = R.Offset(0, 2).Text
         Me.TextBox6 = R.Offset(0, 3).Text
         Me.TextBox7 = R.Offset(0, 31).Text
         Me.TextBox8 = R.Offset(0, 29).Text
         Me.TextBox9 = R.Offset(0, 6).Text
         Me.TextBox10 = R.Offset(0, 7).Text
         Me.TextBox11 = R.Offset(0, 8).Text
         Me.TextBox12 = R.Offset(0, 9).Text
         Me.TextBox13 = R.Offset(0, 10).Text
         Me.TextBox14 = R.Offset(0, 30).Text
         Me.TextBox15 = R.Offset(0, 23).Text
         Me.TextBox16 = R.Offset(0, 24).Text
         Me.TextBox17 = R.Offset(0, 25).Text
         Me.TextBox18 = R.Offset(0, 26).Text
         Me.TextBox19 = R.Offset(0, 27).Text
         Me.TextBox20 = R.Offset(0, 32).Text
         Me.TextBox21 = R.Offset(0, 16).Text
     End If
End If

End Sub
--
La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. 

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 141 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vb95
Messages postés
1866
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 mai 2019
58
0
Merci
bonjour
ton bouton Recherche devrait faire la recherche 2 fois : une première fois avec les tirets et une seconde fois sans les tirets
Sans voir le code associé à ton bouton Rechercher difficile d'être plus précis
1Alexiiis
Messages postés
41
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
17 février 2019
-
Voici le code de mon bouton "Rechercher"

Private Sub CommandButton3_Click()
Dim R As Range
Set R = Range("S1:a" & Range("A65536").End(xlUp).Row).Find(TextBox3.Value)
        If Not R Is Nothing Then
        Me.TextBox1 = R.Offset(0, -2).Text
        Me.TextBox2 = R.Offset(0, -1).Text
        Me.TextBox4 = R.Offset(0, 1).Text
        Me.TextBox5 = R.Offset(0, 2).Text
        Me.TextBox6 = R.Offset(0, 3).Text
        Me.TextBox7 = R.Offset(0, 31).Text
        Me.TextBox8 = R.Offset(0, 29).Text
        Me.TextBox9 = R.Offset(0, 6).Text
        Me.TextBox10 = R.Offset(0, 7).Text
        Me.TextBox11 = R.Offset(0, 8).Text
        Me.TextBox12 = R.Offset(0, 9).Text
        Me.TextBox13 = R.Offset(0, 10).Text
        Me.TextBox14 = R.Offset(0, 30).Text
        Me.TextBox15 = R.Offset(0, 23).Text
        Me.TextBox16 = R.Offset(0, 24).Text
        Me.TextBox17 = R.Offset(0, 25).Text
        Me.TextBox18 = R.Offset(0, 26).Text
        Me.TextBox19 = R.Offset(0, 27).Text
        Me.TextBox20 = R.Offset(0, 32).Text
        Me.TextBox21 = R.Offset(0, 16).Text
        End If
End Sub


(Je précise que le code ci-dessus c'est une recherche liée a la TexBox3 car j'ai 2 autres recherches sur les TexBox1 et TexBox2)
Commenter la réponse de vb95
Messages postés
1866
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 mai 2019
58
0
Merci
Bonjour
Il suffit d'utiliser la fonction Instr pour tester si la TextBox contient des tirets ou non
On vérifie aussi le nombre de caractères de la TextBox : 9 avec les tirets et 7 sans les tirets
Essaie ceci
Private Sub CommandButton3_Click()

Dim R As Range
Dim Chaine as String
Dim Ok as Boolean = false
' Test 9 caractères et si tirets en position 3 et 7 dans la Textbox
If Chaine.Length = 9 then
    If InStr(1,TextBox3.Value,"-") = 3 And InStr(1,Textbox3.Value,"-") = 7 Then
        Chaine = TextBox3.Value
        Ok = True
    End If
Else 
    ' Test si 7 Caractères et si la TextBox ne contient aucun tiret 
    If InStr(1, Chaine, "-") = 0 And Chaine.Length = 7 Then
        Chaine = TextBox3.Value
        ' on insère les 2 tirets manquants
        Chaine = Chaine.Left(1,2) & "-" & Chaine.Mid(3,3) & "-" & Chaine(6,2)
        Ok = True
     End if
End If
If Ok = True Then
    Set R = Range("S1:a" & Range("A65536").End(xlUp).Row).Find(Chaine)
         If Not R Is Nothing Then
         Me.TextBox1 = R.Offset(0, -2).Text
         Me.TextBox2 = R.Offset(0, -1).Text
         Me.TextBox4 = R.Offset(0, 1).Text
         Me.TextBox5 = R.Offset(0, 2).Text
         Me.TextBox6 = R.Offset(0, 3).Text
         Me.TextBox7 = R.Offset(0, 31).Text
         Me.TextBox8 = R.Offset(0, 29).Text
         Me.TextBox9 = R.Offset(0, 6).Text
         Me.TextBox10 = R.Offset(0, 7).Text
         Me.TextBox11 = R.Offset(0, 8).Text
         Me.TextBox12 = R.Offset(0, 9).Text
         Me.TextBox13 = R.Offset(0, 10).Text
         Me.TextBox14 = R.Offset(0, 30).Text
         Me.TextBox15 = R.Offset(0, 23).Text
         Me.TextBox16 = R.Offset(0, 24).Text
         Me.TextBox17 = R.Offset(0, 25).Text
         Me.TextBox18 = R.Offset(0, 26).Text
         Me.TextBox19 = R.Offset(0, 27).Text
         Me.TextBox20 = R.Offset(0, 32).Text
         Me.TextBox21 = R.Offset(0, 16).Text
     End If
End If

End Sub


Attention aucune vérification n'est faite sur les chiffres de la TextBox .
tu pourrais entrer autre chose que des chiffres : exemple 41-086-RR à la place de 41-086-33
1Alexiiis
Messages postés
41
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
17 février 2019
-
"Erreur de compilation: Erreur de syntaxe"
Dim Ok As Boolean = false
vb95
Messages postés
1866
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
22 mai 2019
58 > 1Alexiiis
Messages postés
41
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
17 février 2019
-
Salut
false avec un F majuscucle à mon avis
Commenter la réponse de vb95
Messages postés
41
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
17 février 2019
0
Merci
Nickel, merci à vous 2 pour votre aide :)
Commenter la réponse de 1Alexiiis