Savoir si une valeur appartient à une liste de valeur

WilsonMD

XLDnaute Nouveau
Bonjour à tous,


J'ai besoin de faire un test dans un user form... la valeur saisie dans un textbox doit appartenir à une liste de valeur sinon la saisie doit être annulée...

Je ne veux pas suivre le méthode où l"on défini manuellement avec is array la liste des données comme par exemple comme cela

Sub test()
A = 45
If IsNumeric(Application.Match(A, Array(1, 5, 26, 45, 99), 0)) Then
MsgBox "c'est dedans!"
Else
MsgBox "c'est pas dedans!"
End If
End Sub

La liste est en effet amenée à évoluer et je veux que le code prenne en compte tout seul cette évolution un peu comme une fonction (=DECALER)

J'ai trouvé ce code qui ressemble à ce que je veux mais je n'arrive pas à le faire fonctionner. Il s'agit d'une liste de clients

Sub test()
Dim i As Long
Dim oRange As Range
For i = 1 To ActiveSheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell).Row
Set oRange = ActiveSheet.Cells(i, 1)
If InStr(1, oRange.Value, "u", vbTextCompare) Then
'# Si le mot de la colonne contient un 'u'...
oRange.EntireRow.Delete (xlShiftUp)
i = i - 1
End If
Next i
End Sub

en remplaçant u par le n° de client je voudrais dire que si :
- le n° existe OK le client est dans la liste des actifs
- le n° n'existe pas ds la liste, saisie bloquée

merci d'avance pour votre aide
 

Pièces jointes

  • Classeur de test.xlsm
    8.8 KB · Affichages: 174

WilsonMD

XLDnaute Nouveau
Re : Savoir si une valeur appartient à une liste de valeur

C'est en effet ma solution de secours mais je je n'ai mis qu'une petite liste en exemple, je travaille sur de grosses bases de données et je ne peux pas faire une listbox avec 300 valeurs.

J'avais à peu près fait cela avec la formule

Sub test()
Dim i As Long
Dim oRange As Range

For i = 2 To 50
Set oRange = ActiveSheet.Cells(i, 1)
If InStr(1, oRange.Value, "14", vbTextCompare) Then
MsgBox("Ok-Valeur présente"
Else
MsgBox("Erreur-Valeur inexistaante")
i = i - 1
End If
Next i
End Sub

mais cela me met une suite infinie de msgbox et la feuille bug

merci en tout cas pour ta réponse
 

Paritec

XLDnaute Barbatruc
Re : Savoir si une valeur appartient à une liste de valeur

Bonjour WilsonMD, JB, le forum
ton fichier en retour sans avoir à utiliser les filtres
dis moi si cela te convient
a+
Papou :)
 

Pièces jointes

  • Classeur de testV1.zip
    18.9 KB · Affichages: 170

Robert

XLDnaute Barbatruc
Repose en paix
Re : Savoir si une valeur appartient à une liste de valeur

Bonjour le fil, bonjour le forum,

Je re propose la marco suivante :
Code:
Dim pl As Range 'déclare la variable pl (PLage)
Dim vr As Integer 'déclare la variable vr (Valeur Recherchée)
Dim r As Range 'déclare la variable r (Recherche)
 
'définit la plage pl
Set pl = Sheets("Feuil1").Range("A2:A" & Sheets("Feuil1").Range("A65536").End(xlUp).Row)
vr = CInt(TextBox1.Value) 'définit la valeur recherchée (convertie en entier)
Set r = pl.Find(vr, , xlValues, xlWhole) 'définit la recherche r
If Not r Is Nothing Then 'Condition 1 : si il existe au moins une occurrence de vr dans pl
    'condition 2 : si la cellule à droite est "Oui"
    If r.Offset(0, 1).Value = "Oui" Then
        MsgBox "Ok ! Client Actif." 'message
        'ton code pour la suite...
    Else 'sinon (condition 2)
        Msgbox "Attention ! Client Non Actif." 'message
        Exit Sub 'sort de la procédure
    End If 'fin de la condition 2
Else 'sinon (consition 1)
    MsgBox "Cette valeur n'appartient pas à la liste !" 'message
    Exit Sub 'sort de la procédure
End If 'fin de la condition 1
 

WilsonMD

XLDnaute Nouveau
Re : Savoir si une valeur appartient à une liste de valeur

Merci à tous les deux, cela fonctionne parfaitement dans les deux cas!

Private Sub CommandButton1_Click()
Dim i&, fin&, aa As Variant
If TextBox1 = "" Then Exit Sub
fin = Feuil1.Range("A65536").End(xlUp).Row
aa = Feuil1.Range("A2:D" & fin)
For i = 1 To UBound(aa)
If aa(i, 2) = "Oui" And aa(i, 1) Like "*" & CDbl(TextBox1.Value) & "*" Then MsgBox "La valeur appartient au tableau", , "Test": GoTo 1
Next i
MsgBox "La valeur n'appartient pas au tableau", , "Test": TextBox1 = ""
1
End Sub

Juste deux petites questions si vous me le permettez que je comprenne la raisonnement:
- go to 1 permet de sortir de la boucle de test dès que la condition est vraie sans tester toutes les cellules?
- et que signifie like "*"

Un grand merci et bon week end à vous
 

Paritec

XLDnaute Barbatruc
Re : Savoir si une valeur appartient à une liste de valeur

Re Robert:) WilsonMD
oui pour le goto
pour le like "*" & textbox1 & "*" c'est pour tester si la valeur existe pas nécessairement dans l'ordre si tu as une référence 12546952 et que tu ne connais plus le 125 mais que tu sais que ton client à le numéro 4695 tu lances le test et il te trouvera si le numéro est contenu ou pas
si maintenant tu veux tester un seul numéro complet tu retires les "*" avant et après et là tu auras un test sur valeur unique
a+
papou :)
 

Discussions similaires

Réponses
4
Affichages
194

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa