vitchito,
Je pense avoir trouvé la solution, ci-dessous la macro qui va te permettre de faire ta transposition sans-doublons :
Option Explicit
Sub testSub()
transposeTableauSansDoublon Range("A5"), Range("D5")
End Sub
Sub transposeTableauSansDoublon(rngPremiereCellule As Range, rngDestination As Range)
On Error GoTo erreur:
Application.ScreenUpdating = False
Dim rngProduit As Range
Dim rngEnteteColonneProduit As Range
Dim rngColonneColorisFiltre As Range
Dim rngDestinationAeffacer As Range
Dim cell As Range
Dim colProduit As Collection
Dim vrtProduit As Variant
Dim i As Long
'Affectations
Set rngProduit = Range(rngPremiereCellule, Cells(65536, rngPremiereCellule.Column).End(xlUp)) 'Colonne produit dynamique
Set rngEnteteColonneProduit = rngProduit.Offset(-1, 0).Cells(1)
Set colProduit = New Collection
'Enregistrement des références 'produit' dans une collection
'La clé CStr(cell.value) ne permettra pas d'enregistrer les doublons
'(mais necessite d'échapper l'erreur par 'on error resume next')
For Each cell In rngProduit
'au passage on ne veux pas des cellules vides
If cell.Value <> "" Then
On Error Resume Next
colProduit.Add cell.Value, CStr(cell.Value)
On Error GoTo 0
End If
Next cell
'On efface le tableau de destination précédent
Set rngDestinationAeffacer = rngDestination.CurrentRegion
Set rngDestinationAeffacer = rngDestinationAeffacer.Offset(1, 0).Resize(rngDestinationAeffacer.Rows.Count - 1, rngDestinationAeffacer.Columns.Count)
rngDestinationAeffacer.Clear
'Activation du filtre
rngEnteteColonneProduit.AutoFilter
'Pour chaque produit
i = 0
For Each vrtProduit In colProduit
'Application du filtre
rngEnteteColonneProduit.AutoFilter rngEnteteColonneProduit.Column, Criteria1:=vrtProduit
'Récupération des valeurs visibles dans la colonne coloris
Set rngColonneColorisFiltre = rngProduit.Offset(, 1).Cells.SpecialCells(xlCellTypeVisible)
rngColonneColorisFiltre.Copy
'Ajout du nom du produit courant dans le nouveau tableau
rngDestination.Offset(i, 0).Value = vrtProduit
'Ajout des coloris (copier-coller spécial avec l'option transpose)
rngDestination.Offset(i, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, transpose:=True
i = i + 1
Next vrtProduit
'Désactivation du filtre
rngEnteteColonneProduit.AutoFilter
Application.ScreenUpdating = True
Exit Sub
erreur:
Application.ScreenUpdating = True
MsgBox "Erreur n°" & Err.Number & vbNewLine & Err.Description, vbCritical
End Sub
La procédure transposeTableauSansDoublon(rngPremiereCellule As Range, rngDestination As Range) doit recevoir 2 arguments de type Range obligatoires. Le 1er argument est la 1ère cellule où il y a un nom de produit, le 2ème argument est la 1ere cellule de ton tableau de destination.
Telle que la macro est faite, tu peux ajouter autant de référence 'produit' à la suite dans ton tableau et autant de coloris que tu veux. Le nom des colonnes dans le tableau de destination n'est pas du tout géré, ça sera à toi de les rajouter au fur et à mesure que tu auras un nombre maximum de coloris pour 1 produit.
Tu trouveras ton fichier excel avec mes modifications en pièce jointe.
Voilà, si tu as des questions, ou des erreurs, n'hésite pas