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
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
A voir également:
- Recherche de plusieurs valeurs dans un UserForm
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Recherche adresse - Guide
- Recherche musique - Guide
- Recherche par image - Guide
- Recherche privée - Guide
8 réponses
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
1 mars 2020 à 00:39
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/
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/
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
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é.
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 !
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
1 mars 2020 à 17:30
1 mars 2020 à 17:30
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...)
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
1 mars 2020 à 17:44
voila mon fichier (c'est un fichier de test)
https://mon-partage.fr/f/w2CJDThI/
https://mon-partage.fr/f/w2CJDThI/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
1 mars 2020 à 18:21
1 mars 2020 à 18:21
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())
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
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...
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))
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
1 mars 2020 à 18:46
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
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
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
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...
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.
jordane45
Messages postés
38314
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2024
4 705
1 mars 2020 à 19:18
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
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...
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
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+ !
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+ !