RechercheV données multiples VBA
Résolu
GautPookie
Messages postés
29
Date d'inscription
Statut
Membre
Dernière intervention
-
GautPookie Messages postés 29 Date d'inscription Statut Membre Dernière intervention -
GautPookie Messages postés 29 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je souhaiterais qu'on m'aide sur un problème que je rencontre pour une création de fichier.
J'aimerais que lorsque la cellule C4 de la feuille "Exemple (2)" soit remplie par un code produit, la macro aille rechercher cette valeur dans la table de la feuille "Table_recette" pour me l'inscrire dans le tableau de la feuille "Exemple (2)".
Jusqu'ici, pas de problème, SAUF que, comme vous pourrez le constater sur mon classeur fourni en annexe, pour un même n° il y a plusieurs articles avec des quantités différentes et il y a 5500 lignes à analyser.
De plus, je n'arrive pas à colorier les cellules comme dans l'exemple en fonction de l'article (ex: PAI = marron, PDM = bleu, VIA = rouge...)
Quelqu'un à une idée pour réaliser cette macro?
Rq : Seul les articles commencant par PAI, VIA, PDM, SAU, PRE, BOF et LEG m'intéressent.
Je souhaiterais qu'on m'aide sur un problème que je rencontre pour une création de fichier.
J'aimerais que lorsque la cellule C4 de la feuille "Exemple (2)" soit remplie par un code produit, la macro aille rechercher cette valeur dans la table de la feuille "Table_recette" pour me l'inscrire dans le tableau de la feuille "Exemple (2)".
Jusqu'ici, pas de problème, SAUF que, comme vous pourrez le constater sur mon classeur fourni en annexe, pour un même n° il y a plusieurs articles avec des quantités différentes et il y a 5500 lignes à analyser.
De plus, je n'arrive pas à colorier les cellules comme dans l'exemple en fonction de l'article (ex: PAI = marron, PDM = bleu, VIA = rouge...)
Quelqu'un à une idée pour réaliser cette macro?
Rq : Seul les articles commencant par PAI, VIA, PDM, SAU, PRE, BOF et LEG m'intéressent.
A voir également:
- RechercheV données multiples VBA
- Fuite données maif - Guide
- Supprimer les données de navigation - Guide
- Trier des données excel - Guide
- Sauvegarde des données - Guide
- Barre de données excel pourcentage 100 ✓ - Forum Excel
13 réponses
Bonjour,
Manque juste le "classeur fournit en annexe" :-)
Tu peu le poster sur Cjoint.fr et mettre le lien dans un poste suivant.
A+
Manque juste le "classeur fournit en annexe" :-)
Tu peu le poster sur Cjoint.fr et mettre le lien dans un poste suivant.
A+
Re, Oups, effectivement.
Je suis décidemment pas très doué avec l'informatique... lol
Voici le lien : https://www.cjoint.com/?0Lum5HjVIKP
Dis moi si ça fonctionne bien.
Merci lermite222
Je suis décidemment pas très doué avec l'informatique... lol
Voici le lien : https://www.cjoint.com/?0Lum5HjVIKP
Dis moi si ça fonctionne bien.
Merci lermite222
Oui, j'ai ton classeur.
Dans le feuille2 tu veux avoir..
Toutes les lignes qui corresponde au code taper ?
Quel sont les cellules qu'il faut copier ? uniquement colonne B ou de A à H
Le code est entrer en entier ? BOF00500 ou seulement BOF ?
Et pour les couleurs je ne comprend pas.
Tu dis.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Dans le feuille2 tu veux avoir..
Toutes les lignes qui corresponde au code taper ?
Quel sont les cellules qu'il faut copier ? uniquement colonne B ou de A à H
Le code est entrer en entier ? BOF00500 ou seulement BOF ?
Et pour les couleurs je ne comprend pas.
Tu dis.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Un premier jet..
Dans le module de la feuille Exemple coller le code suivant.
Taper un code (complet genre BOF00500) dans la case B4 de la feuille Exemple et taper Enter
Tu dis.
Dans le module de la feuille Exemple coller le code suivant.
Private Sub Worksheet_Change(ByVal Target As Range) Dim Lig As Long, B As Boolean Dim LigC As Long If Target.Count > 1 Then Exit Sub If Target.Address = "$B$4" Then Application.EnableEvents = False Range("C4:H" & [C4].End(xlDown).Row).Clear LigC = 4 With Sheets("Table_recette") For Lig = 2 To .[A10000].End(xlUp).Row If .Cells(Lig, 1) = Target Then B = True .Range(.Cells(Lig, 1), .Cells(Lig, 8)).Copy Cells(LigC, 3) LigC = LigC + 1 ElseIf B = True Then Exit For End If Next Lig End With End If Application.EnableEvents = True End Sub
Taper un code (complet genre BOF00500) dans la case B4 de la feuille Exemple et taper Enter
Tu dis.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ce qu'il me faut c'est que dans la cellule D50 de la feuille "Exemple (2)", si mon produit contient du PAI, il affiche le PAI*****, puis dans la case suivante, si mon produit contient du PDM, il affiche le PDM*****, puis dans la case suivante,... mais si il n'a pas de produit LEG, il continue.
.. etc
Puis il renseigne la quantité de la matière en D55 (attention, une même matière peut avoir des quantité différentes...)
Dans la feuille table_recette, seules les colonnes A, B et H m'intéressent.
Ensuite, pour les couleurs, si la case D50 est PAI, il prend la couleur marron ainsi que la cellule d'en dessous; si c'est PDM, il devient bleu...
C'est plus clair?
.. etc
Puis il renseigne la quantité de la matière en D55 (attention, une même matière peut avoir des quantité différentes...)
Dans la feuille table_recette, seules les colonnes A, B et H m'intéressent.
Ensuite, pour les couleurs, si la case D50 est PAI, il prend la couleur marron ainsi que la cellule d'en dessous; si c'est PDM, il devient bleu...
C'est plus clair?
C'est plus clair?
Beh non, je comprend plus rien.
Et mettre les données à chercher plus haut aurait été plus simple.
Pourquoi "cacher" ces cellules si bas ?
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Beh non, je comprend plus rien.
Et mettre les données à chercher plus haut aurait été plus simple.
Pourquoi "cacher" ces cellules si bas ?
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Lol,
Je recommence:
- dans la feuille "Exemple (2)",en C4, j'écris un code produit (ex: 1151 ou 1597 ou...)
- quand C4 est remplie, alors la macro va chercher le code produit dans la table de la feuille "Table_recette"
- puis elle écrit chaque article qu'elle trouve dans une cellule de la feuille "Exemple (2)" dans D50:H50
- ensuite, si D50 est rempli, elle lit le début du mot (ex: PAI*****) et affecte une couleur de remplissage à cette cellule ainsi qu'à celle du dessous (qui est vide).
- enfin, elle va chercher la valeur (quantité) de l'article (ex: PAI05100=0.012) et la copie dans la cellule D55 de la feuille "Exemple (2)"
C'est mieux?
Je recommence:
- dans la feuille "Exemple (2)",en C4, j'écris un code produit (ex: 1151 ou 1597 ou...)
- quand C4 est remplie, alors la macro va chercher le code produit dans la table de la feuille "Table_recette"
- puis elle écrit chaque article qu'elle trouve dans une cellule de la feuille "Exemple (2)" dans D50:H50
- ensuite, si D50 est rempli, elle lit le début du mot (ex: PAI*****) et affecte une couleur de remplissage à cette cellule ainsi qu'à celle du dessous (qui est vide).
- enfin, elle va chercher la valeur (quantité) de l'article (ex: PAI05100=0.012) et la copie dans la cellule D55 de la feuille "Exemple (2)"
C'est mieux?
Non,
Donne un exemple concret.. et pas des.. par exemple
En C4 mettre le code xxxx (QUI EXISTE VRAIMENT DANS TA LISTE)
En D50 il faut trouver xxxx le résultat réel, idem pour les autres cellule de la ligne 50 de exemple2
le code que tu met en C4, se retrouve dans la colonne A ou la colonne B.
Tout est mélanger dans ta table, des produits à la place des quantités, des PAIxx.. dans différentes colonnes, etc.. et je parviens pas à m'y retrouver.
Donne un exemple concret.. et pas des.. par exemple
En C4 mettre le code xxxx (QUI EXISTE VRAIMENT DANS TA LISTE)
En D50 il faut trouver xxxx le résultat réel, idem pour les autres cellule de la ligne 50 de exemple2
le code que tu met en C4, se retrouve dans la colonne A ou la colonne B.
Tout est mélanger dans ta table, des produits à la place des quantités, des PAIxx.. dans différentes colonnes, etc.. et je parviens pas à m'y retrouver.
En faite, c'est exactement l'exemple que je te joint en annexe...
https://www.cjoint.com/?0LvjOJIp1CD
Rq: la recherche doit commencer au BOF***** pas avant les 7 premières lignes.
le code en C4 est celui de la colonne B (Code_A)
je sais qu'il y a des PRE**** dans la colonne B mais il ne faut pas que la macro en tienne compte.
Je sais que c'est un peu compliqué, c'est pour ça que j'ai besoin d'aide ;-)
Merci de ta patience lermite222
https://www.cjoint.com/?0LvjOJIp1CD
Rq: la recherche doit commencer au BOF***** pas avant les 7 premières lignes.
le code en C4 est celui de la colonne B (Code_A)
je sais qu'il y a des PRE**** dans la colonne B mais il ne faut pas que la macro en tienne compte.
Je sais que c'est un peu compliqué, c'est pour ça que j'ai besoin d'aide ;-)
Merci de ta patience lermite222
Par contre, est ce que c'est possible d'avoir que les PAI, SAU, VIA, PDM, BOF, PRE et LEG (et pas les FIL, E, CART...) et dans cet ordre?
De plus est ce que c'est également possible d'avoir une couleur précise pour chaque ingrédient?
- PAI = marron
- SAU = jaune clair
- PDM = bleu turquoise
- BOF = orange "or"
- PRE = violet clair
- LEG = vert citron
- VIA = rose
Par contre, le maximum, n'est pas 5 mais 8, mais bon, c'est de la mise en page ça après...
Merci
De plus est ce que c'est également possible d'avoir une couleur précise pour chaque ingrédient?
- PAI = marron
- SAU = jaune clair
- PDM = bleu turquoise
- BOF = orange "or"
- PRE = violet clair
- LEG = vert citron
- VIA = rose
Par contre, le maximum, n'est pas 5 mais 8, mais bon, c'est de la mise en page ça après...
Merci
dans le module de la feuille exemple tu colle le code..
Et dans un module général tu copie..
Juste l'ordre n'est pas respecté.
Si absolument nécessaire tu dis, j'envisagerais de modifier.
A+
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$4" Then Application.EnableEvents = False Cherche Target.Value Application.EnableEvents = True End If End Sub
Et dans un module général tu copie..
Sub Cherche(Filtre As String) Dim Lig As Long, Col As Integer, Coul As Integer Dim Wks As Worksheet Set Wks = Sheets("Exemple (2)") 'Vider le tableau Wks.[D50:K52].Interior.ColorIndex = xlNone Wks.[D50:K50].ClearContents Wks.[D55:K56].ClearContents Col = 4 With Sheets("Table_recette") For Lig = 9 To .[B65536].End(xlUp).Row If .Cells(Lig, "B") = Filtre Then Wks.Cells(50, Col) = .Cells(Lig, "A") Wks.Cells(55, Col) = .Cells(Lig, "D") Select Case Left(Wks.Cells(50, Col), 3) Case "PAI": Coul = 53 'marron Case "SAU": Coul = 36 'jaune clair Case "PDM": Coul = 5 'bleu Case "BOF": Coul = 45 'orange Case "PRE": Coul = 39 'violet Case "LEG": Coul = 43 'vert Case "VIA": Coul = 40 'rose End Select Wks.Range(Cells(50, Col), Cells(52, Col)).Interior.ColorIndex = Coul Col = Col + 1 End If Next Lig End With End Sub
Juste l'ordre n'est pas respecté.
Si absolument nécessaire tu dis, j'envisagerais de modifier.
A+
Finalement... avec tri des résultats..
A+
Sub Cherche(Filtre As String) Dim Lig As Long, Col As Integer, Coul As Integer Dim Wks As Worksheet Dim P, C Dim S As Integer P = Array("PAI", "SAU", "PDM", "BOF", "PRE", "LEG", "VIA") C = Array(53, 36, 5, 45, 39, 43, 40) Set Wks = Sheets("Exemple (2)") 'Vider le tableau Wks.[D50:K52].Interior.ColorIndex = xlNone Wks.[D50:K50].ClearContents Wks.[D55:K56].ClearContents Col = 4 With Sheets("Table_recette") For S = 0 To 6 For Lig = 9 To .[B65536].End(xlUp).Row ' If .Cells(Lig, "B") = Filtre Then Stop If .Cells(Lig, "B") = Filtre And Left(.Cells(Lig, "A"), 3) = P(S) Then Wks.Cells(50, Col) = .Cells(Lig, "A") Wks.Cells(55, Col) = .Cells(Lig, "D") Wks.Range(Cells(50, Col), Cells(52, Col)).Interior.ColorIndex = C(S) Col = Col + 1 End If Next Lig Next S End With End Sub
A+
Heu désolé lermite222, mais j'arrive plus trop à te suivre... lol
Tu peux m'expliquer le code stp???
Merci,
Pookie
Tu peux m'expliquer le code stp???
Merci,
Pookie
Bonjour,
Salut Lermitte222,
Petit rappel @ GautPookie : les doublons sont interdits par la charte de ce site.
Merci d'en tenir compte à l'avenir...
Salut Lermitte222,
Petit rappel @ GautPookie : les doublons sont interdits par la charte de ce site.
Merci d'en tenir compte à l'avenir...
C'est le même que le précédant sauf que l'ont passe 6 fois en revue les données en commençant par PAI..SAU.. etc. Ainsi les données sont dans l'ordre que tu souhaitait.
Dans un premier temps, colle le code ci-dessus et fais un essais.
Ensuite pour comprendre tu peu faire un pas à pas en mettant des point d'arrêt sur le code
Clic sur la marge gauche en regard de cette ligne, elle va se colorer en brun.
Lance la macro en mettant un filtre dans la cellule B4. et tape ENTER
ATTENTION, Taper 2 fois le même code ne change rien.
Bien entendu, tu a copier la première sub dans le module de la feuille ?
Sinon, à gauche de l'éditeur de macro tu a la fenêtre des projets, (si pas visible Ctrl+R)
Dans cette fenêtre tu à le nom de tes feuilles, double clic sur la feuille exemple et c'est sur cette fenêtre que tu doit copier
Cette sub réagit à la modification d'une cellule.
C'est mon tour de dire.. C'est plus clair ? :-)
Edit: tu peu supprimer la ligne,
Elle m'a servit pour la mise au point.
Dans un premier temps, colle le code ci-dessus et fais un essais.
Ensuite pour comprendre tu peu faire un pas à pas en mettant des point d'arrêt sur le code
Wks.Cells(50, Col) = .Cells(Lig, "A")
Clic sur la marge gauche en regard de cette ligne, elle va se colorer en brun.
Lance la macro en mettant un filtre dans la cellule B4. et tape ENTER
ATTENTION, Taper 2 fois le même code ne change rien.
Bien entendu, tu a copier la première sub dans le module de la feuille ?
Sinon, à gauche de l'éditeur de macro tu a la fenêtre des projets, (si pas visible Ctrl+R)
Dans cette fenêtre tu à le nom de tes feuilles, double clic sur la feuille exemple et c'est sur cette fenêtre que tu doit copier
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$4" Then Application.EnableEvents = False Cherche Target.Value Application.EnableEvents = True End If End Sub
Cette sub réagit à la modification d'une cellule.
C'est mon tour de dire.. C'est plus clair ? :-)
Edit: tu peu supprimer la ligne,
' If .Cells(Lig, "B") = Filtre Then Stop
Elle m'a servit pour la mise au point.
** Mais non, mais non. :-)
Y fonctionne, mais oui, mais oui!
Ton classeur en retour
Tu dis.
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Y fonctionne, mais oui, mais oui!
Ton classeur en retour
Tu dis.
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Bonjour GautCookie,
si j'ai bien compris, tu veux :
- taper ton numéro de recette en Exemple2.C4
- dans la bonne colonne, ligne 50, le PAI, le PDM, le SAU, et les 2 LEG qui il te faut pour la préparer. (quand ils existent pour cette recette)
- les quantités correspondante dans la même colonne mais ligne 55.
Et accessoirement, que PAI, PDM, SAU et LEG soit toujours présentés dans le même ordre de droite à gauche et colorés dans Exemple2 ?
si j'ai bien compris, tu veux :
- taper ton numéro de recette en Exemple2.C4
- dans la bonne colonne, ligne 50, le PAI, le PDM, le SAU, et les 2 LEG qui il te faut pour la préparer. (quand ils existent pour cette recette)
- les quantités correspondante dans la même colonne mais ligne 55.
Et accessoirement, que PAI, PDM, SAU et LEG soit toujours présentés dans le même ordre de droite à gauche et colorés dans Exemple2 ?