Procédure VBA trop grosse
Dédé Pression
-
Dédé Pression -
Dédé Pression -
Bonjour,
J'ai à faire pour mon taf une macro permettant de mettre en forme un tableau sortant du logiciel de compta cependant j'aurais vraiment besoin d'un peu d'aide... Je m'explique :
Puisque je n'y connais rien à VBA, je me suis lancé avec l'enregistreur mais voila, ma procédure est tellement longue que Visual Basic me dit que la procédure est trop longue pour être exécutée.
D'où ma question : y a t il des lignes supprimables dans Virtual Basic sans répercussion?
L'aide me dit de séparer sinon la macro : mais comment faire svp car je n'en ai pas la moindre idée.
Enfin, comment savoir la taille de la procédure (car j'ai lu qu'elle doit faire moins d'un certain poids...)
Merci d'avance pour votre aide!!!
J'ai à faire pour mon taf une macro permettant de mettre en forme un tableau sortant du logiciel de compta cependant j'aurais vraiment besoin d'un peu d'aide... Je m'explique :
Puisque je n'y connais rien à VBA, je me suis lancé avec l'enregistreur mais voila, ma procédure est tellement longue que Visual Basic me dit que la procédure est trop longue pour être exécutée.
D'où ma question : y a t il des lignes supprimables dans Virtual Basic sans répercussion?
L'aide me dit de séparer sinon la macro : mais comment faire svp car je n'en ai pas la moindre idée.
Enfin, comment savoir la taille de la procédure (car j'ai lu qu'elle doit faire moins d'un certain poids...)
Merci d'avance pour votre aide!!!
A voir également:
- Procédure VBA trop grosse
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Find vba - Astuces et Solutions
- Vba range avec variable ✓ - Forum VB / VBA
12 réponses
Bonjour,
Tel que tu poses le problème, je ne vois pas comment on peut t'aider...
Au besoin, mettre le classeur (sans ta macro) sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/
et coller le lien proposé dans le message de réponse
et SURTOUT, sois complet et clair en expliquant ce que tu veux faire...
Tel que tu poses le problème, je ne vois pas comment on peut t'aider...
Au besoin, mettre le classeur (sans ta macro) sans données confidentielles en pièce jointe (format XL97-2003) sur
http://cijoint.fr/
et coller le lien proposé dans le message de réponse
et SURTOUT, sois complet et clair en expliquant ce que tu veux faire...
Désolé si je ne suis pas clair, je vais essayer de reformuler mes questions.
J'ai fais une macro avec l'enregistreur mais lorsque j'essaye de l'utiliser, Visual Basic me dit que la procédure est trop lourde et qu'il ne peut l'exécuter.
Est-ce que quelqun connaitrait donc par hasard une solution pour me permettre de lancer ma macro, malgré la taille? (par exemple en supprimant des lignes qui ne servent surement à rien)
Merci d'avance!!
J'ai fais une macro avec l'enregistreur mais lorsque j'essaye de l'utiliser, Visual Basic me dit que la procédure est trop lourde et qu'il ne peut l'exécuter.
Est-ce que quelqun connaitrait donc par hasard une solution pour me permettre de lancer ma macro, malgré la taille? (par exemple en supprimant des lignes qui ne servent surement à rien)
Merci d'avance!!
Pour reprendre les commentaires de michel_m et pijaku, donne nous un exemple de ton fichier Excel et dis nous quel mise en forme tu veux faire.
Car la meilleur façon de résoudre ton problème c'est de refaire le code VBA sans utiliser l'enregistreur de macro.
Donc si nous savons ce que tu souhaites faire de ton fichier nous pourrions t'aider à créer ce code qui prendra beaucoup moins de place.
Car la meilleur façon de résoudre ton problème c'est de refaire le code VBA sans utiliser l'enregistreur de macro.
Donc si nous savons ce que tu souhaites faire de ton fichier nous pourrions t'aider à créer ce code qui prendra beaucoup moins de place.
Pour ceux que ce problème intéresse, je suis arrivé à supprimer
Toutes les lignes commencant par "active.window".
Les lignes concernant le "zoom" (qui se reconnaissent assez bien car il y a marqué zoom dedans).
Les lignes correspondant au traçage où il y a marqué "none" (sauf si c'est de l'effacage).
tout les "scroll.column" ainsi que les lignes marquées "smallscroll down" ou quelque chose comme ça.
Si quelqun en connait d'autres qui sont inutiles, hésitez pas!
Merci beaucoups!
Toutes les lignes commencant par "active.window".
Les lignes concernant le "zoom" (qui se reconnaissent assez bien car il y a marqué zoom dedans).
Les lignes correspondant au traçage où il y a marqué "none" (sauf si c'est de l'effacage).
tout les "scroll.column" ainsi que les lignes marquées "smallscroll down" ou quelque chose comme ça.
Si quelqun en connait d'autres qui sont inutiles, hésitez pas!
Merci beaucoups!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Les très nombreux select selection par exemple, les déplacements des curseurs inutiles et tant d'autres bricoles qui remplissent et alourdissent les codes, plus des méthodes qui sont très loin de l'optimisation.
Bref, l'enregistreur ça aide (un peu), mais pour un travail sérieux, il faut mettre les mains dans le cambouis.
C'est un peu comme prendre une Twingo pour aller faire les 24h du mans.
Et sans fichier, on ne peut guère vous aider.
Bon courage,
Michel
Bref, l'enregistreur ça aide (un peu), mais pour un travail sérieux, il faut mettre les mains dans le cambouis.
C'est un peu comme prendre une Twingo pour aller faire les 24h du mans.
Et sans fichier, on ne peut guère vous aider.
Bon courage,
Michel
Le problème c'est que je n'ai aucune idée du langage et donc je serais incapable de le faire sans l'enregistreur et je n'ai pas vraiment le temps de m'y mettre.
C'est pas optimal mais c'est quand même surement plus rapide!
Voila, c'est juste que chacun fais avec ce qu'il sait!
Merci
C'est pas optimal mais c'est quand même surement plus rapide!
Voila, c'est juste que chacun fais avec ce qu'il sait!
Merci
C'est bien ce qu'on a compris et c'est pour ça que vous êtes là.
Malheureusement, si vous ne transmettez pas votre fichier comme nous vous l'avons suggéré, nous ne pouvons pas vous aider.
Au final, on ne sait pas si votre code fonctionne ou pas depuis que vous l'avez allégé.
S'il fonctionne et que ça vous convient, marquez le sujet comme résolu, sinon, libre à vous de laisser le sujet ouvert mais je doute qu'il y ait quelqu'un pour poursuivre la discussion sans un support quelconque (fichier ou code).
Michel
Malheureusement, si vous ne transmettez pas votre fichier comme nous vous l'avons suggéré, nous ne pouvons pas vous aider.
Au final, on ne sait pas si votre code fonctionne ou pas depuis que vous l'avez allégé.
S'il fonctionne et que ça vous convient, marquez le sujet comme résolu, sinon, libre à vous de laisser le sujet ouvert mais je doute qu'il y ait quelqu'un pour poursuivre la discussion sans un support quelconque (fichier ou code).
Michel
Bonjour,
C'est effectivement pour cela que, dès le début, nous avions demandé, au moins, à avoir accès au code. S'il a été fait avec l'enregistreur, il n'y a rien de confidentiel ni de révolutionnaire dans ce code... Donc un simple copié/collé de ce code aurait permis la résolution de ce problème depuis... 3 jours!
Cordialement,
Franck P
C'est effectivement pour cela que, dès le début, nous avions demandé, au moins, à avoir accès au code. S'il a été fait avec l'enregistreur, il n'y a rien de confidentiel ni de révolutionnaire dans ce code... Donc un simple copié/collé de ce code aurait permis la résolution de ce problème depuis... 3 jours!
Cordialement,
Franck P
Bonjour tous,
Le plus simple serait que tu poste ton classeur AVEC le code, ont pourrait voir pour l'optimiser.
A.
Le plus simple serait que tu poste ton classeur AVEC le code, ont pourrait voir pour l'optimiser.
A.
Bon, désolé de pas avoir posté avant.
Du coup voici le lien vers mon fichier de base :
http://www.cijoint.fr/cjlink.php?file=cj201103/cijPBHxwvU.xls
Voici le lien vers le résultat souhaité (qui marche pour le moment) :
http://www.cijoint.fr/cjlink.php?file=cj201103/cijsAJh6Fy.xlsm
et voici le code :
http://www.cijoint.fr/cjlink.php?file=cj201103/cijsO6kzum.docx
ATTENTION : je ne demande pas de le faire car le document de départ pourrait évoluer et je ne pourrais alors pas modifier...
Je voudrais savoir si des lignes sont supprimables dans le code afin de pouvoir faire quelques modifications ou rajouts si besoin.
Merci!
Du coup voici le lien vers mon fichier de base :
http://www.cijoint.fr/cjlink.php?file=cj201103/cijPBHxwvU.xls
Voici le lien vers le résultat souhaité (qui marche pour le moment) :
http://www.cijoint.fr/cjlink.php?file=cj201103/cijsAJh6Fy.xlsm
et voici le code :
http://www.cijoint.fr/cjlink.php?file=cj201103/cijsO6kzum.docx
ATTENTION : je ne demande pas de le faire car le document de départ pourrait évoluer et je ne pourrais alors pas modifier...
Je voudrais savoir si des lignes sont supprimables dans le code afin de pouvoir faire quelques modifications ou rajouts si besoin.
Merci!
Pour ceux qui n'arrive pas à ouvrir le docx, voici un autre lien :
http://www.cijoint.fr/cjlink.php?file=cj201103/cijRqM1ZJ1.doc
http://www.cijoint.fr/cjlink.php?file=cj201103/cijRqM1ZJ1.doc
Première constatation.. pourquoi faire toutes ces mises en formes par macro alors que ce sera toujours la même présentation ??? Une fois le tableau réaliser sauver le classeur et elle sera toujours disponible.
Pourquoi faire tout ces copier/coller, des formules feraient bien mieux l'affaire puisque comme je viens de le dire ce sera toujours la même disposition.
A+
Pourquoi faire tout ces copier/coller, des formules feraient bien mieux l'affaire puisque comme je viens de le dire ce sera toujours la même disposition.
A+
De plus il y a de nombreuses sélections inutiles qui n'aboutissent sur rien, des tonnes d'opérations répétées.
Déjà de la simplification facile : les select selection.
Début de votre code :
Qui peut s'écrire :
Ou encore dans le genre chargé :
Peut-être remplacé par :
C'est déjà beaucoup plus court !
Ceci étant, il y a beaucoup trop de lignes (2138) à corriger pour que nous puissions vous régler le problème.
Et je suis d'accord avec lermite concernant la forme de base.
Et autre suggestion : si la feuille de donnée est toujours disposée de la même manière, pourquoi ne pas faire votre tableau sur une deuxième feuille ? Il vous suffirait alors de mettre à jour les données de la deuxième feuille avec des liens vers les données de la première. C'est plus simple à mettre en oeuvre et surtout plus rapide en exécution.
Michel
Déjà de la simplification facile : les select selection.
Début de votre code :
Columns("A:A").Select
Selection.Cut
Columns("C:C").Select
Selection.Insert Shift:=xlToRight
Range("B1").Select
Selection.Cut Destination:=Range("H1")
Qui peut s'écrire :
Columns("A:A").Cut
Columns("C:C").Insert Shift:=xlToRight
Range("B1").Cut Destination:=Range("H1")
Ou encore dans le genre chargé :
Range("B19,B23,B25:B26").Select
Range("B25").Activate
Range("B19,B23,B25:B26,B44,B48,B51").Select
Range("B51").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60").Select
Range("B57").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73").Select
Range("B73").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113").Select
Range("B113").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113,B148,B149").Select
Range("B149").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113,B148,B149,B153").Select
Range("B153").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113,B148,B149,B153,B176").Select
Range("B176").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113,B148,B149,B153,B176,B190,B192").Select
Range("B192").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113,B148,B149,B153,B176,B190,B192,B211,B213").Select
Range("B213").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113,B148,B149,B153,B176,B190,B192,B211,B213,B219").Select
Range("B219").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113,B148,B149,B153,B176,B190,B192,B211,B213,B219,B231,B236").Select
Range("B236").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113,B148,B149,B153,B176,B190,B192,B211,B213,B219,B231,B236,B247").Select
Range("B247").Activate
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113,B148,B149,B153,B176,B190,B192,B211,B213,B219,B231,B236,B247,B256").Select
Range("B256").Activate
Selection.ClearContents
Peut-être remplacé par :
Range("B19,B23,B25:B26,B44,B48,B51,B55,B57:B60,B73,B113,B148,B149,B153,B176,B190,B192,B211,B213,B219,B231,B236,B247,B256").ClearContents
C'est déjà beaucoup plus court !
Ceci étant, il y a beaucoup trop de lignes (2138) à corriger pour que nous puissions vous régler le problème.
Et je suis d'accord avec lermite concernant la forme de base.
Et autre suggestion : si la feuille de donnée est toujours disposée de la même manière, pourquoi ne pas faire votre tableau sur une deuxième feuille ? Il vous suffirait alors de mettre à jour les données de la deuxième feuille avec des liens vers les données de la première. C'est plus simple à mettre en oeuvre et surtout plus rapide en exécution.
Michel