Basculement colonnes vers lignes particulier

Bonjour à toutes et à tous, je suis nouveau sur ce forum dédié à la pratique d’excel.

J’ai toujours réussi à m’en sortir d’une façon ou d’une autre lorsque j’avais un souci avec une feuille. Mais pas cette fois. Ainsi, je me demandais si des membres du forum pourraient m'apporter un petit coup de pouce.

Je souhaite effectuer une « permutation » de certaines colonnes en lignes. Cependant, ce n’est pas un simple basculement. Comme un exemple vaut mieux qu’un long discours, je mets ici le fichier de base (pin-blanctab-c.xlsx) et celui vers lequel je veux tendre (philippe-erable-rougetab-c.xlsx, feuille Erable_rougeTAB_C-Tableau). Je souhaite un classement par année, au sein de laquelle il y aura tous les échantillons présent dans cette année, pour ensuite passer à l'année suivante. Les données ne sont évidemment pas les mêmes mais les formats initiaux le sont. J'ai essayé avec l'add-in de Tableau, sans résultat. De même avec RDB Merge. Ce sont des données données de dendrochronologie (l'étude de l'age des arbres)
Si vous avec un quelconque conseil me permettant d'effectuer ce basculement, n'hésitez :-).

Merci à vous !

Martin

Bonjour

Si j'ai bien compris, une solution PowerQuery, intégré à Excel

Actualiser par Données, Actualiser tout si la source évolue

Ah oui, le résultat est super ! Je vais me renseigner sur PowerQuery, je te remercie !

Bonjour le fil, bonjour le forum,

Si j'ai moi aussi bien compris, une proposition VBA avec le code commenté ci-dessous :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim K As Integer 'déclare la variable K (incrément)
Dim TL() As Variant 'déclare la variable TL (Taleau des Lignes)

Set OS = Worksheets("Erable_rougeTAB_C") 'définit l'onglet source OS (à adapter a ton cas)
Set OD = Worksheets("Erable_rougeTAB_C-Tableau") 'définit l'onglet destination OD (à adapter a ton cas)
OD.Range("A1").CurrentRegion.Offset(1, 0).ClearContents 'efface les anciennes données de l'onglet destination
TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
K = 1 'initialise la variable K
For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeur (en partant de la seconde)
    For J = 2 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tableau des valeur (en partant de la seconde)
        ReDim Preserve TL(1 To 5, 1 To K) 'redmensionne le tableau des lignes TL (5 lignes K colonne)
        TL(1, K) = TV(I, 1) 'récupère l'année dans la ligne 1 de TL
        If TV(I, J) <> "" Then 'condition : si la donnée ligne I colonne J n'est pas vide
            TL(2, K) = TV(1, J) 'récupere dans la ligne 2 de TL la donné ligne 1 colonne J de TV
            TL(3, K) = TV(1, J) 'récupere dans la ligne 3 de TL la donné ligne 1 colonne J de TV
            TL(4, K) = TV(1, J) 'récupere dans la ligne 4 de TL la donné ligne 1 colonne J de TV
            TL(5, K) = TV(I, J) 'récupere dans la ligne 5 de TL la donné ligne I colonne J de TV
            K = K + 1 'incrémente K
        End If 'fin de la condition
    Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
'si K est supérieure à 1, renvoie dans la celluel A2 redimensionnée de l'onglet OD, le tableau TL transposé
If K > 1 Then OD.Range("A2").Resize(K - 1, 5).Value = Application.Transpose(TL)
End Sub

Merci à vous deux, mon problème semble être résolu.

Martin

Rechercher des sujets similaires à "basculement colonnes lignes particulier"