Justement, 3 minutes c'est le temps que prennent les autres procédures, qui utilisent des tableaux.
En réalité, je ne suis même pas sur qu'Excel parvienne à finir cette tâche en bouclant sur les données (mon dernier test avait pris 7H00).
J'ai mis à jour le code que vous avez proposé pour qu'il réalise exactement ce que j'essayais de faire car certaines lignes n'étaient pas complétées :
Sub REMPLISSAGE()
Dim x$, a&, y&, lrre&, lcre&, nc As Byte, nvtx As Byte, nv As Byte, b%, c%, d%, e%, rng1 as range
With Sheets("Resultat")
lrre = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
lcre = .UsedRange.Columns.Count - 1
nvtx = .Range("1:1").Find("NOM_VALIDE_TAXREF", LookIn:=xlValues, Lookat:=xlWhole).Column
nc = .Range("1:1").Find("NOM_COMPLET_tmp", LookIn:=xlValues, Lookat:=xlWhole).Column
nv = .Range("1:1").Find("NOM_VALIDE", LookIn:=xlValues, Lookat:=xlWhole).Column
For a = 3 To lrre
c = 0
If .Cells(a, nc) = "" Then
c = a
For b = a To 2 Step -1
If .Cells(b, nvtx) = .Cells(b, nc) And .Cells(b, nvtx) = .Cells(b, nv) Then
Set rng1 = .Cells(b, nc).Resize(, lcre - nc): Exit For
End If
Next b
e = a - 1
rng1.Copy Destination:=.Cells(c, nc)
End If
1 Next a
End With
End Sub
Je vais m'amuser à le lancer sur les 180 000 lignes de mon document et voir ce qu'il advient !
Edit : Je ne sais pas comment coller une ligne dans une plage de données ; si je trouve, le code peut être amélioré en bouclant sur les lignes vides
For d = a To lrre
If .Cells(d, nc) = "" Then: e = e + 1
If .Cells(d, nc) <> "" Then: Exit For
Next d
Et en collant la bonne ligne dans le range qui correspond au cellules vides à remplir.
A plus tard.