XL 2010 listes et dépendances

  • Initiateur de la discussion Initiateur de la discussion poipoi
  • 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 !

poipoi

XLDnaute Impliqué
Bonjour toute l'équipe,
Voici mon souci du jour et mes capacités sont largement en deçà de ce que je voudrais trouver.
Dans le tableau joint, je voudrais avoir en L4:L... la liste des valeurs uniques, extraites de la liste Fournisseurs et correspondant au type inscrit en K4!!
j'espère que vous arriverez à comprendre c'est un peu brouillon comme explication, mais en gros: si en K4 je choisis "Matériel" je souhaiterais avoir en L4 "Décathlon" en L5 "Fnac" en L6 "Xtrem Sport"...
je m'y perds dans les formules imbriquant Index, Equiv....
Auriez-vous une idée? un grand merci déjà...
 

Pièces jointes

Solution
Bonjour poipoi, le forum,

Je suis surpris que vous ne donniez pas suite à mon post précédent ☹️

Pour terminer, puisque vous êtes sur Excel 2010, voici une solution avec un classeur .xlsm et des tableaux structurés :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim critere As Range, dest As Range, tablo, i&
Set critere = [K3:K4]
Set dest = [Tableau3] '3ème tableau structuré
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
dest.ListObject.ShowTotals = False 'masque la ligne du Total
[Tableau1].ListObject.Range.AdvancedFilter xlFilterCopy, critere, dest.Rows(0) 'filtre avancé copié sur le 1er tableau structuré
dest.ListObject.Resize dest.CurrentRegion 'redimensionne le tableau
With...
Bonjour poipoi, djidji59430, le forum,

Formule matricielle en L4 :
Code:
=SIERREUR(INDEX(D:D;PETITE.VALEUR(SI((E$4:E$100=K$4)*ESTNUM(LN((LIGNE(D$4:D$100)=EQUIV(D$4:D$100;D$1:D$100;0))));LIGNE(D$4:D$100));LIGNE(L1)));"")
à valider par Ctrl+Maj+Entrée et tirer vers le bas.

La limite $100 est à adapter au tableau source.

A+
 

Pièces jointes

Bonjour poipoi, djidji59430, le forum,

Formule matricielle en L4 :
Code:
=SIERREUR(INDEX(D:D;PETITE.VALEUR(SI((E$4:E$100=K$4)*ESTNUM(LN((LIGNE(D$4:D$100)=EQUIV(D$4:D$100;D$1:D$100;0))));LIGNE(D$4:D$100));LIGNE(L1)));"")
à valider par Ctrl+Maj+Entrée et tirer vers le bas.

La limite $100 est à adapter au tableau source.

A+
Bonjour Job75
Un grand merci c'est exactement ce que je voulais,
du coup mon samedi est tout ensoleillé!!

Portez vous bien.. et encore merci à tous ceux qui donnent de leur temps.
 
Désolé je reviens sur ce fichier car la solution proposée par Job75 m'a donnée une idée pour compléter mon tableau, j'explique:
je rajoute une colonne après L qui se nomme "Objet", du coup en M je voudrais selon le même principe avoir en M4:M... l'Objet qui correspond à chaque "Fournisseur". Ainsi, si Décathlon est en L4 , M4= "sac à dos"; M5="Casquette"; M6="housse..." ainsi de suite pour Décathlon, ensuite il y aura Fnac avec en M9=" Batterie..." etc..

mais depuis tout à l'heure mes capacités n'ont que très peu évoluées, alors s'il se trouve quelqu'un.e parmi vous qui veut s'y coller, j'ai de la rhubarbe au jardin et je lui fait une tarte rhubarbe-fraises.
 

Pièces jointes

Merci Djidji59430
mais apparemment Excel refuse d'ouvrir ce fichier avec un message: il est en mode protégé et sa modif risque d'endommager le PC...

Tu as raison sur le 1er point, ma demande diffère dans le sens où maintenant je souhaite hiérarchiser les objets par fournisseurs, donc en K4 le Type de dépense, donc à partir de L4:L... le 1er Fournisseur, et en L...(+1) le 2e Fournisseur etc.., et en face de chaque fournisseur l'objet

mais si cela est trop ardu il faut laisser tomber !!
 
Si j'ai bien compris, formule matricielle en M4, à tirer vers la droite et le bas :
Code:
=SIERREUR(INDEX($C:$C;PETITE.VALEUR(SI(($E$4:$E$100=$K$4)*($D$4:$D$100=$L4);LIGNE($D$4:$D$100));COLONNE(A4)));"")
Si ce n'est pas ça soyez plus clair.
 

Pièces jointes

Si j'ai bien compris, formule matricielle en M4, à tirer vers la droite et le bas :
Code:
=SIERREUR(INDEX($C:$C;PETITE.VALEUR(SI(($E$4:$E$100=$K$4)*($D$4:$D$100=$L4);LIGNE($D$4:$D$100));COLONNE(A4)));"")
Si ce n'est pas ça soyez plus clair.
Oui je ne suis pas très explicite, voici une copie d'écran qui devrait permettre de comprendre:
1745683996857.png
 
Bonjour poipoi, le forum,

Obtenir le résultat que vous souhaitez n'est pas évident par formules.

Avec cette macro dans le code de Feuil1 c'est relativement simple :
VB:
Private Sub Worksheet_Change(ByVal target As Range)
Dim critere$, dest As Range, tablo, i&
critere = [K4]
Set dest = [L3:N3] '3 colonnes
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With Range("B3:F" & Range("B" & Rows.Count).End(xlUp).Row)
    dest.Resize(Rows.Count - dest.Row + 1).ClearContents 'RAZ
    .AutoFilter 4, critere 'filtre automatique
    .Columns(3).Copy dest(1)
    .Columns(2).Copy dest(2)
    .Columns(5).Copy dest(3)
    .AutoFilter 4 'ôte le filtre
End With
With Range(dest, Cells(Rows.Count, dest.Column).End(xlUp))
    .Sort .Columns(1), xlAscending, Header:=xlYes 'tri sur la 1ère colonne
    tablo = .Value 'matrice, plus rapide
    For i = UBound(tablo) To 2 Step -1
        If tablo(i, 1) = tablo(i - 1, 1) Then tablo(i, 1) = ""
    Next
    .Columns(1) = tablo
    .Cells(.Rows.Count + 1, 3) = "=SUM(" & .Columns(3).Address(0, 0) & ")" 'total
    .Offset(.Rows.Count).Resize(Rows.Count - .Rows.Count - .Row + 1).Borders.LineStyle = xlNone 'effacement des bordures
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
Elle se déclenche quand on modifie ou valide une cellule quelconque.

A+
 

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

Discussions similaires

Retour