Différence rapidité macro

Bonjour,

Dans mon fichier en pièce jointe, j'ai créé une macro qui, à partir de numéros de composants rentrés par l'utilisateur, doit retrouver tous les produits parents (produits assemblés).

Problème: La macro fait ce que je veux mais est lente et tourne à des vitesses totalement différentes.

Avec les 5 produits enfants renseignés dans mon fichier joint, parfois ma macro tourne 5 secondes, parfois presque 30 secondes.

Avez vous une explication et une piste potentielle pour optimiser la rapidité de ma macro sachant que je vais la complexifier encore?

Savez vous aussi pourquoi en faisant faire la même action, la macro peut parfois mettre jusque 5 fois plus de temps?

merci,

PS: Pour pouvoir uploader mon fichier initial trop volumineux, j'ai réduit la "base de donnée initiale" de 65000 lignes à 20000 lignes.

ça doit déjà beaucoup accélérer les boucles de ma macro.

Bonjour,

Je n'ai pas compris totalement le fonctionnement de ta macro. Mais il existe des méthodes rapides comme :

  • utiliser un filtre avancé pour rechercher les parents à partir d'une liste de Child_Num
  • passer par des tableaux array lors du calcul puis transposer le résultat dans les cellules mais ne pas travailler directement dans les cellules; on multiplie généralement par 100 la vitesse ... un exemple qui a été assez long https://forum.excel-pratique.com/viewtopic.php?p=806720#p806720

Bonjour Poulu32

Salut Steelson parti sur la même idée que toi

1) Filtre avancé avec critère

2) Parcours des lignes pour éviter les doublons

3) Restitution des valeurs

@+

merci,

Je ne connaissais pas les filtres avancés.

J'aurais pu gagner bcp de temps dès le départ.

Merci!

Re-

Je vous propose une macro en une seule ligne ...

Sub rechercher()
    Sheets("FERT-CHILD").Range("Table_ITR_DMS_BOM_Management.accdb7[#All]").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range("Sheet2!Criteria"), CopyToRange:=Range("Sheet2!Extract"), Unique:=True
End Sub

Voir en C2 le critère.


ou bien pour reprendre la même logique que Bruno

Sub rechercher()
    Sheets("FERT-CHILD").Range("Table_ITR_DMS_BOM_Management.accdb7[#All]").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row), CopyToRange:=Range("Sheet2!Extract"), Unique:=True
End Sub

Mais je me suis peut-être trompé ... y a t'il d'autres choses au delà du filtre avancé à exécuter ?

Rechercher des sujets similaires à "difference rapidite macro"