[RESOLU] Mise en forme données - macro ou formules ?

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 !

emilien21

XLDnaute Nouveau
Bonjour à tous,

je vais essayer d'expliquer aussi clairement que possible mon problème...
Je réalise un export depuis un logiciel et les données se retrouvent sous la forme présente dans le fichier excel joint (onglet "avant").

C'est à dire que la colonne 1 répète plusieurs fois le nom d'un article, les colonnes suivantes contiennent des paramètres différents avec des données différentes.

C'est assez compliqué à expliquer et je m'en excuse, le plus simple est de regarder la PJ excel...

La colonne Désignation 1 doit être transposée => les données de la colonne désignation 2 doivent renseignées les cellules de cette colonne.

C'est une problématique que je retrouve régulièrement sur excel mais je n'ai jamais su trouver de solution (c'est au delà de mes compétences...). C'est un peu comme si je souhaitais un TCD mais avec des données "texte".

Est-ce plus simple à l'aide d'une macro, ou les formules peuvent résoudre ce problème (formule matricielle,etc.) ?

Un grand merci par avance à tous ceux qui pourront m'apporter leur aide.
 

Pièces jointes

Dernière édition:
Re : Mise en forme données - macro ou formules ?

Bonjour.
Ceci dans le module "Feuil2 (Après)" fait l'affaire pour l'instant:
VB:
Private Sub Worksheet_Activate()
Dim TE() As Variant, Le As Long, TS() As Variant, Ls As Long, Tit() As Variant
TE = Feuil1.UsedRange.Value
Tit = Me.[A1:O1].Value
ReDim TS(1 To 5000, 1 To UBound(Tit, 2))
Le = 2: Ls = 0
Do: Ls = Ls + 1
   TS(Ls, 1) = TE(Le, 7)
   TS(Ls, 2) = TE(Le, 2)
   TS(Ls, 3) = TE(Le, 3)
   TS(Ls, 4) = TE(Le, 4)
   Do: TS(Ls, WorksheetFunction.Match(TE(Le, 5), Tit, 0)) = TE(Le, 6)
      Le = Le + 1: If Le > UBound(TE, 1) Then Exit Do
      Loop Until TE(Le, 7) <> TS(Ls, 1) Or TE(Le, 2) <> TS(Ls, 2) Or TE(Le, 3) <> TS(Ls, 3) Or TE(Le, 4) <> TS(Ls, 4)
   Loop Until Le > UBound(TE, 1)
Me.[A2].Resize(5000, UBound(Tit, 2)).ClearContents
Me.[A2].Resize(Ls, UBound(Tit, 2)).Value = TS
End Sub
Cordialement.
 
- 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

Réponses
8
Affichages
618
Réponses
3
Affichages
499
Réponses
2
Affichages
756
Réponses
1
Affichages
551
Retour