Copier des valeurs en ligne en colonne

Résolu
Mischoupi -  
 Mischoupi -
Bonjour,

Je vous donne un exemple :
Actuellement, j'ai cela sous une feuille excel :
Colonne A Colonne B
A 1
A 1
A 1A
A 1 A
B 2
B 3
B 6
C 0
C 0

Au final, j'aimerai

A 1 1 1A 1 A
B 2 3 6
C 0 0

J'ai de nombreuses lignes, pouvez-vous m'aider à automatiser cette tâche

Merci

3 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    effectivement je n'y avais pas pensé :o/

    en pièce jointe classeur modifié
    https://www.cjoint.com/?3Dcn3bqBwzu

    peux tu me dire le temps d'exécution sur tes 10000 lignes? d'avance merci
    1
    1. Mischoupi
       
      Salut Michel, je te dis ça demain. N tout cas grand merci
      0
  2. Pitu Messages postés 1460 Statut Contributeur 125
     
    Bonjour,

    Sur une seconde feuille, tu peux, sur la ligne 1 rentrer la formule matricielle suivante : =TRANSPOSE(Feuil1!A1:A100)
    Attention : à rentrer sous forme matricielle :
    Sélection de la ligne 1 entière
    Rentrer la formule =TRANSPOSE(Feuil1!A1:A100)
    Valider par Ctrl + Maj + Entrée

    Et tu répètes cela pour chacune de tes colonnes

    Seul bémol : il te faut définir la limite (ici positionnée à 100).
    => Mettre une valeur suffisamment grande.
    0
    1. Mischoupi
       
      Merci pour cette réponse, le souci, c'est que j'ai 2 colonnes. Comment fait-on pour envoyer un exemple en fichier?
      0
    2. Pitu Messages postés 1460 Statut Contributeur 125
       
      Tu peux joindre un lien www.cjoint.com

      (mais je ne pense pas y avoir accès à cause des filtres de l'entreprise dont j'utilise la connexion)
      0
    3. Mischoupi
       
      En fait dans la colonne A, j'ai les lettres
      dans les colonnes B..... , j'ai les chiffres.

      MErci et encore merci
      0
    4. Mischoupi
       
      RE,

      Je viens d'essayer ta formule et cela ne fonctionne pas.
      0
    5. Pitu Messages postés 1460 Statut Contributeur 125
       
      Cela dit, tu précises que tu as 2 colonnes, mais dans ton 1er exemple, il semble y en avoir 3.
      Qu'en est-il exactement ?

      Quoi qu'il en soit :
      - si tu as 2 colonnes sur ta feuille 1 (dont le nom est "Feuil1")
      - que ce sont les colonnes A et B
      - que la plus longue de tes colonnes contient 100 lignes utiles

      => Dans ta feuille 2, voila ce que tu dois faire :
      1/ tu sélectionnes la ligne 1
      2/ tu rentres la formule =TRANSPOSE(Feuil1!A1:A100) dans la barre de formules
      3/ tu valides par la combinaison [Ctrl] [Maj] [Entrée]
      4/ tu sélectionnes la ligne 2
      5/ tu rentres la formule =TRANSPOSE(Feuil1!B1:B100) dans la barre de formules
      6/ tu valides par la combinaison [Ctrl] [Maj] [Entrée]

      Et tu viens ensuite nous confirmer que ça marche ...
      0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    Excusez l'incruste, mais en ce dimanche c'était çà ou le scrabble avec belle-maman

    un petit code
    condition: les séries (A,B,Z...)doivent être regroupées par occurence

    Option Explicit 
    Const source As String = "feuil1" 
    Const cible As String = "feuil3" 
    
    Sub transposer() 
    Dim T_caract(), Fin As Integer, Lig_a As Integer, Lig_b As Integer, Ref As String 
    Dim Lig_c As Integer 
    Dim Start As Single 
    
    'initialisations 
    Start = Timer 
    Application.ScreenUpdating = False 
    Sheets(cible).Range("A2:XFD10000").Clear 
    Lig_c = 2 
    
    With Sheets(source) 
         'collecte le couple série lignes 
         Fin = .Columns("A").Find("*", , , , , xlPrevious).Row 
         For Lig_a = 2 To Fin 
              Ref = .Cells(Lig_a, "A") 
              Lig_b = .Columns("A").Find(Ref, , , , , xlPrevious).Row 
               
              'restitution de la série des caract sur une ligne 
              T_caract = Application.Transpose(.Range(.Cells(Lig_a, "B"), .Cells(Lig_b, "B")).Value) 
              With Sheets(cible) 
                   .Cells(Lig_c, "A") = Ref 
                   .Cells(Lig_c, "B").Resize(1, UBound(T_caract)) = T_caract 
               End With 
                
               'incrémentation 
               Lig_c = Lig_c + 1 
               Lig_a = Lig_b 
         Next 
    End With 
    
    'présentation résultats 
    Sheets(cible).Activate 
    Application.ScreenUpdating = True 
    MsgBox "Transposition effectuée en: " & Timer - Start & " sec." 
    End Sub 
    

    Michel
    0
    1. Mischoupi
       
      Bonjour, j'essaie demain et je vous dis. Merci
      0
    2. Pitu Messages postés 1460 Statut Contributeur 125
       
      A ben si michel_m s'y colle, mon meilleur conseil sera ... de suivre le sien !
      (pour info, j'étais parti sur une solution sans macro ni VBA. Une usine à gaz, quoi !)
      0
    3. mischoupi
       
      Bonjour,
      La macro de Michel fonctionne très bien sauf dans le cas où j'ai une seule occurence en colonne A. Que faut-il que je modifie pour que ca marche
      0
    4. Mischoupi
       
      Bjr Michel, avec plusieurs occurrences DS la colonne À, la transposition à dure 39s
      0
    5. Mischoupi
       
      Merci à tous....
      0