Aide Macro - mettre données présentées en ligne en colonne

Bonjour,

J’ai pris la décision de commencer à apprendre le VBA pendant le confinement afin d’automatiser des tâches Excel que je fais régulièrement et qui me font perdre un temps de dingue.

Cependant, j’ai peut-être été trop ambitieux, je n’arrive pas à réaliser une macro qui réalise ce que je veux faire.

Cette macro consiste, à partir d’extractions de données disposées en lignes, de transposer celles-ci en colonnes.

J’ai réfléchi à la méthodologie, il faudrait que la macro réalise les tâches suivantes :

  • On renseigne un paramètre de boucle (toujours identique) qui indiquera quand passer à la ligne suivante ;
  • On renseigne le nom du paramètre situé dans la 1ere cellule sous mon paramètre de boucle et qui deviendra mon intitulé de
ligne ;

- Tous les intitulés situés sous la 1ere cellule devront se disposer en colonne et renseigner les valeurs des extractions brutes.

Pour cela, un autre onglet renseigne tous les intitulés nécessaires (les doublons auront ainsi été retirés) ainsi que le nom de

la colonne où aller chercher la valeur dans l’extraction brute.

Vous trouverez ci-joint un fichier excel qui illustre ce que je souhaite réaliser.

19exemple.xlsx (18.20 Ko)

L’onglet ‘données illustre le type d’extractions dont je dispose.

L’onglet ‘intitul à mettre en col renseigne tous les intitulés qui me sont nécessaires ainsi que la colonne où aller chercher la valeur dans l’extraction brute

L’onglet ‘rendu illustre le résultat final que je souhaite obtenir.

Si vous pouviez me donner un coup de pouce je vous en serais extrêmement reconnaissant.

Mes extractions brutes contiennent des dizaines de millier de lignes et je passe des heures à mettre cela en forme.

Je vous prie de m’excuser si je ne suis pas assez clair, j’essaierai de vous apporter des précisions si l’un de vous peut m'apporter ses lumières.

Néanmoins, si cela semble trop complexe, je vous remercie malgré tout pour le temps qui vous aurez pris à lire ma requête et pour la réflexion que vous aurez pu avoir.

Une très bonne journée à vous.

bonjour,

une proposition

Sub aargh()
Dim wsd As Worksheet
Dim wsr As Worksheet
Dim wsi As Worksheet
Dim dli&, dld&, dlr&, i&, dcr&
Dim dictcol As Object, dictrendu As Object, v$

    Set wsd = Sheets("données")
    dld = wsd.Cells(Rows.Count, 1).End(xlUp).Row
    Set wsi = Sheets("intitul à mettre en col")
    With wsi
        dli = .Cells(Rows.Count, 1).End(xlUp).Row
        Set dictcol = CreateObject("scripting.dictionary")
        For i = 2 To dli
            dictcol(.Cells(i, 1).Value) = .Cells(i, 2)
        Next i
    End With
    Set wsr = Sheets("rendu")
    dcr = wsr.Cells(1, Columns.Count).End(xlToLeft).Column
    Set dictrendu = CreateObject("scripting.dictionary")
    For i = 1 To dcr
        dictrendu(wsr.Cells(1, i).Value) = i
    Next i
    dlr = 1
    i = 1
    Do While i <= dld
        v = wsd.Cells(i, 1)
        If UCase(v) = "PAGE" Then
            dlr = dlr + 1
            i = i + 1
            wsr.Cells(dlr, 1) = wsd.Cells(i, 1)
            i = i + 1
        Else
            wsr.Cells(dlr, dictrendu(v)) = wsd.Cells(i, dictcol(v))
            i = i + 1
        End If
    Loop
End Sub
11denver.xlsm (27.02 Ko)

Bonjour h2so4 ,

D'abord mille mercis pour ton travail. C'est presque parfait !

J'ai fait un test et la macro rencontre un problème lorsque qu'il y a une ligne vide dans mon tableau de données.

le débogage mets en évidence la ligne :

"wsr.Cells(dlr, dictrendu(v)) = wsd.Cells(i, dictcol(v))".

Dernière chose qui serait un petit bonus pour moi, mais j'ai presque honte de le demander, la macro fonctionne si dans l'onglet rendu je renseigne les intitulés de colonnes. Est ce possible que ça se remplisse automatiquement à partir de l'onglet 'intitul à mettre en col ?

Merci encore H2so4 pour ton temps.

Denver

bonjour,

voici une adaptation

15denver.xlsm (28.66 Ko)

Merci pour ton retour,

j'ai eu le temps de faire des tests (fichier joint).

9test-macro.xlsm (907.96 Ko)

mes lignes ne se créent pas

Mon paramètre s'appelle "boucle" suivi d'un matricule.

Bonsoir,

mes lignes ne se créent pas

Mon paramètre s'appelle "boucle" suivi d'un matricule.

Je ne sais pas comment j'aurais pu le deviner . Dans l'exemple que tu as mis, c'est "page". Il suffit donc de remplacer "PAGE" par "BOUCLE" dans le code fourni.

h2so4,

Ca marche ! Merci encore. C'est super !

Une très belle journée.

Rechercher des sujets similaires à "aide macro mettre donnees presentees ligne colonne"