Spinzi
XLDnaute Impliqué
Bonjour à tous,
je dois travailler sur une base de données plutôt grosse (200 000 lignes) et ramener des informations grâce à une formule matricielle.
la formule fonctionne mais sur 200 000 lignes, ça rame bcp et il me faut plusieurs heures pour mettre à jour les informations.
Aussi, malgré ma faible expérience en VBA, j'ai décidé de remplacer la formule matricielle par une formule intégrée et calculé dans un module grâce aux array.
Cependant, la formule ne me renvoie que des "#N/A" et je ne sais pas d'où vient le souci.
Je cherche à récupérer la date comptable (colonne H) pour les types de pièces "DZ" parmi les pièces de type "RV" (colonne I) et du numéro de pièce de rapprochement (colonne S) qui sont concaténé (colonne U) pour plus de simplicité dans le code VBA.
La formule à matérialiser au format VBA est la suivante :
Je souhaiterais un code dynamique (qui s'adapte au nombre de lignes d'où le "DerLigne") et rapide (d'où l'utilisation d'array - que je ne maitrise pas, code trouvé sur la toile et "adapté" à mon besoin ).
Vous trouverez le code en question ci dessous et le fichier en PJ (fichier originel contient 196 233 lignes) :
Merci d'avance de votre contribution,
Spinzi
je dois travailler sur une base de données plutôt grosse (200 000 lignes) et ramener des informations grâce à une formule matricielle.
la formule fonctionne mais sur 200 000 lignes, ça rame bcp et il me faut plusieurs heures pour mettre à jour les informations.
Aussi, malgré ma faible expérience en VBA, j'ai décidé de remplacer la formule matricielle par une formule intégrée et calculé dans un module grâce aux array.
Cependant, la formule ne me renvoie que des "#N/A" et je ne sais pas d'où vient le souci.
Je cherche à récupérer la date comptable (colonne H) pour les types de pièces "DZ" parmi les pièces de type "RV" (colonne I) et du numéro de pièce de rapprochement (colonne S) qui sont concaténé (colonne U) pour plus de simplicité dans le code VBA.
La formule à matérialiser au format VBA est la suivante :
Code:
=SI(ET(I3="RZ";S3<>"");INDEX($H$3:$H$196233;EQUIV("RZ"&S3;$I$3:$I$196233&$S$3:$S$196233;));"#N/A")
Je souhaiterais un code dynamique (qui s'adapte au nombre de lignes d'où le "DerLigne") et rapide (d'où l'utilisation d'array - que je ne maitrise pas, code trouvé sur la toile et "adapté" à mon besoin ).
Vous trouverez le code en question ci dessous et le fichier en PJ (fichier originel contient 196 233 lignes) :
Code:
Option Explicit
Sub Rapprochement()
Dim i As Long
Dim DerLigne As Long
Dim ARRAY_PLAGE_RESULTAT As Variant
Dim OBJET_PLAGE_RECHERCHE As Object
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = 0
DerLigne = Range("A" & Rows.Count).End(xlUp).Row
'[PLAGE_RESULTAT].Range(Cells(3, 22), Cells(DerLigne, 22)).ClearContents 'reset de la zone de r?sultat
ARRAY_PLAGE_RESULTAT = Range("A2:V" & DerLigne).Value
Set OBJET_PLAGE_RECHERCHE = Range("A2:U" & DerLigne)
For i = 3 To 3000 'UBound(ARRAY_PLAGE_RESULTAT, 1) remplacé par 3000 car trop long sinon
If ARRAY_PLAGE_RESULTAT(i, 9) = "DZ" Then
ARRAY_PLAGE_RESULTAT(i, 22) = Application.index(OBJET_PLAGE_RECHERCHE, Application.match(ARRAY_PLAGE_RESULTAT(i, 19) & "&" & "RV", OBJET_PLAGE_RECHERCHE.Columns(20), 0), 1)
End If
Next i
Range("A2:V" & DerLigne).Formula = ARRAY_PLAGE_RESULTAT
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = 1
End Sub
Merci d'avance de votre contribution,
Spinzi
Pièces jointes
Dernière édition: