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 /...

soan

XLDnaute Barbatruc
Inactif
@chenenq, @chagatte,

voici la version 2 terminée, avec méthode des tableaux.

fais Ctrl e ➯ travail fait encore plus rapidement ! 😊


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 T, n&
  n = Cells(nlm, col).End(3).Row: If n = 1 Then Exit Sub
  n = n - 1: T = Cells(2, col).Resize(n)
  Cells(lg2, colD).Resize(n) = T: lg2 = lg2 + n
End Sub

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

soan
 

Pièces jointes

  • test v2.xlsm
    14.9 KB · Affichages: 6

Staple1600

XLDnaute Barbatruc
Bonjour le fil

[recyclons du code du printemps 2020]
Issu d'une de mes réponses dans un fil de mars
Permets de concaténer plusieurs colonnes
VB:
Function MultiConcatC(vArr As Variant, Optional Séparateur As String = ";") As String
Dim j As Variant
If IsArray(vArr) Or TypeName(vArr) = "Range" Then
  For Each j In vArr
    If MultiConcatC = "" Then
    MultiConcatC = j
    ElseIf j <> "" Then
    MultiConcatC = MultiConcatC & Séparateur & j
    End If
    Next j
  Else
MultiConcatC = CStr(vArr)
End If
End Function
Exemple d'utilisation
Saisir en C1
=MultiConcatC(A1:B18)
[/recyclons du code du printemps 2020]

NB: Je crains hélas que les MACistes auront un petit souci.
Souci que les PCistes sous Windows n'auront pas
 

Staple1600

XLDnaute Barbatruc
Re

Toujours issu de ma recyclerie
Une fonction plus courte (mais pour une seule colonne)
VB:
Function Concat(ByVal Rng As Range)
'Pour concaténer une seule colonne (avec moins de 65536 lignes)
Concat = Join(Application.Transpose(Rng.Value), ";")
End Function
Donc , on saisira: =Concat(A1:A18)

PS: Toujours le même écueil pour les MACistes.
 

Discussions similaires

Réponses
9
Affichages
185

Statistiques des forums

Discussions
312 288
Messages
2 086 832
Membres
103 399
dernier inscrit
Tassiou