Recherche de plusieurs valeurs dans un UserForm [Résolu]

Signaler
Messages postés
20
Date d'inscription
mercredi 22 janvier 2020
Statut
Membre
Dernière intervention
9 mars 2020
-
Messages postés
20
Date d'inscription
mercredi 22 janvier 2020
Statut
Membre
Dernière intervention
9 mars 2020
-
Bonsoir,
J'essaie de faire un formulaire pour rechercher des valeurs. J'ai créé un inputbox liste modifiable où j'entre la valeur à rechercher (un nom de famille). A côté, j'ai créé deux colonnes d'inputbox non modifiables (lock) qui sont respectivement NOM et PRENOM. Et ce sur plusieurs lignes.
J'aimerais que lorsque je recherche le nom de famille "Dupond", celui-ci soit recherché dans ma feuille de calcul et soit renvoyé dans la première inputbox avec à côté le prénom de ce personnage. (jusque là j'y suis arrivé.)

Le problème est qu'il y a plusieurs Dupond donc j'aimerais avoir plusieurs résultats différentiables par les prénoms. Mais là je chôme et je sais pas du tout comment procéder. Je sais que c'est possible sur la feuille de calcul mais j'aimerais bien le faire sur mon formulaire si possible.

J'espère avoir été clair, merci d'avance !

8 réponses

Messages postés
28940
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juillet 2020
2 609
Bonjour,

Pour ta recherche, tu peux (dois) utiliser la méthode FIND

voir même.. pour avoir tous les résultats possibles, un findall
Explications disponibles ici :
https://www.commentcamarche.net/faq/36886-fonction-find-dans-vba-recherche-de-donnees-sous-excel#findall

Je t'invite donc à placer le résultat de la recherche dans une ListBox pour permettre à l'utilisateur de choisir parmis les réponses, et au clic sur l'un des résultats, ça le place dans tes input.

En faisant une recherche sur le forum Excel ou celui qui concerne le VBA tu trouveras des exemples ( dont un assez récent )

Je t'invite également à te servir de cette doc pour manipuler les controles du formulaire
https://silkyroad.developpez.com/VBA/ControlesUserForm/



Messages postés
20
Date d'inscription
mercredi 22 janvier 2020
Statut
Membre
Dernière intervention
9 mars 2020

Merci de votre aide, je me suis plongé dedans et j'ai essayé de trouver des vidéos mais je n'arrive pas du tout à le faire...

Par exemple dans un tableau que j'ai appelé Tableau (via le gestionnaire de noms), je veux rechercher la valeur que j'aurais entré dans le ComboBox1 et la renvoyer dans la ListBox1.

Mais j'aimerais intégrer la possibilité que plusieurs valeurs correspondent à mon ComboBox1 et que par conséquent, plusieurs résultats soient renvoyés dans la ListBox1.

J'ai essayé le code que j'ai trouvé en le modifiant un peu mais ça n'a rien donné.

Dim arTemp() As String
Dim ValCherchee As String
ValCherchee = cbox.value
Dim Nom_Feuil As String
Nom_Feuil = "participants"
Dim DataColumn As Integer
DataColumn = 3
'---------------------------------------------------------------
bFound = FindAll(ValCherchee, Sheets(Nom_Feuil), Tableau9, arTemp())
'---------------------------------------------------------------

If bFound = True Then
Debug.Print "Nb occurences : " & UBound(arTemp)
For x = 1 To UBound(arTemp)
Debug.Print arTemp(x)

ListBox1.AddItem (Cells(arTemp(x), DataColumn))
Next
End If


Ce serait très gentil de m'aider à faire un code qui fonctionne !
Merci !
Messages postés
16172
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
12 juillet 2020
2 990
Bonjour,

Si tu pouvais mettre ton classeur en pièce jointe
Mettre le classeur sans données confidentielles en pièce jointe sur 
https://mon-partage.fr
Dans lien de téléchargement
faire un clic droit- copier l’adresse du lien et le coller dans votre message en cours sur ccm

on devrait pouvoir de donner une proposition (colonnes des noms et prénoms, nombre de noms, où setrove combox et listbox : formulaire ou classeur, etc...)

Messages postés
20
Date d'inscription
mercredi 22 janvier 2020
Statut
Membre
Dernière intervention
9 mars 2020

voila mon fichier (c'est un fichier de test)
https://mon-partage.fr/f/w2CJDThI/
Messages postés
28940
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juillet 2020
2 609
Tu as oublié de mettre la fonction findAll dans un module
Function FindAll(ByVal sText As String, ByRef oSht As Worksheet, ByRef sRange As String, ByRef arMatches() As String) As Boolean
' --------------------------------------------------------------------------------------------------------------
' FindAll - To find all instances of the1 given string and return the row numbers.
' If there are not any matches the function will return false
' --------------------------------------------------------------------------------------------------------------
On Error GoTo Err_Trap
Dim rFnd As Range ' Range Object
Dim iArr As Integer ' Counter for Array
Dim rFirstAddress ' Address of the First Find
' -----------------
' Clear the Array
' -----------------
Erase arMatches
Set rFnd = oSht.Range(sRange).Find(what:=sText, LookIn:=xlValues, lookAt:=xlPart)

If Not rFnd Is Nothing Then
   rFirstAddress = rFnd.Address
   Do Until rFnd Is Nothing
      iArr = iArr + 1
      ReDim Preserve arMatches(iArr)
      arMatches(iArr) = rFnd.Row 'rFnd.Address pour adresse complete ' rFnd.Row Pour N° de ligne
      Set rFnd = oSht.Range(sRange).FindNext(rFnd)
      If rFnd.Address = rFirstAddress Then Exit Do ' Do not allow wrapped search
   Loop
   FindAll = True
Else
' ----------------------
' No Value is Found
' ----------------------
   FindAll = False
End If
' -----------------------
' Error Handling
' -----------------------
Err_Trap:
If Err <> 0 Then
   MsgBox Err.Number & " " & Err.Description, vbInformation, "Find All"
   Err.Clear
   FindAll = False
   Exit Function
End If
End Function



- Tu as oublié de changer le nom de la feuille 1
- Tu n'a pas créé la plage nommée Tableau 1
- Tu ne passes pas la "plage" correctement

ça devrait donner
bFound = FindAll(ValCherchee, Sheets(Nom_Feuil), "Tableau1", arTemp())



Messages postés
20
Date d'inscription
mercredi 22 janvier 2020
Statut
Membre
Dernière intervention
9 mars 2020

Ah oui d'accord j'avais carrément oublié de mettre la fonction... mais bon au moins comme ça c'est clair !

Mais du coup j'ai tout modifié et ça fonctionne mais si j'ai envie d'ajouter le prénom (si je recherche Dupond par exemple) je dois mettre comment pour qu'il aille dans la colonne 2 (j'ai créé 2 colonnes à la ListBox).

J'ai ça mais (je m'y attendais) ça me l'a mis en dessous...

ListBox1.AddItem (Cells(arTemp(x), LA COLONNE QUI CORRESPOND AU PRENOM))
Messages postés
28940
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juillet 2020
2 609
Tu n'as pas lu le lien que je t'ai donné concernant les controls dans les userform visiblement.
Il faut utiliser la fonction
 ListBox1.List(Ligne,Colonne) ' la première colonne c'est 0 

Voici un exemple
https://forums.commentcamarche.net/forum/affich-6375137-vba-remplir-une-listbox#6
Messages postés
20
Date d'inscription
mercredi 22 janvier 2020
Statut
Membre
Dernière intervention
9 mars 2020

Si justement j'ai lu mais je ne sais pas l'utiliser je comprends pas et au plus j'essaie au plus je m'embrouille et au lieu de copier coller à chaque fois j'aimerais bien comprendre...

Pour moi, votre ligne de code est incompréhensible...

ListBox1.List(-1, 1) = (Cells(arTemp(x), ColPrénom))


C'est ce que j'ai cru comprendre mais ça ne fonctionne pas alors je sais plus quoi faire à part attendre une explication nette et précise.
Messages postés
28940
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 juillet 2020
2 609
As tu regardé l'exemple que je t'ai donné dans le lien ?

Il faut :
1 - Faire un .AddItem pour ajouter une ligne dans la listbox
2 - Faire un .List pour ajouter des infos dans cette ligne

' Première colonne
Me.ListBox1.AddItem "MonNom"

'Deuxième colonne
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = "MonPrénom"

'Troisième colonne
Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = "Autre chose" 


A noter que tu dois absolument perdre l'habitude d'utiliser des caractères accentués dans le nom de tes variables...
Messages postés
20
Date d'inscription
mercredi 22 janvier 2020
Statut
Membre
Dernière intervention
9 mars 2020

Merci, j'ai compris cette fois. Et oui d'habitude je n'utilise pas les accents dans mes variables.

Merci beaucoup pour vos réponses, je pense que mon problème est maintenant réglé ! J'ai plus qu'à coder le click sur un des résultats etc...

A+ !