VBA - Macro pour transposer un tableau colonnes en tableau lignes

Résolu/Fermé
Amande42 Messages postés 25 Date d'inscription vendredi 13 novembre 2015 Statut Membre Dernière intervention 7 août 2019 - Modifié le 30 juil. 2019 à 09:05
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 - 7 août 2019 à 16:58
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 :


[/contents/446-fichier-sub 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
[/download/telecharger-34086571-redim 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
A voir également:

3 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
12 juil. 2019 à 11:12
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 : https://www.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/
0
Amande42 Messages postés 25 Date d'inscription vendredi 13 novembre 2015 Statut Membre Dernière intervention 7 août 2019
12 juil. 2019 à 11:39
Voici mon fichier.
https://mon-partage.fr/f/lZ4sEXED/

Merci à toi pour l'astuce.

Amandine
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
Modifié le 12 juil. 2019 à 12:08
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
0
Amande42 Messages postés 25 Date d'inscription vendredi 13 novembre 2015 Statut Membre Dernière intervention 7 août 2019
12 juil. 2019 à 16:56
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
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
12 juil. 2019 à 18:36
Re,

Je vous arrange ca demain...
0
Amande42 Messages postés 25 Date d'inscription vendredi 13 novembre 2015 Statut Membre Dernière intervention 7 août 2019 > f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024
29 juil. 2019 à 15:36
Bonjour f894009

Merci pour ton aide.
J'ai réessayé de modifier mon code mais décidément sans succès. Les vacances ne m'ont pas aidée à avoir un éclair de génie.
Je ne serais pas contre un petit coup de pouce.

Merci beaucoup à toi.

Bon après-midi.
Amandine
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
Modifié le 29 juil. 2019 à 16:40
Bonjour,

Pouvez remettre le fichier a dispo??

Le genie, c'est dans la lessive
0
Amande42 Messages postés 25 Date d'inscription vendredi 13 novembre 2015 Statut Membre Dernière intervention 7 août 2019 > f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024
30 juil. 2019 à 09:03
C'est donc ça ! Je n'ai pas acheté la bonne lessive !!

Voici le lien pour mon fichier :
https://mon-partage.fr/f/5SAPdbg5/

Merci pour ton aide.
Amandine
0
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
30 juil. 2019 à 11:15
Bonjour,

Je n'ai pas acheté la bonne lessive !!
Faut voir! Épithète qu'avec une lampe a huile(de coude) ca le ferait……

Je recupere le fichier et regarde la chose
0