Recherche de plusieurs valeurs dans un UserForm
Résolu
pixissama
Messages postés
20
Date d'inscription
Statut
Membre
Dernière intervention
-
pixissama Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
pixissama Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
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 !
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:
- Recherche de plusieurs valeurs dans un UserForm
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Recherche photo - Guide
- Je recherche une chanson - Guide
- Excel liste de valeurs - Guide
- Fréquence tnt recherche manuelle - Forum TNT / Satellite / Réception
8 réponses
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/
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/
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é.
Ce serait très gentil de m'aider à faire un code qui fonctionne !
Merci !
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 !
Bonjour,
Si tu pouvais mettre ton classeur en pièce jointe
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...)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu as oublié de mettre la fonction findAll dans un module
- 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
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())
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...
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))
Tu n'as pas lu le lien que je t'ai donné concernant les controls dans les userform visiblement.
Il faut utiliser la fonction
Voici un exemple
https://forums.commentcamarche.net/forum/affich-6375137-vba-remplir-une-listbox#6
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
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...
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.
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.
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
A noter que tu dois absolument perdre l'habitude d'utiliser des caractères accentués dans le nom de tes variables...
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...