Recherchev 2 critères dont 1 approximatif (date <=)
titeufdu89 -
Bonjour;
Je recherche une solution efficace pour réaliser une recherchev à deux critères :
- 1er critère (exactitude) : code article (numérique)
- 2ème critère (approximatif) : date de commande (numérique au format aaaammjj)
Premier onglet "Réception" :
- date de livraison en colonne A
- code article en colonne C
Second onglet "Prix achat", filtré par code article puis par date d'application du plus récent au plus ancien.
- code article en colonne A
- date de livraison en colonne C
- prix d'achat en colonne D
Mon objectif : trouver le prix de chaque article en fonction de leur jour de livraison.
Exemple : Rechercher dans "prix d'achat" colonne "A" le code article "Réception" "C2" puis dans "prix d'achat" colonne "C" une date d'application inférieure ou égale à la date de livraison contenue dans "Réception" "A2" et renvoyer le prix d'achat contenu dans la colonne "D" dans "Réception" "I2"
J'ai réalisé la macro ci-dessous qui fonctionne parfaitement mais très longue à l'exécution. Environ 13min pour traiter 8'000 lignes et il s'agit que d'un test, les fichiers définitifs tourneront autour des 40'000 lignes.
'Ajoute prix cession unitaire
For Lig = 2 To derLoc
code = ShRec.Cells(Lig, RecColArt) * 1
Set foundcell = ShPx.Columns(PxColArt).Find(what:=code, lookat:=xlWhole)
If Not foundcell Is Nothing Then
o = foundcell.Row
Set foundcell = Nothing
If ShPx.Cells(o, PxColDat) > ShRec.Cells(Lig, RecColDatEd) Then
Do Until ShPx.Cells(o, PxColDat) <= ShRec.Cells(Lig, RecColDatEd) And ShPx.Cells(o, PxColArt) = code
o = o + 1
Loop
ShRec.Cells(Lig, RecColPxUni) = ShPx.Cells(o, PxColPx)
Else
ShRec.Cells(Lig, RecColPxUni) = ShPx.Cells(o, PxColPx)
End If
End If
Next Lig
Auriez vous une solution plus efficace à me proposer pour ce type de travaux?
Je vous remercie par avance pour votre aide.
Jc
3 réponses
-
Bonjour
déja
en début de macro
application.screenupdating=false (fonctoin volatile )
ensuite vu la taille de ton tableau, on a intér^t à passer par des variables-tableau
on devrait tomber sous une durée en 1/10 ou 1/100 de seconde
je regarde dans mon b....el un exemple avec ces variables.....donc patience !
-
-
Merci Michel pour ton fichier.
Malheureusement je ne maitrise pas le fonctionnement des variables tableaux en VBA et d'autant moins l'analyse de deux tableaux simultanément mais je vais continuer d'investiguer et essayer de retravailler ton code pour l'adapter à mon besoin.
Merci encore.
Jc

