Menu

VBA - Macro pour transposer un tableau colonnes en tableau lignes

Messages postés
18
Date d'inscription
vendredi 13 novembre 2015
Statut
Membre
Dernière intervention
12 juillet 2019
- - Dernière réponse : f894009
Messages postés
14606
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 juillet 2019
- 12 juil. 2019 à 18:36
Bonjour,

J'ai un tableau avec des données regroupées en colonnes pour chaque mois et je souhaiterais à l'aide d'une macro obtenir mes données chiffrées en ligne.
Voici ce que je veux obtenir : tableau de gauche = données de départ, tableau de droite = ce que je veux obtenir
Je précise que le nombre de colonnes et de lignes varient, ce n'est qu'un petit exemple (désolée je n'arrive pas à joindre de fichier, seulement des images).



Voici mon code qui bug et je n'arrive pas à savoir pourquoi.
Il plante au niveau de la première bouche et j'ai le message suivant qui apparaît :


Sub MiseEnFormeBDD()

Dim WsFeuille As Worksheet
Dim WsRestit As Worksheet
Set WsFeuille = Worksheets("Feuil1")
Set WsRestit = Worksheets("Restit")

'TRANSPOSITION DES DONNEES EN LIGNES
Dim a, b(), i As Long, j As Long, n As Long
a = WsFeuille.Range("a1").CurrentRegion.Value2
ReDim b(1 To UBound(a, 1), 1 To UBound(a, 1))

n = 1
b(n, 1) = a(1, 1): b(n, 2) = a(1, 2)
b(n, 3) = "Date"
b(n, 4) = "Données"

For j = 3 To UBound(a, 2)
For i = 2 To UBound(a, 1)
n = n + 1
b(n, 1) = a(i, 1): b(n, 2) = a(i, 2)
b(n, 3) = a(1, j)
b(n, 4) = a(i, j)
Next
Next
Application.ScreenUpdating = False
On Error Resume Next
Application.DisplayAlerts = False


'ANALYSE DES DONNEES DANS FEUILLE RESTIT

WsRestit.Cells.Delete

With WsRestit.Range("a1")
With .Resize(UBound(b, 1), UBound(b, 2))
.Value = b
.Font.Name = "calibri"
.Font.Size = 10
.BorderAround Weight:=xlThin
.Borders(xlInsideVertical).Weight = xlThin
.VerticalAlignment = xlCenter
With .Rows(1)
.BorderAround Weight:=xlThin
.Interior.ColorIndex = 43
.HorizontalAlignment = xlCenter
End With
.Columns.AutoFit
.Columns(7).NumberFormat = "mm/yyyy;@"
End With
End With

End Sub


Je vous remercie par avance pour votre aide.
Et j'espère avoir été claire.

Bonne journée à tous.
Amandine
Afficher la suite 

3 réponses

Messages postés
14606
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 juillet 2019
1156
0
Merci
Bonjour,

Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com

Allez sur ce site : http://cjoint.com
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...

ou
'mon partage
https://mon-partage.fr/
Commenter la réponse de f894009
Messages postés
18
Date d'inscription
vendredi 13 novembre 2015
Statut
Membre
Dernière intervention
12 juillet 2019
0
Merci
Voici mon fichier.
https://mon-partage.fr/f/lZ4sEXED/

Merci à toi pour l'astuce.

Amandine
f894009
Messages postés
14606
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 juillet 2019
1156 -
Re,



Juste un -1 sur ubound(a,2), format date sur C ald G et n=2 avant boucle for pour ne pas ecraser les titres
Pourquoi un tableau sur 9 colonnes !!!!!!!!!
Pour la suite (insert donnees 2019), vous dites si je dois continuer
Commenter la réponse de Amande42
Messages postés
18
Date d'inscription
vendredi 13 novembre 2015
Statut
Membre
Dernière intervention
12 juillet 2019
0
Merci
Merci f894009 pour ta réponse.

Bon je vais faire celle qui comprend rien mais j'ai essayé de modifier mon code en fonction de tes indications et je n'ai pas dû corriger au bon endroit.

Pour info, c'était un code que j'avais trouvé sur internet pour un précédent dossier, et quand j'essaie de l'actualiser pour ce cas-là, et ben ça ne veut pas marcher. Ce qui expliquer aussi sûrement le tableau final à 9 colonnes.

Merci pour ton retour.

Amandine
f894009
Messages postés
14606
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
18 juillet 2019
1156 -
Re,

Je vous arrange ca demain...
Commenter la réponse de Amande42