WOW !
Merci pour la rapidité de réponse et d'action !
Cela fonctionne parfaitement pour le fichier d'exemple, Je vais tenter d'intégrer la macro a mon fichier d'origine.
Merci aussi pour les explications détaillées a l'intérieur du code VBA. J'en apprendrais un peu comme ca : )
Je viens de faire la bascule vers mon fichier original.
Je me retrouve face a une erreur au moment d'exécuter la macro " Erreur d'exécution '6' Dépassement de capacité
Qui me renvoi au débogage sur la ligne
en rouge :
Sub Extraire()
Dim TabERP() As Variant
Dim TabFinal() As Variant
Dim TabRef() As Variant
Dim LastLine As Integer
Dim lig As Integer
Application.ScreenUpdating = False 'on désactive le refresh
With Sheets("References a integrer")
LastLine = .Range("A" & .Rows.Count).End(xlUp).Row 'numéro de ligne de la dernière cellule non vide de la colonne A
TabRef = .Range("A1:A" & LastLine).Value 'on récupère dans un tableau VBA les références à chercher
End With
With Sheets("ERP")
LastLine = .Range("A" & .Rows.Count).End(xlUp).Row 'numéro de ligne de la dernière cellule non vide de la colonne A
TabERP = .Range("A1:BC" & LastLine).Value 'on récupère dans un tableau VBA les références à chercher
NbCol = UBound(TabERP, 2) 'nombre de colonnes
TabEntete = .Range("A1:BC1").Value 'on récupère la ligne d'entete
End With
lig = 0 'initialisation
'à chaque ligne de l'ERP, on vérifie la présence de toutes les ref dans la colonne B
For i = LBound(TabERP, 1) + 1 To UBound(TabERP, 1) 'pour chaque ligne de l'ERP
For ref = LBound(TabRef, 1) + 1 To UBound(TabRef, 1) 'pour chaque ref
If TabERP(i, 2) = TabRef(ref, 1) Then 'si la ref est en colonne B
'on ajoute la ligne
lig = lig + 1
ReDim Preserve TabFinal(1 To NbCol, lig)
For j = 1 To NbCol 'on enregistre la ligne dans le tablau final
TabFinal(j, lig) = TabERP(i, j)
Next j
End If
Next ref
Next i
With Sheets("Feuil3") 'dans la feuille 3
.Cells.Clear 'on efface tout
.Range("A1").Resize(UBound(TabFinal, 2), UBound(TabFinal, 1)) = Application.WorksheetFunction.Transpose(TabFinal) 'on colle le tableau final
.Range("A1:BC1") = TabEntete 'on remet les entetes
End With
Application.ScreenUpdating = True
End Sub
Pour info, l'onglet ERP compte maintenant presque 161 000 lignes. peut etre en rapport pour le dépassement de capacité ?