Affichier toutes les valeurs de colone B pour une valeur colone A

  • Initiateur de la discussion Initiateur de la discussion suze10
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

S

suze10

Guest
Bonjour,

Un grand merci pour ce forum! J'ai fait de très gros progres depuis que je l'ai découvert!

je n'ai pas trouvé de solution à un point, j'apprécierais votre aide.

Dans une feuiile excel, j'ai une liste de client, avec les produits qu'ils achetent. par exemple :
Client A achete 1,2,3,4
Client B achete 1,4,7,8
Client C achete 7, 9
Client D achete 4
Le fichier n'a que 2 colones, Colone A pour les clients, B pour les produits.

Dans une autre feuille, je voudrais affichier touts les produits achetés par un client donné, selectionné dans une liste déroulante. J'ai essayé avec Index, mais le fait que le nom des clients apparaissent plusieur fois semble poser problème.

Est-ce faisable avec des formules?

Merci d'avance
Suze 10
 

Pièces jointes

Re : Affichier toutes les valeurs de colone B pour une valeur colone A

Bonjour Suze, bonjour le forum,

C'est certainement faisable avec des formules mais je ne sais pas le faire. Au cas où du VBA pourrait te convenir voici ton fichier modifié avec la macro événementielle Change ci-dessous :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim pl As Range 'déclare la variable pl (PLage)
Dim dest As Range 'déclare la variable dest (DESTination)
 
If Target.Address <> "$F$1" Then Exit Sub 'si le changement a lieu ailleurs qu'en F1, sort de la procédure
 
'supprime les anciennes donnée
 
Set pl = Range("E4").CurrentRegion 'définit la plage pl
Set pl = pl.Offset(1, 0).Resize(pl.Rows.Count - 1) 'redéfinit la plage pl sans "Produits"
pl.ClearContents 'efface le contenu de la plage pl
 
'place les nouvelle données
 
'boucle sur toutes les cellules éditées cel de la colonne A
For Each cel In Range("A3:A" & Range("A65536").End(xlUp).Row)
    Set dest = Range("E65536").End(xlUp).Offset(1, 0) 'de'finit la variable dest
    'si la valeur de la cellule cel est égale à la valeur indiquée en F1,
    'copie la cellule de la colonne B et la colle dans dest
    If cel.Value = Target.Value Then cel.Offset(0, 1).Copy dest
Next cel 'prochaine cellule cel de la boucle
End Sub
 

Pièces jointes

Re : Affichier toutes les valeurs de colone B pour une valeur colone A

Bonjour le fil, bonjour le forum,

Voilà ! Je savais bien qu'un de nos balèzes allait trouver la solution Formule. Je suis vert... on risque de me confondre avec Hulk ! Chapeau Jocelyn...
 
Re : Affichier toutes les valeurs de colone B pour une valeur colone A

Bonjour à tous,

Ce forum est tjrs une mine d'info mais, là, je trouve pas malgré pas mal de recherche.
Je souhaite une variante par rapport à ce que Jocelyn propose: je veux aussi obtenir les doublons.

C'est à dire que pour le client B, je veux qu'il me répète le produit 1.

Que dois-je faire?
Si possible sans macro.

Merci de votre aide et longue vie à ce forum!!
 
Re : Affichier toutes les valeurs de colone B pour une valeur colone A

La perfection!!! Merci!!

Mais je comprends vraiment rien à cette fonction INDEX :-(
Faut que je m'y penche sérieusement...

@+
 
Re : Affichier toutes les valeurs de colone B pour une valeur colone A

Bonjour

Pour ma part, je cherche à aller plus loin dans cette fonction = j'ai besoin que la liste des produits soit afficher dans une seule et même cellule avec un séparateur (cf. fichier joint)
--> "Feuil1" pour rappel sur la formule déjà trouvée
--> feuille "cl. vs prod" pour présenter
- la source = tableau client X Produit X Quantité
- le consolidé attendu = tableau Client X ListeProduitsVendus
 

Pièces jointes

Re : Affichier toutes les valeurs de colone B pour une valeur colone A

Bonjour le fil, sebail à qui je souhaite Bienvenue sur le forum,

Je viens de voir ton fichier et je pense que la fonction LIGNE() ne peut satisfaire ta demande puisqu'elle est "supposée" se modifier à chaque nouvelle ligne, exemple E4, E5, E6 etc ensuite.

Pour le moment je vois mal la réponse sauf avec du code VBA....

Jean-Pierre
 
Re : Affichier toutes les valeurs de colone B pour une valeur colone A

Bonjour,

Si on déplace les données ou les formules, le résultat est faux:

=SI(ESTERREUR(INDEX($B$1:$B$20;PETITE.VALEUR(SI(($A$3:$A$20=F$1);LIGNE($B$3:$B$20));LIGNE()-3)));"";INDEX($B$1:$B$20;PETITE.VALEUR(SI(($A$3:$A$20=F$1);LIGNE($B$3:$B$20));LIGNE()-3)))

Fonctionne si on déplace les données ou les formules:

=SI(LIGNES($1:1)<=NB.SI(client;$F$1);INDEX(produit;PETITE.VALEUR(SI(client=$F$1;LIGNE(INDIRECT("1:"&LIGNES(client))));LIGNES($1:1)));"")

client =Tabelle1!$A$3:$A$16
produit =Tabelle1!$B$3:$B$16

Pour obtenir la liste dans une cellule

=ListeCondUneCellule(produit;client;F1)

Code:
Function ListeCondUneCellule(champDonnées As Range, champCond As Range, cond)
  temp = ""
  For i = 1 To champDonnées.Count
    If champCond(i) = cond Then temp = temp & champDonnées(i) & " "
  Next i
  ListeCondUneCellule = temp
End Function



JB
Formation Excel VBA JB
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

P
Réponses
11
Affichages
1 K
Princesse
P
K
Réponses
13
Affichages
7 K
kevinteamgravity
K
K
Réponses
4
Affichages
5 K
kinou5713
K
L
Réponses
10
Affichages
2 K
lnicolas
L
Retour