Recherche sur Base de Donnée Excel
Résolu
Mrfrize
Messages postés
188
Date d'inscription
Statut
Membre
Dernière intervention
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Tout d'abord je sais que Excel n'est pas fait pour gérer des bases de données et que ce serai mieux de le faire sous Acces mais vu que le systeme que je vais essayer mettre en place ne m'est pas destiné je pense qu'il est est plus facile pour quelqu'un de comprendre une macro Excel bien commenté qu'une base Acces.
Donc voila mon probleme, j'ai une liste de pompe avec certaines caractéristiques. J'ai crée des userforms pour sélectionner les caractéristiques que je souhaite mais je ne sais pas comment utiliser ces informations pour faire une recherche dans la base pour voir quelle pompe correspond a la recherche. (il n'y a que une et une seule pompe dans qui correspond a une recherche.)
J'avais pensé utilisé les fitres personalisé pour y arriver et selectionner a la fin la seul ligne qui reste mais je pense qu'il y a surement beaucoup mieux comme solution.
Merci d'avance de vos conseils.
Tout d'abord je sais que Excel n'est pas fait pour gérer des bases de données et que ce serai mieux de le faire sous Acces mais vu que le systeme que je vais essayer mettre en place ne m'est pas destiné je pense qu'il est est plus facile pour quelqu'un de comprendre une macro Excel bien commenté qu'une base Acces.
Donc voila mon probleme, j'ai une liste de pompe avec certaines caractéristiques. J'ai crée des userforms pour sélectionner les caractéristiques que je souhaite mais je ne sais pas comment utiliser ces informations pour faire une recherche dans la base pour voir quelle pompe correspond a la recherche. (il n'y a que une et une seule pompe dans qui correspond a une recherche.)
J'avais pensé utilisé les fitres personalisé pour y arriver et selectionner a la fin la seul ligne qui reste mais je pense qu'il y a surement beaucoup mieux comme solution.
Merci d'avance de vos conseils.
A voir également:
- Recherche sur Base de Donnée Excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Formules excel de base - Guide
- Comment trier par ordre alphabétique sur excel - Guide
3 réponses
Bonjour,
Pour rechercher un "mot" dans une feuille excel, tu peux utiliser la méthode Find sous VBA.
Voici un exemple qui va chercher, dans la feuille "Feuil1", dans la colonne B (Columns(2)), le contenu de la ComboBox13 :
Pour rechercher un "mot" dans une feuille excel, tu peux utiliser la méthode Find sous VBA.
Voici un exemple qui va chercher, dans la feuille "Feuil1", dans la colonne B (Columns(2)), le contenu de la ComboBox13 :
Dim Trouve As Range Dim Valeur_trouvee As String Dim Lign As Long If ComboBox13 = "" Then Exit Sub With Sheets("Feuil1") Set Trouve = .Columns(2).Cells.Find(ComboBox13) If Trouve Is Nothing Then MsgBox ComboBox13 & " pas trouvée!" Else Valeur_trouvee = Trouve.Address Lign = Trouve.Row MsgBox ComboBox13 & " trouvée dans la cellule : " & Valeur_trouvee & " ligne : " & Lign End If End With Set Trouve = Nothing
Il serait plus aisé pour moi de t'orienter si tu me disais :
- le nom de la feuille dans laquelle chercher les données,
- le numéro de la colonne ou chercher et qu'elle colonne voisine (ou pas) vérifie la seconde condition,
- ou sont contenues, dans ton userform, les infos à chercher? TextBox? ComboBox? autre... Me donner leurs noms...
ps : je me rends compte que la macro ci dessus ne fonctionne pas dans ton cas. Je la reprendrais dès que tu m'auras donné les infos nécessaires à son adaptation.
- le nom de la feuille dans laquelle chercher les données,
- le numéro de la colonne ou chercher et qu'elle colonne voisine (ou pas) vérifie la seconde condition,
- ou sont contenues, dans ton userform, les infos à chercher? TextBox? ComboBox? autre... Me donner leurs noms...
ps : je me rends compte que la macro ci dessus ne fonctionne pas dans ton cas. Je la reprendrais dès que tu m'auras donné les infos nécessaires à son adaptation.
Je vais essayer de faire un exemple simple:
Feuille 1
Collone A Collone B Collone C
A C E
A C F
A D E
A D F
B C E
B C F
B D E
B D F
Et je recherche par exemple le numéro de la ligne qui contient : A D F
Je me chargerai de faire les adaptations a mon besoin spécifique, comme ca je vérifirai que j'ai bien compris comment marche la macro.
Ps: Mais userform me serviront qu'a atribuer des valeur a mes criteres de recherche ("valeur 1", "valeur 2",...)
Feuille 1
Collone A Collone B Collone C
A C E
A C F
A D E
A D F
B C E
B C F
B D E
B D F
Et je recherche par exemple le numéro de la ligne qui contient : A D F
Je me chargerai de faire les adaptations a mon besoin spécifique, comme ca je vérifirai que j'ai bien compris comment marche la macro.
Ps: Mais userform me serviront qu'a atribuer des valeur a mes criteres de recherche ("valeur 1", "valeur 2",...)
les criteres sont a chercher dans les colonnes A B C D E G.
Nom de la feuille :TOTO
Dans les user form il n'y a que des OptionButton.
qui définiron les valeurs de valeur1, valeur 2....valeur6
Il y a l'userform1 avec OptionButton1,OptionButton2,OptionButton3
userform2 avec OptionButton3,OptionButton4,OptionButton5
ect..
Nom de la feuille :TOTO
Dans les user form il n'y a que des OptionButton.
qui définiron les valeurs de valeur1, valeur 2....valeur6
Il y a l'userform1 avec OptionButton1,OptionButton2,OptionButton3
userform2 avec OptionButton3,OptionButton4,OptionButton5
ect..
Bonjour,
Comme promis, une solution. J'ai perso utilisé des combobox, mais le code doit être identique avec des optionbutton. J'avais juste pas envie de me casser la nénette...
Le code est assez "complexe", donc je l'ai largement commenté. En cas de souci, ne pas hésiter à poser vos questions.
Tu peux aléatoirement choisir de 3 à 6 critères de recherches, si inférieur à 3 = blocage.
Le code du bouton de l'Userform :
Tu trouveras ci joint mon classeur exemple. Mon userform est basé sur des combobox, comme le code ci-dessus, mais tu pourras, je penses l'adapter avec tes optionbutton.
En cas de difficulté d'adaptation, il me faudra le classeur contenant l'userform, sans données confidentielles...
Comme promis, une solution. J'ai perso utilisé des combobox, mais le code doit être identique avec des optionbutton. J'avais juste pas envie de me casser la nénette...
Le code est assez "complexe", donc je l'ai largement commenté. En cas de souci, ne pas hésiter à poser vos questions.
Tu peux aléatoirement choisir de 3 à 6 critères de recherches, si inférieur à 3 = blocage.
Le code du bouton de l'Userform :
Private Sub CommandButton1_Click() 'au clic sur le bouton, recherche : 'dans la colonne B du contenu de la liste 1 'test si contenu de C = liste2 Dim TablDonnees(), Valeur(5), i As Long, j As Long, drlig As Long, Cpt As Byte 'comptage du nombre de critères renseignés : For i = 1 To 6 If Me.Controls("ComboBox" & i).Value <> "" Then Cpt = Cpt + 1 End If Next 'Si le nombre de critères renseignés est inférieur à 3, 'message à l'utilisateur et ... on ne fait rien! If Cpt < 3 Then MsgBox "Merci de renseigner plus de " & Cpt & " critères" Exit Sub End If 'Valeur(5) est une variable tableau qui permet de stocker 6 noms, '(6 car on commence à l'indice 0, Valeur(0), et on finit à 5, Valeur(5), soit 6 éléments) 'le contenu donc de nos 6 combobox 'la boucle qui suit est en fait équivalente à : 'Valeur(0) = ComboBox1 'Valeur(1) = ComboBox2 'Valeur(2) = ComboBox3 'Valeur(3) = ComboBox4 'Valeur(4) = ComboBox5 'Valeur(5) = ComboBox6 '--- Remplissage de la variable Valeur(i) : For i = 0 To 5 Valeur(i) = Me.Controls("ComboBox" & i + 1).Value Next With Sheets("Feuil1") drlig = .Range("A" & Rows.Count).End(xlUp).Row ReDim TablDonnees(1 To 6, 1 To drlig - 1) '--- Remplissage de la variable TablDonnees() : For i = 2 To drlig '1ère ligne du tableau = colonne A de la feuille TablDonnees(1, i - 1) = .Cells(i, 1).Value '2ème ligne du tableau = colonne B de la feuille TablDonnees(2, i - 1) = .Cells(i, 2).Value '3ème ligne du tableau = colonne C de la feuille TablDonnees(3, i - 1) = .Cells(i, 3).Value '4ème ligne du tableau = colonne D de la feuille TablDonnees(4, i - 1) = .Cells(i, 4).Value '5ème ligne du tableau = colonne E de la feuille TablDonnees(5, i - 1) = .Cells(i, 5).Value '6ème ligne du tableau = colonne G de la feuille TablDonnees(6, i - 1) = .Cells(i, 7).Value Next 'explications : 'TablDonnees = Application.Transpose(.Range("A2:G" & drlig).Value) 'va remplir une variable tableau multidimensionnelle, de sorte que : 'TablDonnees(1, 1) = Range("A2"), TablDonnees(2, 1) = Range("B2"), 'TablDonnees(3, 1) = Range("C2"), TablDonnees(4, 2) = Range("D3") 'TablDonnees(6, i) = Range("G" & i) ou i = variable n° de ligne End With 'Si un ou plusieurs critères ne sont pas souhaités, et donc pas choisis dans les combobox 'la comparaison entre la concaténation des Valeur et celle des TablDonnees 'renverra toujours FAUX, il faut donc, Si valeur = rien que le tabldonnees de la colonne 'correspondante soient tous = à rien : For i = 0 To 5 If Valeur(i) = "" Then For j = 1 To drlig - 1 TablDonnees(i + 1, j) = "" Next End If Next 'il convient de comparer maintenant, la concaténation de nos variables Valeur 'et la concaténation des "colonnes" de notre variable tableau 'si les concaténations sont identiques, nous avons trouvé la bonne ligne 'cette ligne est en fait l'indice i de notre variable tableau, + 1 car on commence en 2ème ligne (A2...) For i = 1 To drlig - 1 If TablDonnees(1, i) & TablDonnees(2, i) & TablDonnees(3, i) & TablDonnees(4, i) & TablDonnees(5, i) & TablDonnees(6, i) = Join(Valeur, "") Then MsgBox "trouvé ligne : " & i + 1 Exit Sub End If Next MsgBox "pas trouvé" End Sub
Tu trouveras ci joint mon classeur exemple. Mon userform est basé sur des combobox, comme le code ci-dessus, mais tu pourras, je penses l'adapter avec tes optionbutton.
En cas de difficulté d'adaptation, il me faudra le classeur contenant l'userform, sans données confidentielles...
J'ai plusieur criteres dans plusieur colone, et je voudrai faire une recherche sur l'ensemble des criteres.
Colonne A Colonne B ....
Ligne 1 A C
Ligne 2 A D
Ligne 3 B C
Ligne 4 B D
.....
Dans cette exemple je voudrai trouver la ligne qui contient et A et C.
Merci
Désoler d'insiter mais je ne comprends pas comment fonctionne ta macro.