Boucle For sur 100 000 lignes

Y compris Power BI, Power Query et toute autre question en lien avec Excel
B
Black_Hole
Membre fidèle
Membre fidèle
Messages : 191
Inscrit le : 18 juillet 2016
Version d'Excel : 2016 FR

Message par Black_Hole » 26 juin 2019, 15:13

Bonjour à tous,

J'ai un problème au niveau du temps de réponse de ma macro qui boucle sur environ 100 000 lignes.

Pourriez-vous me conseiller afin d'optimiser une macro qui parcoure des milliers de lignes, s'il vous plaît?

Merci par avance pour votre aide.

Bon après-midi à tous.
w
whereisbryan
Membre habitué
Membre habitué
Messages : 145
Inscrit le : 4 janvier 2018
Version d'Excel : 2016 FR

Message par whereisbryan » 26 juin 2019, 15:17

Ca depend que souhaites tu faire ?
B
Black_Hole
Membre fidèle
Membre fidèle
Messages : 191
Inscrit le : 18 juillet 2016
Version d'Excel : 2016 FR

Message par Black_Hole » 26 juin 2019, 15:25

Bonjour @whereisbryan ,

Dans un classeur excel, j'ai dans ma colonne A des milliers de lignes.

Les lignes ont pour valeur un nom de fichier.

Ma macro parcoure un dossier contenant des milliers de fichier pdf.

Elle évalue si le nom du fichier pdf fait partie des valeurs de la colonne A. Si oui, la cellule est colorée en vert, sinon en rouge.

Pourriez-vous me dire comme je peux faire pour optimiser la lecture svp?

En effet, lorsque je lance ma macro pour 10 , 100 lignes elles tournent bien mais lorsque je boucle sur le nombre total de ligne du classeur, la macro plante.

Merci par avance pour votre aide.
v
vince1512
Membre fidèle
Membre fidèle
Messages : 220
Appréciations reçues : 25
Inscrit le : 23 avril 2019
Version d'Excel : 2010 EN

Message par vince1512 » 26 juin 2019, 15:35

Bonjour,

Tu peux déjà utiliser des propriétés comme Application.ScreenUpdating = False -> Application.ScreenUpdating = true pour empêcher le rafraichissement de l'écran.

Sinon en passant par un tableau, à la place de directement récupérer les infos dans le fichier à chaque itérations. Stocker dès le début toutes les infos dans un tableau puis les traiter.

Cordialement
:btres:
w
whereisbryan
Membre habitué
Membre habitué
Messages : 145
Inscrit le : 4 janvier 2018
Version d'Excel : 2016 FR

Message par whereisbryan » 26 juin 2019, 15:41

re,

Pour moi la solution la plus rapide est de passer par un tableau

Tu stock toutes les valeurs de ton dossier dans un premier tableau puis tu stock toute ta colonne dans un autre puis tu compares avec des boucles tes 2 tableaux ca ira beaucoup plus vite normalement
B
Black_Hole
Membre fidèle
Membre fidèle
Messages : 191
Inscrit le : 18 juillet 2016
Version d'Excel : 2016 FR

Message par Black_Hole » 26 juin 2019, 15:45

Merci à bvous deux pour votre aide.

Je vais tester les deux solutions.

J'ai une question concernant la propriété "Application.ScreenUpdating = true".

Je place cette propriété à quel niveau dans ma macro (au tout début, juste avant la boucle For ..)

Merci par avance pour votre aide.
w
whereisbryan
Membre habitué
Membre habitué
Messages : 145
Inscrit le : 4 janvier 2018
Version d'Excel : 2016 FR

Message par whereisbryan » 26 juin 2019, 15:47

Application.ScreenUpdating = False au tout debut de ta macro juste apres le sub par exemple

Application.ScreenUpdating = true tout à la fin


Cela va juste figer l image entre les 2
B
Boisgontierjacques
Membre fidèle
Membre fidèle
Messages : 470
Appréciations reçues : 108
Inscrit le : 5 octobre 2018
Version d'Excel : 2016

Message par Boisgontierjacques » 26 juin 2019, 15:55

Bonjour,


C'est le travail sur les cellules qui ralentit.
Il faut utiliser des Arrays(), éventuellement indexés par des dictionnaires (ou collection si MAC)

Boisgontier
w
whereisbryan
Membre habitué
Membre habitué
Messages : 145
Inscrit le : 4 janvier 2018
Version d'Excel : 2016 FR

Message par whereisbryan » 26 juin 2019, 16:00

@Boisgontierjacques

vous auriez pu ajouter la référence avec toutes les infos pour comprendre comment ca marche
http://boisgontierjacques.free.fr/

:wink:
B
Black_Hole
Membre fidèle
Membre fidèle
Messages : 191
Inscrit le : 18 juillet 2016
Version d'Excel : 2016 FR

Message par Black_Hole » 26 juin 2019, 16:23

Re,

J'ai ajouté la propritété "Application.ScreenUpdating = true"

Mon code est plus rapide lorsque la boucle tourne sur 100 records mais au-delà la macro ne répond plus.

J'ai joint le classeur avec ma macro. (j'ai supprimé environ 80 000 lignes car le fichier était trop volumineux pour le joindre)

Pourriez-vous avoir un regard sur ma macro et m'aider à l'optimiser s'il vous plaît?

Mille mercis pour votre aide.
for_loop.xlsm
(831.35 Kio) Téléchargé 7 fois
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message