RechercheV données multiples VBA [Résolu/Fermé]

Signaler
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012
-
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012
-
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

Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
Bonjour,
Manque juste le "classeur fournit en annexe" :-)
Tu peu le poster sur Cjoint.fr et mettre le lien dans un poste suivant.
A+
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012

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
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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.
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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.
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012

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?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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.
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012

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?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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.
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012

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
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
Ç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.
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012

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
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012

Ok, merci lermite222.

@+
Pookie
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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+
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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+
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012

Heu désolé lermite222, mais j'arrive plus trop à te suivre... lol
Tu peux m'expliquer le code stp???

Merci,
Pookie
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012

lermite222 : bon soit je suis très c** (ce qui est possible), soit ça ne fonctionne pas...
:'(
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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+
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012

le prend pas comme ça lermite222, je me suis abonné pour la première fois, je pouvais pas savoir comment ça fonctionné un forum! :'(
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
Oui, je n'avais pas regardé ton profil, tu est pardonné pour cette fois.. :-))
Le classeur te convient ? note que la donnée doit s'écrire en B4 (je me suis trompé de case.)
A+
Messages postés
29
Date d'inscription
mardi 20 décembre 2011
Statut
Membre
Dernière intervention
16 août 2012

Oui, c'est parfait merci beaucoup!!!
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
** 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.
Messages postés
116
Date d'inscription
dimanche 14 septembre 2008
Statut
Membre
Dernière intervention
30 août 2012
27
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 ?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 099
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
Messages postés
116
Date d'inscription
dimanche 14 septembre 2008
Statut
Membre
Dernière intervention
30 août 2012
27
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...