Recherche de plusieurs valeurs dans un UserForm

Résolu/Fermé
pixissama Messages postés 20 Date d'inscription mercredi 22 janvier 2020 Statut Membre Dernière intervention 9 mars 2020 - 1 mars 2020 à 00:33
pixissama Messages postés 20 Date d'inscription mercredi 22 janvier 2020 Statut Membre Dernière intervention 9 mars 2020 - 1 mars 2020 à 19:46
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 !
A voir également:

8 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
1 mars 2020 à 00:39
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://forums.commentcamarche.net/forum/affich-37621992-methode-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/



0
pixissama Messages postés 20 Date d'inscription mercredi 22 janvier 2020 Statut Membre Dernière intervention 9 mars 2020
1 mars 2020 à 16:54
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 !
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
1 mars 2020 à 17:30
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...)

0
pixissama Messages postés 20 Date d'inscription mercredi 22 janvier 2020 Statut Membre Dernière intervention 9 mars 2020
1 mars 2020 à 17:44
voila mon fichier (c'est un fichier de test)
https://mon-partage.fr/f/w2CJDThI/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
1 mars 2020 à 18:21
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())



0
pixissama Messages postés 20 Date d'inscription mercredi 22 janvier 2020 Statut Membre Dernière intervention 9 mars 2020
1 mars 2020 à 18:34
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))
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
1 mars 2020 à 18:46
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
0
pixissama Messages postés 20 Date d'inscription mercredi 22 janvier 2020 Statut Membre Dernière intervention 9 mars 2020
1 mars 2020 à 19:04
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.
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
1 mars 2020 à 19:18
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...
0
pixissama Messages postés 20 Date d'inscription mercredi 22 janvier 2020 Statut Membre Dernière intervention 9 mars 2020
1 mars 2020 à 19:46
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+ !
0