passer de 2 colonnes à un tableau

pascal21

XLDnaute Barbatruc
bonjour le forum
le titre n'est pas trop explicite mais le fichier joint l'est lui
j'ai deux colonnes A et B et j'aimerais en faire un tableau trié
exemple
A AA
B CC
C BB
D CC
il faudrait que çà devienne
AA BB CC
A C B
D
je sais que ça existe en formule et qu'elle est assez 'indigeste'
MERCI pour votre aide
 

Pièces jointes

  • Classeur3.xlsx
    9 KB · Affichages: 27

job75

XLDnaute Barbatruc
Bonjour Pascal,

C'est très classique, formule matricielle en E3 :
Code:
=SIERREUR(INDEX($A:$A;PETITE.VALEUR(SI($B$1:$B$1000=E$2;LIGNE($B$1:$B$1000));LIGNES(E$3:E3)));"")
A valider par Ctrl+Maj+Entrée et tirer vers la droite et le bas.

Edit : bonjour R@chid, heureux de te revoir, tu te fais rare.

A+
 

Victor21

XLDnaute Barbatruc
[HS]
Rare, moi aussi, je ne pouvais pas passer par là sans en profiter pour souhaiter un excellent réveillon à Gérard et à R@chid, mais aussi à tous ceux qui liront ce post. Et bonne année à ceux qui passeront après l'heure du crime :)

En priant mon -presque-voisin d'avoir squatté son fil :)
 

job75

XLDnaute Barbatruc
Re, salut cher Patrick,

En VBA voici ce que ça peut donner :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A:B]) Is Nothing Then Exit Sub
Dim dest As Range, t, d1 As Object, d2 As Object, i&, ub&, a, j%, s, ubs&
Set dest = [E2] 'cellule de destination, à adapter
Application.ScreenUpdating = False
dest.Resize(Rows.Count - dest.Row + 1, Columns.Count - dest.Column + 1) = "" 'RAZ
'---liste des agences---
t = [A1].CurrentRegion.Resize(, 2)
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(t)
  d1(t(i, 2)) = d1(t(i, 2)) + 1 'comptage
  d2(t(i, 2)) = d2(t(i, 2)) & Chr(1) & t(i, 1) 'concaténation
Next
If d1.Count = 0 Then Exit Sub
'---tableau des résultats---
ReDim t(1 To Application.Max(d1.items), 1 To d1.Count)
ub = UBound(t)
a = d2.items
For j = 1 To d1.Count
  s = Split(a(j - 1), Chr(1))
  ubs = UBound(s)
  For i = 1 To ub
    If i <= ubs Then t(i, j) = s(i)
Next i, j
'---restitution---
dest.Resize(, d1.Count) = d1.keys 'agences
dest(2).Resize(ub, d1.Count) = t 'employés
End Sub
Fichier joint, l'exécution est très rapide grâce aux 2 Dictionary et aux tableaux VBA.

Bon réveillon à tous et tous mes vœux anticipés pour 2017.
 

Pièces jointes

  • Tableau(1).xlsm
    25.1 KB · Affichages: 30
Dernière édition:

Discussions similaires

Réponses
4
Affichages
234

Statistiques des forums

Discussions
312 206
Messages
2 086 203
Membres
103 157
dernier inscrit
youma