Excel - Copier des lignes 2 à 2 dans colonne

Bonjour,

Je rencontre un petit probléme. Je dispose de données dans 2 colonnes distinstes et je voudrais copier l'ensemble de ces données dans une méme colonne mais en intercallant les valeurs des 2 colonnes d'origines.
Ci dessous un exemple de la macro que j'ai pu réaliser en enregistrement directement le mode opératoire:

Range("L2").Select
Selection.Copy
Range("N2").Select
ActiveSheet.Paste Link:=True
Range("M2").Select
Application.CutCopyMode = False
Selection.Copy
Range("N3").Select
ActiveSheet.Paste Link:=True
Range("L3").Select
Application.CutCopyMode = False
Selection.Copy
Range("N4").Select
ActiveSheet.Paste Link:=True
Range("M3").Select
Application.CutCopyMode = False
Selection.Copy
Range("N5").Select
ActiveSheet.Paste Link:=True
Range("L4").Select
Application.CutCopyMode = False
Selection.Copy
Range("N6").Select
ActiveSheet.Paste Link:=True
Range("M4").Select
Application.CutCopyMode = False
Selection.Copy
Range("N7").Select
ActiveSheet.Paste Link:=True
Range("L5").Select
Application.CutCopyMode = False
Selection.Copy
Range("N8").Select
ActiveSheet.Paste Link:=True
Range("M5").Select
Application.CutCopyMode = False
Selection.Copy
Range("N9").Select
ActiveSheet.Paste Link:=True
Range("L6").Select
Application.CutCopyMode = False
Selection.Copy
Range("N10").Select
ActiveSheet.Paste Link:=True
Range("M6").Select
Application.CutCopyMode = False
Selection.Copy
Range("N11").Select
ActiveSheet.Paste Link:=True
Range("L7").Select
Application.CutCopyMode = False
Selection.Copy

Ceci étant à réaliser pour un nombre infini de valeurs.

Est ce que quelqu'un aurait une petite idée de la macro à réaliser?

Emilie.

11 réponses

  1. Contributeur
    et voilà une macro
    Option Base 1 
    Sub unsurdeux() 
    Dim tablo 
    Dim derlig As Long, cptr as long, cptr_tablo as long
    
    derlig = Range("L65536").End(xlUp).Row 
    
    ReDim tablo(derlig * 2 - 2) 
    cptr_tablo = 1 
    For cptr = 2 To derlig 
        tablo(cptr_tablo) = Cells(cptr, 12) 
        cptr_tablo = cptr_tablo + 1 
        tablo(cptr_tablo) = Cells(cptr, 13) 
        cptr_tablo = cptr_tablo + 1 
    Next 
    Application.ScreenUpdating = False 
    Range("N2").Resize(UBound(tablo), 1) = Application.Transpose(tablo) 
    End Sub 
    

    :-x
    1
    1. Contributeur
      je n'avais pas vu ton changement de sujet (pas très sympa comme procédé)
      0
    2. Contributeur
      j'ai rien dit, excuse moi (pas moyen de virer ou d"annuler mon commentaire)
      0
    3. Modérateur
      je peux le faire pour toi si tu le veux.
      0
    4. Mais non, c'est pas grave....
      Merci pour vos réponses.
      0
  2. Modérateur
    Bonjour,
    Les colonnes L et M ont elles le même nombre de lignes?
    0
    1. Oui, les colonnes M et L ont le méme nombre de ligne.
      0
      1. Modérateur
        Alors :
        Prends soin de mettre un nom de champ en N1 et utilise ce code :
        Sub copie_L_et_M_en_N()
        Dim derlig, i As Integer
        derlig = Range("L65536").End(xlUp).Row
        For i = 2 To derlig
        Cells(i, 12).Copy Range("N65536").End(xlUp).Offset(1, 0)
        Cells(i, 13).Copy Range("N65536").End(xlUp).Offset(1, 0)
        Next
        End Sub
        0
        1. Quand tu me dis de mettre un nom de champ en N1 tu veux dire quoi?
          0
          1. Contributeur
            nombre infini? 500,1000,100000,100000000000.....?

            en attendant, par formule en N2
            heu... un bug, je reviens

            et tu double-clique sur la poignée d'implémentation (carré noir en bas à droite de N2)

            mais si tu tiens à une macro, y'en a pour 5 minutes.... donc, tu dis
            :-x
            0
            1. En appliquant la formule DECALER que tu viens de me donner cela ne fonctionne pas car il ne m'affiche que les données de la colonne L or dans ma colonne N je souhaiterai les données de la colonne L et M .

              Peut étre qu'un macro serait plus judicieuse. Je sais pas trop car je n'y connais pas grand chose en macro.....

              Nombre infini : 20 000 valeurs maximum dans les colonnes L et M.
              0
              1. Modérateur
                Ah oui 20 000 valeurs quand même...
                Mon petit code risque d'être long...
                Par nom de champ en N1 je voulais juste te dire de ne pas laisser N1 vide... Mets un titre quoi.
                Pour la macro, attendons plutôt la solution de michel_m (que je salue au passage) qui te proposera de toutes manières quelque chose de plus rapide que ma première option.
                0
              2. Ok, merci quand méme.
                0
            2. Voici un autre exemple avec les données en colonne A et B et en colonne C les cellules copier
              A B C
              Segments Prof Macro
              1 3 1
              3 3 3
              2 4 3
              4 5 3
              6 6 2
              5 8 4
              4
              5
              6
              6
              5
              8

              Et voici la macro enregistrée :
              Range("A2").Select
              Selection.Copy
              Range("C2").Select
              ActiveSheet.Paste Link:=True
              Range("B2").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C3").Select
              ActiveSheet.Paste Link:=True
              Range("A3").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C4").Select
              ActiveSheet.Paste Link:=True
              Range("B3").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C5").Select
              ActiveSheet.Paste Link:=True
              Range("A4").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C6").Select
              ActiveSheet.Paste Link:=True
              Range("B4").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C7").Select
              ActiveSheet.Paste Link:=True
              Range("A5").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C8").Select
              ActiveSheet.Paste Link:=True
              Range("B5").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C9").Select
              ActiveSheet.Paste Link:=True
              Range("A6").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C10").Select
              ActiveSheet.Paste Link:=True
              Range("B6").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C11").Select
              ActiveSheet.Paste Link:=True
              Range("A7").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C12").Select
              ActiveSheet.Paste Link:=True
              Range("B7").Select
              Application.CutCopyMode = False
              Selection.Copy
              Range("C13").Select
              ActiveSheet.Paste Link:=True
              Range("C25").Select

              Sachant qu'il y a bien evidemment X valeurs dans A et B comme dans L et M....

              Emilie.
              0
              1. Ah, non petit beug l'exempl est le suivant :
                Segments Prof Macro
                1 3 1
                3 3 3
                2 4 3
                4 5 3
                6 6 2
                5 8 4
                4
                5
                6
                6
                5
                8
                0
                1. Bon toujours beug, ne pas en tenir compte...
                  0
                  1. Non mais c'était juste pour donner un autre exemple avec moins de valeur pour que ma demande soit plus compréhensible.
                    Mais la Macro fonctionne trés bien donc l'exemple supplémentaire est inutile.
                    Merci pour ton aide et bonne fin de journée.

                    Emilie.
                    0