Transposer les données des colonnes sur une seule colonne

Amigo

XLDnaute Occasionnel
Bonjour le Forum,
je viens vers vous pour m'éclairer à résoudre un problème.
j'ai des données qui se trouvent sur plusieurs colonnes et je souhaite les retrouver sur une seule colonne avec une continuité. Quelque part une transposition de chaque ligne dans une même colonne. Voir fichier ci-joint.
N.B. : les colonnes et les lignes peuvent variés
Cordialement
Amigo
 

Pièces jointes

  • Amigo.xls
    29.5 KB · Affichages: 51
  • Amigo.xls
    29.5 KB · Affichages: 45
  • Amigo.xls
    29.5 KB · Affichages: 54
Dernière édition:

Matheop

XLDnaute Occasionnel
Re : Transposer les données des colonnes sur une seule colonne

Hello Amigo,

Je te propose la macro suivante qui permet - je l'espère - de répondre à ton besoin.

Code:
Sub macroTransposition()

    'activation de la feuille 1 (celle contenant les données)
    Sheets(1).Activate
    'déclaration des variables utilisées
    Dim nbLignes As Integer
    Dim nbColonnes As Integer
    Dim compteur As Integer
    'initialisation du compteur
    compteur = 0
    'récupération du nombre de lignes non vides
    'hypothèse : la colonne B contient le nombre max de lignes à transposer
    nbLignes = Sheets(1).Range("B65536").End(xlUp).Row

    'boucle allant de 3 à ce nombre de lignes non vides
    'hypothèse : les données utiles (pas les en-têtes) commencent à la ligne 3
    For x = 3 To nbLignes
     'récupération du nombre de colonnes non vides pour cette ligne
     nbColonnes = Sheets(1).Cells(x, 256).End(xlToLeft).Column
     'boucle allant de 2 à ce nombre de colonnes non vides
     'hypothèse : les données utiles (pas les en-têtes) commencent à la colonne 2
     For y = 2 To nbColonnes
      'remplissage de la cellule de réception et décalage d'une cellule vers le bas pour accueillir la valeur suivante
      Sheets(1).Range("Z3").Offset(compteur, 0).Value = Sheets(1).Cells(x, y).Value
      'incrémentation du compteur permettant le décalage d'un cran vers le bas à chaque passage dans la double boucle
      compteur = compteur + 1
     Next y
    Next x

End Sub
En théorie cela devrait fonctionner, reste à savoir si c'est ce que tu souhaitais. Je reste disponible pour toute demande d'éclaircissement ou autre. J'ai pris quelques hypothèses en considération et je stocke la transposition dans la colonne Z (en partant de la ligne 3).

Cordialement, Mat'
 
Dernière édition:

laetitia90

XLDnaute Barbatruc
Re : Transposer les données des colonnes sur une seule colonne

bonjour Amigo

si tu as pas trop de lignes on peut faire comme cela.... exemple a adapter

Code:
 Sub es()
 Dim c As Range
 For Each c In Range("b3:h" & Cells(Rows.Count, 3).End(xlUp).Row)
 Range("j65536").End(xlUp)(2) = c
 Next
End Sub

ps bonjour Matichoux
 

Amigo

XLDnaute Occasionnel
Re : Transposer les données des colonnes sur une seule colonne

Bonjour Laetitia90, Matichoux et le Forum
Merci pour vos réponses.
Laetitia votre Macro fonctionne très bien merci beaucoup
Matichoux le résultat est décalé voir fichier joint. Merci beaucoup
Cordialement
Amigo
 

Pièces jointes

  • Amigo.xls
    58 KB · Affichages: 50
  • Amigo.xls
    58 KB · Affichages: 41
  • Amigo.xls
    58 KB · Affichages: 45
Dernière édition:

Jocelyn

XLDnaute Barbatruc
Re : Transposer les données des colonnes sur une seule colonne

Bonjour le Forum,
Bonjour Amigo, Matichoux, Latetitia90,

Après ces très belles démonstrations par macro (hum hum je suis jaloux, je suis une bille en macro) une solution par formule DECALER() juste pour le fun

Cordialement
 

Pièces jointes

  • Amigo-1.xls
    34.5 KB · Affichages: 47

Matheop

XLDnaute Occasionnel
Re : Transposer les données des colonnes sur une seule colonne

Hello laetitia90, Jocelyn (et Amigo)

En ce qui concerne ma macro je procède ainsi dans la mesure où je partais du principe que tu n'avais pas forcément le même nombre de colonnes remplies pour chaque ligne.
Je ne sais pas si tu as exécuté ma macro après celle de laetitia90 mais si c'est le cas, il est normal que cela décale les résultats : ta dernière cellule non vide est la colonne H, la colonne I est vide et tu stockes le résultat de la macro de laetitia90 en J (donc mon code considère que la dernière colonne non vide est J ce qui provoque le décalage). Pour remédier à ce problème dans mon code il suffit de remplacer nbColonnes = Sheets(1).Cells(x, 256).End(xlToLeft).Column par nbColonnes = Sheets(1).Cells(x, 9).End(xlToLeft).Column par exemple (9 correspond à la colonne I). Si ce n'est pas le cas alors ce n'est pas normal et je tâcherai de comprendre pourquoi.

(Sinon il est vrai que la formule DECALER est plutôt sympathique)
 

Amigo

XLDnaute Occasionnel
Re : Transposer les données des colonnes sur une seule colonne

Bonjour Laetitia90, Matichoux, Jocelyn et le Forum
Merci à vous tous pour vos réponces.
Matichoux, je suis désolé pour ce désagrement. effectivement j'ai exécuté votre Macro après celle de Laetitia90. en effectuant le changement que vous m'aviez proposé, ca fontionne à merveille. Merci encore
Jocelyn, merci beaucoup pour votre formule.
Cordialement
Amigo
 

Matheop

XLDnaute Occasionnel
Re : Transposer les données des colonnes sur une seule colonne

Il n'y a pas de désagrément, juste le fait que quand je l'avais testé de mon côté cela fonctionnait ; d'où ma surprise que cela provoque un tel décalage. :p
(j'aurais pu - il est vrai - faire une condition qui ne prend que les cellules remplies m'enfin bon...)

Bonne journée, à une prochaine fois.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87