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

Signaler
Messages postés
47
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
18 juin 2020
-
Messages postés
2236
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 septembre 2020
-
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

6 réponses

Messages postés
6930
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 septembre 2020
112
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

Messages postés
47
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
18 juin 2020

Bonjour,
Non, ce n'est jamais le même code. il y a environ une centaine de codes différents
Messages postés
2236
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 septembre 2020
114 >
Messages postés
47
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
18 juin 2020

Bonjour !
As-tu essayé le code que je t'ai fourni ?
Messages postés
47
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
18 juin 2020

En utilisant ton code ça fonctionne (uniquement pour le code 41-086-33, normal)
Messages postés
2236
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 septembre 2020
114 >
Messages postés
47
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
18 juin 2020

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
Messages postés
47
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
18 juin 2020

Bjr,
Toujours un chiffre à la place des X
Messages postés
6930
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
25 septembre 2020
112
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
Messages postés
2236
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 septembre 2020
114
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. 
Messages postés
2236
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 septembre 2020
114
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
Messages postés
47
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
18 juin 2020

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)
Messages postés
2236
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 septembre 2020
114
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
Messages postés
47
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
18 juin 2020

"Erreur de compilation: Erreur de syntaxe"
Dim Ok As Boolean = false
Messages postés
2236
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
21 septembre 2020
114 >
Messages postés
47
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
18 juin 2020

Salut
false avec un F majuscucle à mon avis
Messages postés
47
Date d'inscription
vendredi 14 juin 2013
Statut
Membre
Dernière intervention
18 juin 2020

Nickel, merci à vous 2 pour votre aide :)