Option Explicit
Const lignes = 900000
Sub testW()
Dim plage As Range, T As String, Tim#
Set plage = [A1].Resize(lignes, 3) ' preciser la plage ici (activesheet.usedrange pour tout la partie utilisée)
Tim = Timer
T = ConcatRange(plage, ";")
MsgBox "formule clipboard sur [A1].Resize(" & lignes & ", 3) :" & vbCrLf & Format(Timer - Tim, "#0.00 SEC") & vbCrLf & T
End Sub
Function ConcatRange(Rng, Optional separateur As String = ";", Optional chemin As String = "")
Dim T, clearall
With CreateObject("htmlfile")
clearall = .parentwindow.clipboardData.setData("Text", "") 'on vide le clipboard au cas ou il y aurait quelque chose
Rng.Copy 'on copy la plage tout simplement
'on recupere le texte de la plage dans le cliboard on fait un replace vbtab par le separateur en parametre injecté dans la fonction";" par defaut
T = Replace(Replace(.parentwindow.clipboardData.GetData("TEXT"), vbTab, separateur), vbCrLf, separateur & vbCrLf): End With
T = Replace(T, vbCrLf, ";")
Application.CutCopyMode = False 'on relache la plage copiée
ConcatRange = T
End Function