VBA - Macro pour transposer un tableau colonnes en tableau lignes [Résolu/Fermé]

Signaler
Messages postés
25
Date d'inscription
vendredi 13 novembre 2015
Statut
Membre
Dernière intervention
7 août 2019
-
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
-
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

3 réponses

Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
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/
Messages postés
25
Date d'inscription
vendredi 13 novembre 2015
Statut
Membre
Dernière intervention
7 août 2019

Voici mon fichier.
https://mon-partage.fr/f/lZ4sEXED/

Merci à toi pour l'astuce.

Amandine
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
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
Messages postés
25
Date d'inscription
vendredi 13 novembre 2015
Statut
Membre
Dernière intervention
7 août 2019

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
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
Bonjour,

Vous avez inséré une colonne entre FRS et Indicateur, ce n'est pas une colonne mois supplementaire. donc panouille garantie.


Je modifie. Vous allez en faire d'autres de ce genre???
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
Re,

Fichier modifie pour colonne insere et cellules donnees vides:

https://mon-partage.fr/f/4wJmSdfi/
Messages postés
25
Date d'inscription
vendredi 13 novembre 2015
Statut
Membre
Dernière intervention
7 août 2019
>
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020

Merci f894009.
Je sais, on n'est pas aidé.
C'est pour ça que j'ai indiqué que j'avais rajouté une "colonne" fixe... Mes bidouilles sur les n° de colonnes dans Range n'ont pas suffi à me sortir de la panouille ;-)

Par contre, comment cela se fait-il que j'ai les mêmes données en colonne G (= en dehors du tableau final).

Encore un grand merci.
Messages postés
25
Date d'inscription
vendredi 13 novembre 2015
Statut
Membre
Dernière intervention
7 août 2019
>
Messages postés
25
Date d'inscription
vendredi 13 novembre 2015
Statut
Membre
Dernière intervention
7 août 2019

C'est tout bon.
Dans ton fichier réponse, il y avait des données hors tableau, dans mon fichier à moi, le code a marché impec et pas de données qui se baladent où ça ne devrait pas.
Un grand merci.
Normalement, je ne devrais plus être amenée à modifier ce bout de code :-)
Bonne soirée
Messages postés
15238
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
29 juin 2020
1 306
Re,
données hors tableau
Tout a fait, j'avais mis dans une colonne les donnees pour comparer vu qu'il pouvait y avoir des trous