VBA - Optimisation de temps sur code (loop)

Bonjour à tous,

Afin d'automatiser le process comptable de ma société et notamment la comptabilisation de provisions , j'ai modifié un fichier Excel avec plusieurs macro qu'un collègue avait fait afin de l'adapter à nos besoins. En effet, notre outil principal n'étant pas interfacé avec la comptabilité, nous devons procéder à des imports manuels via un fichier texte, et celui-ci à un format à respecter. Les macros permettant d'arriver à ce résultat, cependant le nombre de lignes étant amener à évoluer au fur et à mesure, le fichier est de plus en plus lent.

Le fichier fonctionne, mais le code et assez lent donc je me tourne vers vous pour savoir si vous auriez des astuces pour améliorer la vitesse d'exécution de deux macros, notamment les macro associées au STEP3 et au STEP4 de l'onglet PARAMETERS.

Dans l'onglet "EXPORT"; je colle dans le cellule O2 mon fichier d'export puis les colonnes de A à N sont des formules nécessaires pour les macros (l'export paraît à moitié vide, mais j'ai supprimé les données non importantes pour des raisons de confidentialité bien sûr)

=> en colonne "B" seules les lignes avec un champ "YES" seront conservées, les autres lignes seront supprimées (cf macro associée au STEP3). J'arrive à avoir le même résultat via access, mais pour les macros STEP4 et STEP5 je suis forcé d'utiliser ce fichier n'arrivant pas à avoir le même résultat.

25import-provision.zip (434.15 Ko)

Pour chaque ligne qui est flaguée en "YES" dans l'onglet "EXPORT", alors celle-ci va générer 3 lignes (car 3 écritures comptables) puis ensuite je complète les informations nécessaires au fur et à mesure via des boucles en VBA (ce pq le code est long je pense, car on traite ligne par ligne et on répète x fois la même opération).

Avez-vous des astuces/ bonnes pratiques à me partager? Comme déjà mentionné, je ne suis que débutant en VBA, je comprends comment fonctionne le code mais je n'ai pas du tout les compétences pour optimiser le code.

J'ai ajouté cela au début de chaque macro, mais je pense que cela n'est pas suffisant (mais ça m'a déjà fait gagner du temps!)

Application.ScreenUpdating = False

Merci pour votre aide

Bonjour,

Wow ! Ça pique...

Prévoir un délai, hein !

A+

Bonjour,

Bonjour galopin01,

Excel et les comptables ou les comptables et Excel...

Qu'ils continuent avec les bouliers.

Cdlt.

C'est un bel exemple de tout ce qu'il ne faut pas faire !

Je n'ai travaillé que sur les premières macros. Pour la STEP5, je ne peux pas déboguer une macro de 4 pages qui opère sur une feuille vide...

A+

Bonjour,

@Jean-Eric, rare sont les comptables qui tentent les macro dans ma boîte, cela est le rendu d'un collègue qui je pense a travaillé via l'enregistreur de macro.

@galopin01, merci beaucoup pour ton aide, je vais essayer de comprendre ce que tu as fait pour apprendre. Quelle est la feuille vide? De mon côté la macro fonctionne bien malgré le temps d’exécution

Cordialement

Non, au temps pour moi... C'est juste qu'en première analyse c'est assez incompréhensible. Les commentaires sont plutôt abscons !

A+

Bon... voici la V3 avec le STEP5 : Je dois pas être très loin du compte !

J'ai essayer de synchroniser avec les résultats de ta macro d'origine mais c'est difficile de vérifier car les résultat sont très bidonnés et peu variés.

Il faudra bien vérifier en particulier au niveau de la colonne L : Je ne suis pas exempt de faire quelques c... de temps en temps !

Amuse toi bien !

Merci beaucoup Galopin je viens de regarder ça et le gain de temps est impressionnant, félicitations ! En effet tu as bien vu pour le code en colonne L, il manquait juste un *-1 ici en gros.

2

Ça donne envie d'apprendre le VBA, du coup j'ai commencé à lire les cours sur le forum pour comprendre le code, car rien que sur la STEP4 j'avais quelques difficultés à tout comprendre, je me permettrai de revenir vers toi pour comprendre si j'ai encore un peu de mal.

Je n'ai pas pour objectif en ce moment d'être un crack dans VBA, mais j'essaie de m'améliorer et surtout de comprendre les fichiers que j'utilise !!

Quand je copie colle mes données de base (dans le 1er fichier envoyé), il y a juste un pb ici sur le STEP3, c'est à cause du nom de "Table1[#All]" ?

1

Encore merci!

Oui c'est un peu c... à contrôler visuellement ce genre de détails.

J'ai renommé le Tableau (dans le Gestionnaire de Nom) : Quand il y en a toute une colonie c'est difficile de se rappeler qui fait quoi...

il faut mettre :

Ws.Range("TExp[#All]")...

A+

Salut galopin,

Merci, ça a en effet débloqué la Macro. Encore au sujet du STEP3, ça fonctionne bien dans l'exemple, mais dans un fichier avec des milliers de lignes et avec plus de colonnes renseignées, Excel bug vraiment, j'ai du manuellement filtrer dans la colonne "B" sur les cas identifiés comme "no" pour les supprimer manuellement. Tu aurais une astuce pour contourner cette manipulation qui est très lente? En soit les données supprimées ne me dérangent pas, c'est juste que je ne veux pas qu'elles se retrouvent dans l'onglet "Import".

Encore merci !

Rechercher des sujets similaires à "vba optimisation temps code loop"