Filtrer deux colonnes et remplir une troisième colonne

Application.ScreenUpdating = False
Application.Calculation = xlcalculationmanual 

For i = 1 To lastrow
Cells(i, 18) = Application.VLookup(Cells(i, 17), Worksheets("mapping").Range("$H$2:$L$1050").Value, 5, False)

Next i

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

/quote]

Meric pour vos explications

mais ça ne change rien c'est encore plus lent !

peut etre ma fonction est compliquée et je peux la simplifier

AHHHHHHHHHHHHHHHHHHH.

Au temps pour moi, le Calculation ne servira à rien vu que tu passes la rechercheV en fonction VBA et non en formule worsheet !

Essaie :

Application.ScreenUpdating = False
Application.Calculation = xlcalculationmanual 

For i = 1 To lastrow
Cells(i, 18).Formula = "=VLookup(" & Cells(i, 17).address & ",mapping!" & Range("$H$2:$L$1050").address & ", 5,0)"

Next i

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

Bonsoir à tous,

Je vois que le débat s'est largement développé depuis mon dernier passage !

Je ne vais pas entrer dans le détail de ce qui est en cause, il me faudrait remonter trop haut. Les problèmes de lenteur d'exécution ne sont pas toujours facile à régler (et on ne les règle pas toujours). C'est en testant différentes méthodes alternatives qu'on finit par choisir celle qui répond le mieux...

Il y a toutefois comme l'abordé Zoum Soum quelques considérations de base dont il faut être conscient.

Il y a une manie qui me semble encore très répandue qui consiste à faire travailleur VBA comme le fait manuellement l'utilisateur devant le tableur. On peut dire que cela ne favorise pas la vélocité et de cette façon on fait travailler VBA plus que nécessaire en lui faisant utiliser des moyens Excel qui ne sont pas les siens propres. Cela vaut pour le code enregistré, qui n'est que la reproduction des mouvements de l'utilisateur (que VBA n'a pas besoin de reproduire). Cela vaut aussi dans l'utilisation de VBA pour insérer des formules comme on le ferait en travaillant sans macro, alors qu'on peut généralement calculer avec VBA autrement le résultat produit par la formule.

L'utilisation des fonctions de feuilles de calcul est plus nuancée. Certaines rendent effectivement des services lorsque l'on ne dispose pas d'un équivalent en VBA, et elles peuvent s'évérer rapides à l'utilisation. Maintenant dans ces utilisations, on ne sait pas comment sont programmées ces fonctions (le code n'est pas apparent) et on ignore donc le nombre d'opérations qu'elles font pour parvenir au résultat. On est peut-être dans un cas semblable avec Vlookup. Pour faire des comparaisons utiles, il conviendrait de bâtir une fonction en VBA, opérant la recherche voulue, utilisée dans des conditions semblables par la procédure appelante.

D'une façon générale, pour travailller efficacement avec VBA, le schéma : prélever les données dont on a besoin sur la feuille, les travailler en VBA, réaffecter les résultats à la fin, est souvent le plus productif. Et en bâtissant le programme de façon modulaire au lieu d'une ou deux macros multiformes qui font tout, on est généralement plus efficace, ne serait-ce que parce qu'on s'y retrouve mieux dans le code, mais sans doute VBA aussi. L'écriture du code en respectant les règles préconisées n'est pas non plus indifférent pour la plupart d'entre elles. VBA s'y retrouvera mieux

Il ne faut pas hésiter à faire divers essais. C'est au vu des résultats qu'une méthode s'imposera dans un cas et une autre dans un autre...

Bonne soirée à tous.

MFerrand a écrit :

Bonsoir à tous,

Je vois que le débat s'est largement développé depuis mon dernier passage !

Je ne vais pas entrer dans le détail de ce qui est en cause, il me faudrait remonter trop haut. Les problèmes de lenteur d'exécution ne sont pas toujours facile à régler (et on ne les règle pas toujours). C'est en testant différentes méthodes alternatives qu'on finit par choisir celle qui répond le mieux...

Il y a toutefois comme l'abordé Zoum Soum quelques considérations de base dont il faut être conscient.

Il y a une manie qui me semble encore très répandue qui consiste à faire travailleur VBA comme le fait manuellement l'utilisateur devant le tableur. On peut dire que cela ne favorise pas la vélocité et de cette façon on fait travailler VBA plus que nécessaire en lui faisant utiliser des moyens Excel qui ne sont pas les siens propres. Cela vaut pour le code enregistré, qui n'est que la reproduction des mouvements de l'utilisateur (que VBA n'a pas besoin de reproduire). Cela vaut aussi dans l'utilisation de VBA pour insérer des formules comme on le ferait en travaillant sans macro, alors qu'on peut généralement calculer avec VBA autrement le résultat produit par la formule.

L'utilisation des fonctions de feuilles de calcul est plus nuancée. Certaines rendent effectivement des services lorsque l'on ne dispose pas d'un équivalent en VBA, et elles peuvent s'évérer rapides à l'utilisation. Maintenant dans ces utilisations, on ne sait pas comment sont programmées ces fonctions (le code n'est pas apparent) et on ignore donc le nombre d'opérations qu'elles font pour parvenir au résultat. On est peut-être dans un cas semblable avec Vlookup. Pour faire des comparaisons utiles, il conviendrait de bâtir une fonction en VBA, opérant la recherche voulue, utilisée dans des conditions semblables par la procédure appelante.

D'une façon générale, pour travailller efficacement avec VBA, le schéma : prélever les données dont on a besoin sur la feuille, les travailler en VBA, réaffecter les résultats à la fin, est souvent le plus productif. Et en bâtissant le programme de façon modulaire au lieu d'une ou deux macros multiformes qui font tout, on est généralement plus efficace, ne serait-ce que parce qu'on s'y retrouve mieux dans le code, mais sans doute VBA aussi. L'écriture du code en respectant les règles préconisées n'est pas non plus indifférent pour la plupart d'entre elles. VBA s'y retrouvera mieux

Il ne faut pas hésiter à faire divers essais. C'est au vu des résultats qu'une méthode s'imposera dans un cas et une autre dans un autre...

Bonne soirée à tous.

Merci beaucoup pour toutes ces explications


SoumZoum a écrit :

AHHHHHHHHHHHHHHHHHHH.

Au temps pour moi, le Calculation ne servira à rien vu que tu passes la rechercheV en fonction VBA et non en formule worsheet !

Essaie :

Application.ScreenUpdating = False
Application.Calculation = xlcalculationmanual 

For i = 1 To lastrow
Cells(i, 18).Formula = "=VLookup(" & Cells(i, 17).address & ",mapping!" & Range("$H$2:$L$1050").address & ", 5,0)"

Next i

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

Merci beaucoup ma macro s'est netement amelioré .

pouvez vous juste me donner plus d'explication sur mon erreur, car je sais je trvail souvent comme si je faisai des formules sur excel !

ou me donner des liens sur le sujet

Merci encore vous etes trop fort

Rechercher des sujets similaires à "filtrer deux colonnes remplir troisieme colonne"