Transposer avancé

Bonjour tous le monde,
Merci beaucoup pour ceux qui prenne le temps de lire et d'aider aux débutants comme moi !

J'ai des données (fictives) de luminosité pour chaque ville dans le temps :

image

je souhaites avoir toutes les années dans une même colonne année tout en conservant les informations de chaque villes. Cela va donc dupliquer les coordonnées de ma ville 4 fois pour chaque année (1999,2000,2001,2002). Je sais utiliser la fonction transposer mais je n'arrive pas à dupliquer les informations de ma ville en même temps, ceci est un exemple mais j'ai environ 5000 données à traiter donc impossible de le faire à la main. J'ai regardé plusieurs tutoriels mais ce n'est pas facile de trouver les bons mots clés pour ce genre de requête... Je cherche à avoir un résultat similaire à ça donc :

image

J'utilise ensuite un logiciel de géographie qui va me faire apparaitre les points dans le temps d'où cette nécessité d'avoir un champ "année" et les informations qui conviennent. J'ai mis mon exemple en pièce jointe si ça peut faciliter la réflexion !

Merci beaucoup si vous pouvez m'aider !

Bonjour,

Une proposition de macro à adapter :

Sub RéorgaData()

Dim Lig As Long, Lig2 As Long, Col As Integer

Lig2 = 1: Application.Calculation = xlCalculationManual
With Sheets("Feuil1") 'Tout ce qui commence par un "." se rapporte à cette feuille
    For Lig = 2 To .Range("A" & Rows.Count).End(xlUp).Row 'Boucle sur les lignes
        For Col = 4 To .Cells(1, Columns.Count).End(xlToLeft).Column 'Boucle sur les années
            Lig2 = Lig2 + 1 'Compteur ligne de destination
            Sheets(2).Range("A" & Lig2) = .Range("A" & Lig) 'Report Ville / La feuille de destination est la 2ème feuille du classeur
            Sheets(2).Range("B" & Lig2) = .Range("B" & Lig) 'Report coord X
            Sheets(2).Range("C" & Lig2) = .Range("C" & Lig) 'Report coord Y
            Sheets(2).Range("D" & Lig2) = .Cells(1, Col) 'Report année
            Sheets(2).Range("E" & Lig2) = .Cells(Lig, Col) 'Report luminosité
        Next Col
    Next Lig
End With
Application.Calculation = xlCalculationAutomatic

End Sub

Le code est à coller dans un module standard de l'éditeur VBA (ALT + F11). Il s’exécute manuellement depuis l'éditeur ou via l'ajout d'un bouton sur la feuille. Le fichier est à enregistrer au format .xlsm.

Bonjour

Edit : oups Pedro22 vous a répondu. Je n'avais pas rafraichi

Cordialement

Hello a tous,

Une proposition avec Power Query

Tu ajoutes/modifies tes donnes dans la feuille Donnees

Puis tu vas sur la feuille Tableau1, tu cliques droit sur une cellule du tableau et tu cliques sur Actualiser

Bonjour,

Merci beaucoup à vous 3, la technique VBA a très bien fonctionnée en modifiant mon nombre de colonne, c'était très intéressant en tout cas de connaitre ces fonctionnalités et de comprendre le fonctionnement du code. Je n'ai pas eu l'occasion de tester Power mais je vais tester !

Merci encore et bonne soirée,

Cordialement

Re

Cordialement

Rechercher des sujets similaires à "transposer avance"