[VBA] - Concaténer deux colonnes sans boucle For

Bonsoir,

J'ai besoin de concaténer deux colonnes pour que le reste de mon code puisse s'exécuter correctement.

Habituellement je passe pas une boucle for, mais en l'occurrence, j'ai 96 000 lignes et même après deux heures mon ordi ne parvient pas à terminer la tâche.

Je voulais savoir si vous avez une solution pour effectuer une concaténation de toutes les données présentes entre deux colonnes, de manière la plus rapide qui soit ?

Je ne pense pas qu'il soit nécessaire de proposer un exemple de document.

Il s'agirait simplement de transmettre un document dont deux colonnes sont remplies sur 100 000 lignes.

Je vais essayer de tester via la création d'une collection, mais je pose quand même la question au cas où ça ne donnerait rien de bon !

Bonne soirée !

Bonjour,

à tester,

Sub test()
Application.Calculation = xlManual
LastRw = Cells(Rows.Count, 1).End(xlUp).Row
Range("C2:C" & LastRw).FormulaLocal = "=CONCATENER(A2;B2)"
Application.Calculation = xlAutomatic
Range("C2:C" & LastRw) = Range("C2:C" & LastRw).Value
End Sub

re,

voici un autre exemple avec variable,

Sub Concatener_avec_variable()
Dim variable As String, t As String, LastRw As Long

variable = """ / """  'exemple avec une variable "espace / espace"
t = "=CONCATENER(A2;" & variable & ";B2)" ' texte de la formule, le numéro de ligne s'incrémentera automatiquement
LastRow = Cells(Rows.Count, 1).End(xlUp).Row ' derniere cellule de la colonne A

Application.Calculation = xlManual
Range("C2:C" & LastRow).FormulaLocal = t    'la formule de concanation est inscrite sur les cellules C2:Cx   x = LastRow
Application.Calculation = xlAutomatic

Range("C2:C" & LastRow) = Range("C2:C" & LastRow).Value  ' transformation des formules en valeur
End Sub

Bonsoir,

Merci pour votre aide

J'ai également testé une solution en utilisant des collections.

Je place le code ci-après, au cas où ça intéresse quelqu'un un jour. C'est avec deux boucles for, donc pas énormément en rapport avec ma requête initiale, mais sait-on jamais

Option Explicit
Dim tf As Worksheet
Dim lctf&, lrtf&, a&
Dim cib%, cib3%, i&
Dim tabl3 As Variant
Dim col2 As New Collection
Sub Concat()

Set tf = Worksheets("Table flore")
lrtf = tf.Cells(Rows.Count, 1).End(xlUp).row
lctf = tf.Cells(1, tf.Columns.Count).End(xlToLeft).Column

Set col2 = New Collection

With tf
    tabl3 = .Range("H1", "I" & lrtf)

    'création collection
    For cib3 = 1 To lctf
        If tf.Cells(1, cib3) = "LB_NOM" Then
            On Error Resume Next
                For i = LBound(tabl3, 1) To UBound(tabl3, 1)
                    If tabl3(i, 1) <> "" Then
                                col2.Add tabl3(i, 1) & " " & tabl3(i, 2) ', CStr(tabl3(i, 1))
                    End If
                Next i
        Exit For
        End If
    Next cib3
        On Error GoTo 0

    'export collection dans resultat
    If col2.Count > 0 Then
        For i = 2 To col2.Count
                .Cells(i, cib3) = col2(i)
        Next i
    End If
End With

End Sub

On peut également passer par PowerQuery quand les données sont importées depuis un autre document, ce qui est très rapide !

Bonne journée !

|ERREUR|

Rechercher des sujets similaires à "vba concatener deux colonnes boucle"