combobox - rech. cellule couleurs - copier/insérer contenu

Elo75

XLDnaute Nouveau
Bonjour à tous,
Je suis novice et m'étais joint à la discussion "Chercher le contenu d'une cellule dans une colonne et renvoyer la cellule trouvé " mais je n'y arrive pas malgré une réponse de Robert.
J'ai une feuille1 avec plusieurs colonnes (dans l'exemple: Colonne 2àn - Mes produits) et plusieurs lignes (dans l'exemple: Ligne 3 à 27 - Les types).
Dans chaque "colonne produit", j'ai une plage délimitée (Ligne 3à27) de cellules de couleurs (Rouge, Vert clair, Vert foncé, Blanc) qui contiennent du texte.

Dans une feuille2, j'ai une colonne qui me permet de choisir une produit (ici: BISCUIT) que je choisis dans un menu déroulant...

:) Mon rêve...ce serait qu'à partir de mon choix produit feuille2 (ex. Biscuits) fait dans le menu déroulant, la Macro aille me chercher dans la feuille 1, le texte des cellules vertes (cf exemple) uniquement et me les recopie en feuille2...
CI_JOINT mon exemple

Merci d'avance à ceux qui pourront m'aider
 

Pièces jointes

  • Elo3_.xlsm
    14.3 KB · Affichages: 78

Modeste

XLDnaute Barbatruc
Re : combobox - rech. cellule couleurs - copier/insérer contenu

Bonjour Elo75,

Les listes déroulantes de ta colonne A sont liées à des données d'un autre classeur. J'ai donc modifié uniquement celle de la cellule B2.

Pas certain, par ailleurs, que tes explications soient suffisamment complètes et détaillées ... pour quelqu'un qui ne connaît pas ton fichier. Dans ton fichier, un début de proposition: au changement de valeur dans la cellule B2, la macro recopie les cellules en vert foncé pour le produit sélectionné.

Vois déjà si ce début correspond ... et, en fonction de tes observations, complète tes indications :p
 

Pièces jointes

  • Elo3_(V2).xlsm
    20.7 KB · Affichages: 109

Elo75

XLDnaute Nouveau
Re : combobox - rech. cellule couleurs - copier/insérer contenu

Bonjour Modeste ;-)
c'est vraiment sympa de t'y être penché, je vais refaire mon menu déroulant horizontale mais c'est exactement ça que je voulais avoir.
J'ai simplement quelques questions pour comprendre le code:
cf version 3

pour finir, comme je suis deb, j'aimerais savoir ce qui se passerait si je renommais les feuilles, ça se mets à jour automatiquement dans la macro?

Dans quelles circonstances conseilles tu d'utiliser les classes?
Bonne soirée et j'aurai sans doute d'autres questions mais je ne vais pas abuser ;)
 

Pièces jointes

  • Copy of Elo3_(V3).xlsm
    20.7 KB · Affichages: 60

Modeste

XLDnaute Barbatruc
Re : combobox - rech. cellule couleurs - copier/insérer contenu

Bonsoir Elo75,

Dans quelles circonstances conseilles tu d'utiliser les classes?
Je pars du principe que si tu me poses la question, c'est que tu en connais l'existence (je suis "pointu" dans mes déductions, quand je veux, hein :p), mais aussi et surtout que tu t'es déjà documentée. Avec tout ce que je sais à propos des modules de classe, je suis en mesure d'affirmer ... que je peux rien t'apprendre que tu n'aies déjà lu ailleurs (en mieux expliqué)!

Pour ta liste déroulante, je te conseille de faire une petite recherche sur les "plages nommées dynamiques" et l'utilisation de la fonction DECALER ... Les dimensions de ta plage ProfileList évolueraient donc au fur et à mesure que tu ajouterais des produits en Feuille1

Pour le code, quelques réponses et indications:
Dans les commentaires que tu as ajoutés tout en haut, attention à ne pas confondre les procédures événementielles Worksheet_Change et Worksheet_SelectionChange. Ici, c'est la première proposition que j'ai utilisée. Si c'est juste un copier-coller d'une aide quelconque et que tu n'a pas confondu, considère cette première remarque comme nulle et non-avenue :rolleyes:

Pour que la macro se déclenche au changement de valeur de n'importe quelle cellule dans la plage A2:A50, il me semble qu'on peut écrire
If Intersect(Target, Range("A2:A50")) Is Nothing Then Exit Sub
En poussant encore un peu pour "étendre" la plage à l'ensemble de la colonne A, on pourrait tester
If Target.Column <> 1 Then Exit Sub
En ce qui concerne les "ColorIndex", il y a plein d'explications et d'exemples sur ce même forum. Pour faire simple, tu peux aussi sélectionner une cellule colorée dans une feuille et exécuter cette petite procédure:
VB:
Sub CouleurIndex()
indexCouleur = ActiveCell.Interior.ColorIndex
MsgBox "couleur: " & indexCouleur
End Sub
Renseigne-toi tout de même, les couleurs disponibles à l'heure actuelle (et liées au thème actif) ne correspondent plus aux couleurs de la palette dans les versions précédentes. Dans ton fichier, ton "vert clair" correspond au ColorIndex 43 et le test fait dans le code fonctionne ... mais si tu affectes par macro ce ColorIndex à une cellule de ton choix, le vert obtenu sera différent

Quant à
si je renommais les feuilles, ça se mets à jour automatiquement dans la macro
Ah ben non, alors :p. Par contre, tu peux travailler avec l'Index de la feuille, plutôt que son nom. On écrira donc Sheets(2) au lieu de Sheets("Feuil2"). Index correspondra à "la place" de la feuille dans le classeur. Tu peux aussi travailler avec le CodeName de la feuille (le nom que tu vois dans l'explorateur de projet, dans l'éditeur vba: Sheet1, Sheet2, Sheet3, dans ton cas)

Je te laisse te dépétrer avec tout ça, mais n'hésite pas à revenir, pour tes autres questions :)
 

Elo75

XLDnaute Nouveau
Re : combobox - rech. cellule couleurs - copier/insérer contenu

:) ok bon bhein je vais m'y atteler et promis, je reviens avec le résultat mais...me feras tu le fleur de me valider ça?
Modeste, allez sois sympa je suis débutant :eek: même si je commence un peu à piger quelques notions :p
 

Elo75

XLDnaute Nouveau
Re : combobox - rech. cellule couleurs - copier/insérer contenu

Merci Modeste, je n'ai pas encore testé toute la macro mais j'ai un BUG 'runtime error 13"

Voici le code, pourrais tu me dire où est l'erreur? J'ai essayé avec If, then, End With mais ça ne fonctionne pas.
En rouge l'endroit où la macro bloque
'Pour exécuter des instructions en fonction d'un événement
'pour une feuille en particulier, sélectionnez la feuille dans l'éditeur, puis Worksheet :
'L'événement Change est ajouté, il agit lors d'un changement:
Private Sub Worksheet_Change(ByVal Target As Range)
'si je n'ai pas modifié dans l'une des cellules A2àA51 dans ma worksheet, la macro ne mets pas à jour-OK
If Intersect(Target, Range("$A$2:$A$51")) Is Nothing Then Exit Sub
'Target.count: permet de sortir de la procédure si plus d'une cellule est sélectionnée
'(sinon la suite de la macro renvoie un message d'erreur)
If Target.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
'supprime le format et le contenu des cellules de la colonne 2
Range("B:B").Clear
'OK compris
col = Application.Match(Target.Value, Sheets(1).Range("1:1"), 0)
With Sheets(2)
For Each c In .Range(.Cells(3, col), .Cells(27, col))
'colorIndex 14 = vert "foncé"
'ou je trouve le numéro du ColorIndex?
'Si je veux aussi rajouter le colorIndex vert clair, j'introduis une ligne en plus après en commençant par For each?
If c.Interior.ColorIndex = 14 Then c.Copy Me.Range("B5000").End(xlUp).Offset(1, 0)
If c.Interior.ColorIndex = 43 Then c.Copy Me.Range("B5000").End(xlUp).Offset(1, 0)
Next c
End With
End Sub

Merci pour ta patience...
 

Modeste

XLDnaute Barbatruc
Re : combobox - rech. cellule couleurs - copier/insérer contenu

Bonjour,

Pas de "Runtime error" chez moi ... par contre, s'il s'agit du même fichier que la première fois, je dirais que la boucle For doit parcourir la Feuille 1 non la 2 With Sheets(1), par conséquent.

Ceci dit les tests que tu fais en fin de boucle (sur les ColorIndex) ne fonctionneront que si les cellules colorées ne sont pas vides. D'autre part, si tu fais subir le même traitement à toutes les cellules (qu'elles soient vert "foncé" ou "clair" .... quel est l'intérêt de faire un test?

Il faudrait que tu expliques clairement ce que tu veux faire et que tu actualises éventuellement le fichier.

D'autre part, pas vu hier, mais dans tes commentaires, je lis:
'Target.count: permet de sortir de la procédure si plus d'une cellule est sélectionnée
L'instruction qui permet de "sortir", c'est Exit Sub; Target.Count>1 permet de vérifier qu'il n'y a pas plus d'une cellule modifiée.
 

Elo75

XLDnaute Nouveau
Re : combobox - rech. cellule couleurs - copier/insérer contenu

Bonsoir Modeste,
Merci pour ton aide.
Je n'en peux plus avec ces macros. J'ai passé la journée à ça mais ça ne fonctionne pas...je suis une vrai quiche...
Je te joins la version 4 avec le code que j'ai écrit pour que tu comprennes ce que je veux faire.
En gros, je souhaite qu'en feuille2, à chaque fois que je selectionne un ITEM de la liste déroulante, la macro m'insère le nombre de lignes correspondant à mes cellules vertes (feuille1)
Ensuite, que ces mêmes cellules soient copiees les unes à la suite des autres.

Que si je sélectionne/deselectionne un autre ITEM dans cette même colonne, la MACRO me rapatrie toujours les cellules vertes correspondantes...

Merci pour ton éclairage sur Target.Count>1

Mais il y a un truc qui reste très flou pour moi c'est les variables, on n'en déclare aucune ici?
 

Pièces jointes

  • Copy of Elo3_(V4).xlsm
    21.5 KB · Affichages: 62

Modeste

XLDnaute Barbatruc
Re : combobox - rech. cellule couleurs - copier/insérer contenu

Bonsoir,

Désolé mais il doit encore me manquer des infos (ou alors j'ai les portugaises ensablées, les mirettes pas en face des trous et le neurone qui bégaie :eek:). Imaginons ce qui suit:
  • je sélectionne vêtements en A2.
  • tu voudrais insérer une ligne 3, en décalant le reste vers le bas et en B2 et B3 s'inscriraient respectivement pyjama rose et pyjama. Pyjama rose doit donc s'inscrire à la hauteur de Vêtements??
    Pour la ligne insérée, qu'advient-il des listes déroulantes?
  • tu laisses une ligne vide sous pyjama? Avec ou sans liste déroulante en colonne A?
  • je sélectionne maintenant en A5 Poisson
  • rien ne doit se passer puisque pas de cellules vert foncé? Si rien n'est copié, tu modifies le contenu de A5 ou Poisson y reste indiqué et tu actives la cellule suivante? Est-ce bien la cellule suivante ou laisses-tu une ligne vide aussi?
  • en A5, A6 ou A7 (en fonction de tes réponses aux questions qui précèdent), je sélectionne Légumes. Dans la version précédente, que tu n'as pas modifiée, l'instruction Range("B:B").Clear efface le contenu et les formats de la colonne B ... ce n'est plus d'application, si je comprends bien?
  • que doit-on faire des cellules vert clair, dont tu reparles parfois (mais pas à chaque fois!?)
  • peut-il arriver qu'on "remonte" dans la colonne A en remplaçant Vêtements précédemment choisi, par Profiterolles? Et si oui, que fait-on de tout le reste qui s'affichait plus bas?

Bref voilà une série d'interrogations qui me restent entre les oreilles ... et auxquelles des réponses les plus claires possibles doivent être apportées (en tout cas si tu veux avancer :rolleyes:)

J'ai trouvé, dans ton code, une procédure Worksheet_Change stockée dans un module standard. Cette procédure événementielle ne peut être reprise que dans le code de l'objet (la feuille) concerné(e).

Pour ce qui est de la déclaration des variables, il me semble -au risque de me faire tirer les oreilles- qu'il existe différentes "écoles": les uns prônent une discipline stricte et s'obligent à déclarer chaque variable utilisée, ils ne boivent jamais, ne commettent aucun excés et ne s'emportent jamais (... un exemple? Euh ... je ne sais pas, moi ... Robert me semble réunir la plupart des conditions ;) Ouah, j'imagine déjà s'il passait par ici, le "remontage de bretelles" auquel j'aurais droit :eek: Robert, je te jure que je t'aime!. A l'opposé, d'autres ne déclarent que les variables qui doivent l'être ... et entre les deux, existent toutes les nuances :rolleyes: (y compris les fainéants comme moi!)
 

Elo75

XLDnaute Nouveau
Re : combobox - rech. cellule couleurs - copier/insérer contenu

:))) lol bon, j'essaye avec plus de précision
Colonne A (une série de case de 1à52 dans mon exemple)
Chaque cellule de la Colonne A fait apparaître un menu déroulant (champs de la ligne 1-feuille1)

1-Je sélectionne vêtements en A2 et je voudrais qu'il se passe la chose suivante:
>sur le critère "vêtement", aller compter dans la bonne plage (cf exemple) de la feuille1, le nb de cellules verts foncée "n"
>ensuite en feuille2, que n-1 ligne s'insèrent en dessous de A2 en laissant les cellules ajoutées en dessous de A2 vides OU en recopiant tout simplement "vêtement" dans les cellules insérées (colonneA)
>ensuite en feuille2-colonne B, qu'il m'insère le contenu des n cellules "vert foncées" identifiées sur n cellules à partir de B2.
Conséquence, si je modifie à nouveau A2 pour mettre "Legumes", la macro devra supprimer les n-1 lignes insérées et Les cellules "verts foncées" (dont le contenu correspondait à "vêtement") pour les remplacer par les cellules vert foncées qui répondent au critère "Légumes"...et ainsi de suite pour chaque cellule de la colonne A.


2-:p Et ça n'est pas tout! J'aimerais aussi pouvoir par exemple aller en A10, sélectionner "Biscuits" (en plus de "Legumes":celluleA2) et que de la même manière que pour 1, ma macro aille chercher les info suivantes:
>sur le critère "biscuits", aller compter dans la bonne plage (cf exemple) de la feuille1, le nb de cellules verts foncée "n"
>ensuite en feuille2, que n-1 ligne s'insèrent en dessous de A10 en laissant les cellules ajoutées en dessous de A10 vides OU en recopiant tout simplement "biscuit" dans les cellules insérées (colonneA)
>ensuite en feuille2-colonne B, qu'il m'insère le contenu des n cellules "vert foncées" identifiées sur n cellules à partir de B10.
Conséquence de 1 & 2, je peux sélectionner dans n'importe quelle cellule du menu déroulant (feuille2; A2:A53) "Légumes" et plus bas "Biscuits" et la macro m'appelle automatiquement toutes les cellules "verts foncées" correspondantes en face (colonne B).

Je sais c'est tiré par les cheveux mais j'en rêve:rolleyes:

REPONSE A TES QUESTIONS
"je selection vêtements en A2 / Tu voudrais insérer une ligne 3, en décalent le reste vers le bas OUI et en B2 et B3 s'inscriraient respectivement pyjama rose et pyjama OUI!:p. Pyjama rose doit donc s'inscrire à la hauteur de vêtements?? NON j'aimerais soit que la cellule A3 soit vide, soit qu'elle affiche "vêtements" une nouvelle fois "
"Pour la ligne insérée, qu'advient-il des listes déroulantes? Elles sont toujours disponibles mais à partir de la cellule A4
"Tu laisses une ligne vide sous pyjama? cf plus haut les deux options Avec ou sans liste déroulante en colonne A? j'aimerais avoir par défaut une liste déroulante pour toutes les cellules de la colonne A

"je sélectionne maintenant en A5 poisson" OUI Mais ça aurait pu être une autre cellule de la colonne A qui seraient modifiées
"rien ne doit se passer puisque pas de cellules vert foncé?" En effet ;) mais si j'aimerais qu'au moins un message NO MATCH s'affiche en B5.
"si rien n'est copié, tu modifies le contenu de A5 NON, je laisse la sélection "poisson" avec le message NO MATCH en face
"et tu actives la cellule suivante ou laisses-tu une ligne vide aussi?" Je ne suis pas sûre de saisir; Toutes les cellules de la colonne A (excepté celles où le menu déroulant a donné lieu à sélection et excepté celles qui ont été en conséquent insérées) permettent un accès au menu déroulant

"en A5, A6 ou A7 ...je sélectionne "Légumes"" en complément de mon explication précédente. Si je remodifie A2 en selectionnant "Profiterolles", la macro doit me supprimer les lignes qui avaient été insérées pour "Biscuit" et se relancer en supprimant ce qu'il y avait dans les cellules (ici: deux cellules vertes en B2/B3) puis aller chercher en feuille1 pour les copier, ce qui correspond à "profiterolles".
En revanche je n'aurais pas pu faire de selection en A3 car c'était une ligne qui avait été insérées pour "Legumes".


Pour l'instruction Range("Bxxx.Bxxx").clear, elle doit s'executer sur les cellules associées (non sur toute la colonne) à chaque fois que je modifie la selection d'une cellule de la colonne A qui donne accès à ma liste déroulante.


"Que doit-on faire des cellules vert clair, dont tu reparles parfois" en fait :eek: j'aurais aimé pouvoir chercher le contenu+format des cellules vert foncée et/ou/puis celui des cellules vert claires (par exemple, pour "Poisson", si je n'ai pas de résultat, pouvoir aller chercher les cellules vert claire)...:( mais ça me semble trop compliqué à faire et je ne peux pas demander ça au forum...

"peut-il arriver qu'on "remonte" dans la colonne A en remplaçant Vêtements précédemment choisi par Profiterolles? OUI et dans ce cas, les contenus/formats des cellules de la colonne B correspondantes sont modifiées par ce qui corresponds à profiterolles que fait on de tout le reste qui s'affichait plus bas? on le laisse tant que les cellules (colonneA) qui disposent d'un menu déroulant (donc pas "insérées") n'ont pas été modifiées >> le tableau peut donc dynamiquement s'allonger ou se réduire. Si je remplace vêtement par un champs vide de ma liste déroulante, les lignes insérées pour vêtement se suppriment et les cellules associées sont vides.

:eek: voilà, j'espère que c'est plus clair.

Oui j'ai un peu de mal à comprendre dans quel cas on insère un module standard et aussi, sur quelle partie de VBA tu es parvenu à créer Worhsheet_Change car quand je fais "Insert Module", je n'arrive pas à modifier "désignation" (en haut)...j'ai beaucoup de choses à découvrir ;)

Pour les variables :) bon ça me rassure de comprendre qu'il y a plusieurs ecoles

MERCI VRAIMENT DU FOND DU COEUR modeste de m'aider à me dépatouiller. Dans l'attente de te lire
 

Modeste

XLDnaute Barbatruc
Re : combobox - rech. cellule couleurs - copier/insérer contenu

Bonjour Elo75,

En lisant le détail de tes aspirations, j'ai failli répondre que la gestion des lignes ajoutées/supprimées allait être un boulot d'enfer et t'inviter à réfléchir à une autre manière de présenter les infos. Puis j'ai eu une idée (ben oui, ça m'arrive :p) et j'ai donc une proposition à te faire tester.
Tu détermineras si j'ai compris correctement et (que ce soit le cas ou non :rolleyes:) tu liras les commentaires que j'ai ajoutés au code. Pour voir le code en question, clic droit sur l'onglet de la feuil2 > Visualiser le code (j'ai supprimé le module "en trop", corrigé 2-3 petites choses que tu n'avais pas modifiées :mad: J'ai aussi ajouté une plage nommée "ListPro2" qui est une plage dynamique et l'ai affectée aux validations en colonne A. Chaque produit ajouté en ligne 1 de la feuil1 apparaîtra dans la liste automatiquement).

... à toi de voir et de bosser, maintenant! ;)
 

Pièces jointes

  • Elo3_(V5).xlsm
    30.4 KB · Affichages: 81

Elo75

XLDnaute Nouveau
Re : combobox - rech. cellule couleurs - copier/insérer contenu

Bonjour Modeste,
Merci ;-) tu as une bonne idée pour la ListPro2 mais...j'ai testé avec une modif et rien ne se passe, n'y a t-il pas un problème ?
ou alors :p c'est pour voir si je suis toujours avide de macro ?

en espérant te lire
 

Modeste

XLDnaute Barbatruc
Re : combobox - rech. cellule couleurs - copier/insérer contenu

Bonsoir,

je t'aime!!!!!!
N'est-ce pas un peu excessif :rolleyes:

Ce n'est pas une raison pour écorcher mon nom

ça fonctionne !!! :)
Ah ben tant mieux, mais ... qu'est-ce qui fonctionne, au juste?

MERCI MERCI ET MERCI :)
N'en jetez plus! Mais n'oublie pas que l'étape suivante c'est de tester dans tous les sens, de chercher à comprendre et de te réapproprier le "bazar" pour pouvoir enrichir et adapter ensuite, en toute autonomie ...

À un de ces jours,
 

Discussions similaires