Aide problème de rapidité d'éxecution macro
Bonjour,
Je poste ce sujet car j'ai fait un fichier Excel qui me permet de calculer des KPI pour le travail.
Le fonctionnement :
Je colle les données "brutes" dont j'ai besoin dans une première feuille (Extraction) puis avec du code vba je fais coller toutes ces données dans un tableau sur une autre feuille (Données__TT).
Le problème c'est que j'ai beaucoup de lignes à coller (parfois 50 000) et que l'exécution de ma macro prend un temps fou ( plus d'1/4h).
J'aurai donc besoin d'aide pour la rendre plus rapide (je pense que ma façon de programmer n'est pas la plus optimisée).
Je vous remercie par avance pour votre aide.
Voici le fichier allégé :
Bonjour,
Et
Peux-tu, stp, renseigner la version Excel que tu utilises? (Dans ton profil)
Selon la version utilisée, l'utilisation de Power Query serait bien plus adaptée, je pense. (Power Query est en natif depuis les versions 2016, et en téléchargement gratuit sur le site de µSoft pour les versions 2010 Pro et 2013)
Si ta version est compatible, peux-tu, dans ce cas, préciser exactement les critères régissant la copie des données de l'onglet 1 vers l'onglet 2? (car l'analyse de ton code reste quelque peu brouillon...)
Bonne soirée
Bonjour et merci beaucoup pour ta réponse,
J'utilise Excel 2021. Je ne connais pas Power Query et dans tous les cas je voudrai rester le plus simple possible avec mon bout de code 😊.
Voici des précisions sur le fonctionnement de mon programme :
Les données que je colle dans la première feuille de mon fichier proviennent d'une extraction au format Excel d'un logiciel de mon entreprise. A partir de cette feuille (et donc grâce à la macro), je colle ces données ( en appuyant sur le bouton ajouter des données) dans la seconde feuilles (Données_TT) qui contient un tableau. C'est à partir de ce tableau que je calcul mes KPI.
Mon problème c'est que le collage des données de la feuille 1 vers la feuille 2 prend un temps fou car il y a beaucoup de lignes.
Je cherche juste à rendre plus rapide mon codage mais ne sait pas comment faire.
En espèrant avoir été plus clair.
Merci pour ton aide.
Léo
Bonjour,
Pas de soucis, pour la simplicité, c'est tout ce qu'il te faut (Power Query).
Par contre, pour aller plus loin, il faudrait que tu donnes les critères qui te font copier telle ligne, et pas une autre, dans le 2ème onglet..
J'ai cru comprendre :
- Tu modifies la date dans la colonne B pour ne garder que la date (sans l'heure)
- Tu vérifies les valeurs dans la colonne I, et selon ces valeurs, tu incrémentes un compteur (rôle?) et si ces valeurs sont différentes de :
If PN = "Overclock" Then
If PN = "Speed losses / Slow-downs" Then
If PN = "Ralentissement" Then
If PN = "Sur cadence" Then
If PN = "Sur-cadence" Then
If PN = "Sous-cadence" Then
If PN = "Monter en cadence" Then- Tu colles les données de la ligne dans l'onglet 2
- Et dans cet onglet 2, tu calcules le numéro de semaine, le mois, le type d'arrêt selon l'équivalence dans le tableau "Tableau_type_arrêt" dans l'onglet 3 et enfin la durée en heure virgule minute dans la dernière colonne.
Est-ce que tu as un fichier par extraction? (ou tu cumules?)
@ te relire avec confirmation (ou pas) des infos ci-dessus.
Bonne journée
Re-,
J'ai oublié, en tout début de code, tu vérifies également que l'ID (colonne A) n'est pas déjà présent dans l'onglet 2, c'est ça?
Chaque évènement a donc un ID unique?
Merci encore pour tes réponses.
Tu as tout compris.
- Je modifie la colonne B pour ne garder que la date.
- Pour les critères, en fait ces données correspondent à un type de pertes qui ne m'intéressent pas d'où le fait que je ne les colle pas
- Chaque évènement à un ID unique c'est pour ça que je vérifie
- Le compteur permet d'exécuter la condition : si mon compteur est incrémenté je ne copie pas la ligne et si il est égal à 0 je copie la ligne.
- Pour le reste tu as compris
J'ai un seul fichier pour tout.
As-tu des idées pour rendre tout ça plus rapide ?
Merci à toi.
Re-,
J'ai bien peur que de vouloir tout rassembler sur un onglet amène très vite à un dépassement du nombre de lignes autorisées...(dans ton fichier exemple, tu as déjà plus de 7000 lignes pour 2 jours, et plus de 5000 extraites suite à la requête, et tu parles d'une possibilité de plus de 50 000 lignes...)
Dans le fichier joint, j'ai rajouté une requête Power Query (vide afin de diminuer le poids du fichier)
Dans l'onglet "Données_TT", tu fais un clic droit sur la cellule A1 (ou quelque part dans le Tableau), et tu cliques sur "Actualiser" (normalement, au bout d'une dizaine de secondes, tu auras ton résultat)
Je te conseillerais donc d'effectuer cette requête 1 fois par semaine (vu que tu effectues le calcul de la semaine).
Regarde si ça peut te convenir.
Merci beaucoup !
Cela fonctionne effectivement plus vite et de manière plus simple qu'avec VBA. Je suis curieux de comprendre comment est-ce que tu as fait ça. Je ne connais pas du tout power query.
Tu as raison, je pense qu'à terme je vais dédier un fichier à chaque extraction sinon je risque de vite manquer de place.
Je suis preneur si tu arrives à m'expliquer comment est-ce que tu t'y es pris 😊.
Encore merci.
Léo
Re-,
Je suis preneur si tu arrives à ....
Je ne vends rien, t'inquiète...
T'expliquer PQ en un fil serait bien présomptueux de ma part...
Pour commencer, et une avoir un petite approche de ce qu'on peut faire avec ce formidable outil, tu peux commencer par explorer :
- Ce site
- Celui-ci
- Puis, pour approfondir un peu
Donc, une fois que tu auras tout lu, on pourra continuer.....
Pour en revenir à ton besoin...
Je suppose que tu dois en faire quelque chose, et en sortir des stats ou autres données.
Si tu pars sur l'idée d'une requête hebdomadaire, tu peux ensuite abuser de PQ pour regrouper tous ces fichiers (correctement nommés), et de préférence dans le même répertoire (mais ce n'est pas une obligation), importer ces données et en faire des stats (mensuels, annuels...).
Comme tu as peut-être vu, dans mon fichier, le tableau de données brutes se nomme "T_Data", et le tableau contenant la requête se nomme pas bien, parce que j'ai oublié de renommer la requête (mais cela, on le fera ensuite). Donc, admettons que le tableau issu de la requête se nomme "T_Final", on pourra alors regrouper tous les tableaux de ce nom compris dans les fichiers d'un même répertoire, et traiter ces données...
Ou, toujours sur le principe d'une requête hebdo, modifier le tableau final, pour déjà effectuer des stats, et traiter globalement par la suite...
Mais tout ceci, c'est à toi de voir, je ne donne que des idées...
Bon courage
Je vais avoir un peu de lecture pour comprendre le fonctionnement de PQ. En tout cas je te remercie de m'avoir fait découvrir un nouvel outil sur Excel (c'est fou tout ce qu'on peut faire là dessus).
Une fois que j'aurai travaillé dessus, je reviendrai vers toi pour que l'on optimise tout cela.
Encore une fois merci pour ton aide !