Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Transformation tableau en colonne de données

Lexan007

XLDnaute Nouveau
Bonjour à tous,

Je souhaite élaborer une macro pour transformer un tableau de 150 lignes x 40 colonnes en un tableau de 3 colonnes uniquement. Mes connaissances ne me permettent malheureusement pas de trouver seul la solution alors je fais appel à votre aide.
En image, la structure de mon tableau initial sur l'onglet 1 et le résultat attendu sur l'onglet 2.

D'avance merci pour votre aide.
 

Lexan007

XLDnaute Nouveau
Bonjour Gosselien,

Voici un fichier Excel pour reprendre mon exemple.
Je travaille sous Excel 2010 standard
 

Pièces jointes

  • Exemple conversion tableau Excel.JPG.xlsx
    8.6 KB · Affichages: 22

gosselien

XLDnaute Barbatruc
re,

facilement réalisable (30 sec) avec POWER QUERY en option sur 2010-2013 et en natif sur 2016 (voir sur google)

oui bien :
VB:
Option Explicit
Sub DécroiserTableau()   '
'décroiser un tableau pour remettre en colonne et en faire un tcd
Dim a, b(), i As Long, j As Long, n As Long
a = Sheets("Onglet1").[a1].CurrentRegion.Value2  ' Nom de l'onglet à adapter  ' mise en mémoire
ReDim b(1 To (UBound(a, 1) - 1) * (UBound(a, 2) - 1), 1 To 5)
For i = 2 To UBound(a, 1)              ' hauteur de la zone
   For j = 2 To UBound(a, 2)           ' largeur de la zone
      If Not IsEmpty(a(i, j)) Then     ' si pas vide
         n = n + 1                     ' incrémenter ligne
         b(n, 1) = a(i, 1)             ' mettre data dans 1ere colonne
         b(n, 2) = a(1, j)             ' 2e colonne
         b(n, 3) = a(i, j)             ' 3e colonne
      End If
   Next
Next
Application.ScreenUpdating = False
'Restitution
With Sheets("feuil1").Cells(1).Resize(, 4)    ' 3 colonnes partant de la A ! nom de l'onglet à adapter
   .CurrentRegion.Clear                         ' effacer la feuille
   With .Offset(1).Resize(n)
      .FormulaLocal = b                         ' coller le tableau
   End With
End With
Application.ScreenUpdating = True
End Sub
P.
 

Pièces jointes

  • Exemple conversion tableau Excel.JPG.xlsx
    18 KB · Affichages: 31
Dernière édition:

Lexan007

XLDnaute Nouveau
Bonjour Gosselien,
J'ai adapté avec succès ta macro à mon tableau. Tout fonctionne parfaitement.
Est-ce que ça serait difficile d'inclure dans la macro la copie de la mise en forme comme dans le fichiers joint en exemple ?
 

Pièces jointes

  • test.xlsx
    9 KB · Affichages: 29

gosselien

XLDnaute Barbatruc
Bonjour,

ceci devrait aller (à la place de l'autre "restitution")

VB:
'Restitution
With Sheets("résultat").Cells(1).Resize(, 3)    ' 3 colonnes partant de la A ! nom de l'onglet à adapter
   .CurrentRegion.Clear                         ' effacer la feuille
   With .Offset(1).Resize(n)
      .FormulaLocal = b ' coller le tableau
   .Font.Name = "calibri"
   .Font.Size = 10
   .VerticalAlignment = xlCenter
   .BorderAround Weight:=xlThin
   .Borders(xlInsideVertical).Weight = xlThin
   .Borders(xlInsideHorizontal).Weight = xlThin
   .BorderAround Weight:=xlThin
   .HorizontalAlignment = xlCenter
   End With
End With
Application.ScreenUpdating = True
End Sub
 

Lexan007

XLDnaute Nouveau
Merci.
Ce code fonctionne bien, mais ne fait pas complétement ce que je souhaitais.
J'aimerai vraiment que ce soit un copié/collé des cellule source. J'ai besoin du contenu évidement et aussi la la couleur de la police et de la couleur de remplissage de la cellule. Ce sont vraiment ces 3 éléments qui me sont important.
 

gosselien

XLDnaute Barbatruc
Sorry, ça je ne sais pas faire

Voir la réponse de pierrejean (que je salue )
P.
 
Dernière édition:

Lexan007

XLDnaute Nouveau
Bonjour Pierrejean
Merci pour ton code. Il fonctionne parfaitement en faisant le copié/collé pour garder la mise en forme de la cellule. C'est exactement ce que je désirai !
Si je veux décaler la 1érer cellule de tableau, que dois-je modifier dans ton code (tableau en cellule c18:l50 par exemple) ?
 

Discussions similaires

  • Question
XL pour MAC mise en forme
Réponses
2
Affichages
125
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…