RechercheV données multiples VBA

Résolu/Fermé
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012 - 20 déc. 2011 à 12:38
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012 - 6 janv. 2012 à 13:35
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.

13 réponses

lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
20 déc. 2011 à 12:54
Bonjour,
Manque juste le "classeur fournit en annexe" :-)
Tu peu le poster sur Cjoint.fr et mettre le lien dans un poste suivant.
A+
0
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012
20 déc. 2011 à 12:59
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
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 20/12/2011 à 13:15
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.
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
20 déc. 2011 à 13:51
Un premier jet..
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.
0

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

Posez votre question
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012
20 déc. 2011 à 14:37
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?
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 20/12/2011 à 14:54
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.
0
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012
20 déc. 2011 à 15:04
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?
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
20 déc. 2011 à 18:42
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.
0
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012
21 déc. 2011 à 09:47
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
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
21 déc. 2011 à 10:39
Ça y est, j'ai compris, reste juste une dernière mise au point.
Certain filtre donne moins de 5 résultats, c'est juste ?
Le maximum de résultats est 5. C'est exact ?
Ça ne commence pas toujours par PAI, ça peut être dans le désordre (ou non)
A part ça, pas de problème pour coder une tite fonction.
0
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012
21 déc. 2011 à 10:44
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
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
21 déc. 2011 à 11:19
Les mettre dans l'ordre complique très fort le code (mais possible)
les couleurs.. pas de problème
Sur un classeur xls pas moyen d'avoir les couleurs d'Excel 2007, j'adapte en conséquence.
Si j'ai fini avant midi je te poste le code sinon ce sera pour après 17hr
0
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012
21 déc. 2011 à 11:23
Ok, merci lermite222.

@+
Pookie
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
21 déc. 2011 à 12:01
dans le module de la feuille exemple tu colle le code..
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+
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
21 déc. 2011 à 13:03
Finalement... avec tri des résultats..
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+
0
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012
21 déc. 2011 à 13:23
Heu désolé lermite222, mais j'arrive plus trop à te suivre... lol
Tu peux m'expliquer le code stp???

Merci,
Pookie
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 752
21 déc. 2011 à 13:36
Bonjour,
Salut Lermitte222,
Petit rappel @ GautPookie : les doublons sont interdits par la charte de ce site.
Merci d'en tenir compte à l'avenir...
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 21/12/2011 à 13:48
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
 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.
0
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012
21 déc. 2011 à 13:57
pijaku : oui, je m'en doute mais comme le premier qui m'avait répondu sur l'autre, m'a dit que c'était pas un "macro"titien. Donc j'ai mis mon problème en programmation...
Désolé, je referai pas.
0
GautPookie Messages postés 29 Date d'inscription mardi 20 décembre 2011 Statut Membre Dernière intervention 16 août 2012
21 déc. 2011 à 14:06
lermite222 : bon soit je suis très c** (ce qui est possible), soit ça ne fonctionne pas...
:'(
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 21/12/2011 à 16:18
Bonjour Pijaku,
Effectivement c'est un fameux doublon, Les mêmes questions posées, les réponses copiées/collées et le suivi des 2 en temps réel.
Merci de l'avoir signaler.
De mon côté, abandon du suivi. Peut-être un peu tard.
A+
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 21/12/2011 à 16:07
** 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.
0
Phoenellion Messages postés 116 Date d'inscription dimanche 14 septembre 2008 Statut Membre Dernière intervention 30 août 2012 33
Modifié par Phoenellion le 21/12/2011 à 11:53
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 ?
-2
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 21/12/2011 à 12:04
Salut, T'arrive comme Dartaban toi, quand la bataille est finie et qu'il n'y a plus qu'à ramasser les trophées.
Et il me semblais que tu ne téléchargeais JAMAIS SUR UN FORUM
0
Phoenellion Messages postés 116 Date d'inscription dimanche 14 septembre 2008 Statut Membre Dernière intervention 30 août 2012 33
21 déc. 2011 à 12:31
Salut,

j'essaie juste de comprendre en vue d'éventuellement donner un coup de main.

Je ne vois aucun trophée à récolter ici. Surtout que ce n'était pas compliqué à comprendre du premier coup...

Je n'ai pas souvenir de t'avoir offensé pour que tu m'apostrophe ainsi en publique...
0