concatener de cellules avec filtres

oz2007

XLDnaute Junior
Bonjour,

Etant débutante sur VBA j'ai besoin d'un petit coup de pouce :)
Je cherche à concatener plusieurs cellules (en séparant les données par un point virgule) après l'application d'un filtre. Dans mon exemple, je dois intégrer dans l'onglet "report ctr" des données provenant de l'onglet "prestataire" de la façon suivante:

- dans l'onglet prestataire filtrer colonne D sur station 1 et colonne E sur activité 1
- dans l'onglet report ctr en B3 (station 1 & activité 1) je dois avoir la liste des numéro de prestataires indiqués dans l'onglet "prestataire" séparé par un point virgule
- et ainsi de suite

J'ai mis les résultats attendu dans l'onglet "report ctr" au cas où ce n'est pas très clair

Merci :)
ps: vba ou formules excel les deux me conviennent, je ne suis pas difficile!
 

Pièces jointes

  • test.xlsm
    104.4 KB · Affichages: 43
  • test.xlsm
    104.4 KB · Affichages: 38
Dernière édition:

fredl

XLDnaute Impliqué
Re : concatener de cellules avec filtres

Bonjour,
Je crois comprendre ton besoin, mais...
il va me falloir une précision pour t'aider :
- souhaite tu repercuter en "REPORT CTR" le resultat d'un seul filtre sur le tableau de "PRESTATAIRES" ou
- souhaite tu automatiquement traiter tous le tableau de "PRESTATAIRES" dans "REPORT CTR" lorsque tu fais une modif dans "PRESTATAIRES"? (à ce moment là, plus besoin de filtrer pour avoir un resultat sachant qu'il te faudrait filtrer une à une chaque possibilité pour obtenir un resultat pour l'ensemble du tableau......

dans l'attente de ton retour
Cdt
Frédéric
 

oz2007

XLDnaute Junior
Re : concatener de cellules avec filtres

Coucou Frédéric,

Plutôt la deuxième solution. Les étapes que je souhaite traduire en macro sont:

1er étape:

- onglet prestataire/ appliquer un filtre sur station 1 (colonne D) et activité 1 (colonne E)
- onglet report ctr/ concatener en B3 (donc au croissement entre station 1 et activité 1) les deux numéros de prestataires des lignes filtrés (avec point virgule)

2ème étape:

- onglet prestataire/ appliquer un filtre sur station 1 (colonne D) et activité 2 (colonne E)
- onglet report ctr/ concatener en B4 (donc au croissement entre station 1 et activité 2) les trois numéros de prestataires des lignes filtrés.

Etc...

Est-ce plus clair? ;)
 

gosselien

XLDnaute Barbatruc
Re : concatener de cellules avec filtres

parfait non. mais ça dépanne peut être mais ...

je ne comprends pas moi même pourquoi les résultats sont à l'envers dans les cellules (10001,10000 au lieu de 10000;10001), je ne sais pas comment trier avant de coller les données :(
et à la fin du tableau il ajoute des ";" inutiles que je ne sais pas éviter
Si qq un a les réponses :)
 

gosselien

XLDnaute Barbatruc
Re : concatener de cellules avec filtres

Petite modif après m'être creusé la tête....

Sub TableauInverse() ' inspiré d'un code de J. Boisgontier !!!
' Formation Excel VBA JB
'
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
Set ws2 = Sheets("report ctr")
Set ws1 = Sheets("prestataires")
ws2.Range("E1:k10").ClearContents
nblignes = ws1.[e65000].End(xlUp).Row
Dim a(1 To 5, 1 To 5)
Dim Last As Long
lig = 1: col = 1
Mlig = lig: Mcol = col
Last = ws1.Range("E65000").End(xlUp).Row
For Each c In Sheets("prestataires").Range("e2:e" & Last)
If d1.exists(c.Value) Then lig = d1(c.Value) Else d1(c.Value) = Mlig: lig = Mlig: Mlig = Mlig + 1
tmp = c.Offset(, -1)
If d2.exists(tmp) Then col = d2(tmp) Else d2(tmp) = Mcol: col = Mcol: Mcol = Mcol + 1
a(lig, col) = IIf(IsEmpty(a(lig, col)), c.Offset(, -4) & ";", a(lig, col) & c.Offset(, -4))
Debug.Print a(lig, col), c.Row, c
Next c
' tri
ws2.[f2].Resize(d1.Count, 1) = Application.Transpose(d1.keys)
ws2.[g1].Resize(1, d2.Count) = d2.keys
ws2.[G2].Resize(d1.Count, d2.Count) = a
ws2.Select
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 581
Messages
2 089 916
Membres
104 304
dernier inscrit
halo palo