Recherchev 2 critères dont 1 approximatif (date <=)

Fermé
titeufdu89 Messages postés 374 Date d'inscription samedi 28 juillet 2012 Statut Membre Dernière intervention 1 avril 2023 - Modifié le 1 avril 2023 à 15:54
 titeufdu89 - 2 avril 2023 à 18:59

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 

A voir également:

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
2 avril 2023 à 11:15

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 !


0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
2 avril 2023 à 11:22

Re

comparaison de durée suivant méthode employée

 https://www.cjoint.com/c/MDcjt6qLIKK


0

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

0