Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL pour MAC Recopie cellules via formule

chenenq

XLDnaute Nouveau
Bonjour,
J'ai plusieurs colonnes dans excel qui contiennent chacune un nombre différent de valeurs (cellules contenant un chiffre). Je souhaite sans passer par des copier-coller, que toutes les valeurs apparaissent les unes à la suite des autres dans une nouvelle colonne : valeurs de la colonne A puis celles de la colonne B ...
Une formule est elle adaptée ?
Merci de votre aide
cordialement
 
Solution
Voici le code

VB:
Sub concat()

For i = 2 To ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1

    derlignec = ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row + 1
    Cells(derlignec, 4).Value = Cells(i, 1).Value

Next i

For i = 2 To ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row + 1

    derlignec = ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row + 1
    Cells(derlignec, 4).Value = Cells(i, 2).Value

Next i

For i = 2 To ActiveSheet.Range("C" & Rows.Count).End(xlUp).Row + 1

    derlignec = ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row + 1
    Cells(derlignec, 4).Value = Cells(i, 3).Value

Next i

End Sub

Pour lancer la macro, il faut activer l'onglet développeur dans Fichier/Options/Personnaliser le ruban /...

chagatte

XLDnaute Nouveau
Voici le code

VB:
Sub concat()

For i = 2 To ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1

    derlignec = ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row + 1
    Cells(derlignec, 4).Value = Cells(i, 1).Value

Next i

For i = 2 To ActiveSheet.Range("B" & Rows.Count).End(xlUp).Row + 1

    derlignec = ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row + 1
    Cells(derlignec, 4).Value = Cells(i, 2).Value

Next i

For i = 2 To ActiveSheet.Range("C" & Rows.Count).End(xlUp).Row + 1

    derlignec = ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row + 1
    Cells(derlignec, 4).Value = Cells(i, 3).Value

Next i

End Sub

Pour lancer la macro, il faut activer l'onglet développeur dans Fichier/Options/Personnaliser le ruban / Cocher l'onglet développeur.

Puis retourner dans Excel et lancer la macro dans le menu Développeur / Macro / Executer la macro concat
 

chagatte

XLDnaute Nouveau
De rien, pour votre fichier réel, il suffit de copier coller la fonction

VB:
For i = 2 To ActiveSheet.Range("C" & Rows.Count).End(xlUp).Row + 1

    derlignec = ActiveSheet.Range("D" & Rows.Count).End(xlUp).Row + 1
    Cells(derlignec, 4).Value = Cells(i, 3).Value

Next i

autant de fois qu'il y a de colonnes et bien sur de modifier les références de la dernière colonne qui va accueillir la somme.

Bien à vous
 

soan

XLDnaute Barbatruc
Inactif
Bonjour @chenenq, chagatte,

ton fichier en retour, version n° 1 terminée.

fais Ctrl e ➯ travail effectué !


VB:
Option Explicit

Const colD% = 4 'colonne Destination = colonne D
'si dans ton fichier réel la dernière colonne est
'par exemple J, il suffit de remplacer 4 par 10 :
'Const colD% = 10 '(laisse le D de colD car c'est
'l'initiale de "Destination") ; y'a pas d'autre
'changement à faire : ce qui suit reste pareil !

Dim nlm&, lg2&, col%

Private Sub Job()
  Dim lg1&
  For lg1 = 2 To Cells(nlm, col).End(3).Row
    lg2 = lg2 + 1: Cells(lg2, colD) = Cells(lg1, col)
  Next lg1
End Sub

Sub concat()
  nlm = Rows.Count: lg2 = 1: Application.ScreenUpdating = 0
  For col = 1 To colD - 1: Job: Next col
End Sub

tu as écrit : « y compris pour plusieurs dizaines de milliers de lignes. »

aussi, dans mon post suivant, je vais mettre une autre version qui est
beaucoup plus rapide, car elle utilise la méthode des tableaux ; mais
essaye quand même cette première version.




@chagatte : le + 1 au bout de ta ligne derlignec = ... + 1 est utile et
nécessaire, mais pas le + 1 au bout de ta ligne For i = 2 To ... + 1

soan
 

Pièces jointes

  • test v1.xlsm
    14.9 KB · Affichages: 2

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…