Procédure VBA trop grosse

Fermé
Dédé Pression - Modifié par Dédé Pression le 15/03/2011 à 11:59
 Dédé Pression - 21 mars 2011 à 11:35
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!!!

12 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
15 mars 2011 à 12:06
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...
0
Dédé Pression
15 mars 2011 à 13:05
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!!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
15 mars 2011 à 13:45
As tu lu ce que je t'avais écrit ?

désolé,
Abandon du suivi :-((
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
Modifié par pijaku le 15/03/2011 à 13:45
salut,
2 choix :
1- écouter michel_m et : 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

2- copier/coller le code ici...
0
Krystan Messages postés 36 Date d'inscription mercredi 16 février 2011 Statut Membre Dernière intervention 17 mars 2011 10
15 mars 2011 à 15:27
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.
0
Dédé Pression
17 mars 2011 à 17:32
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!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
17 mars 2011 à 18:04
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
0
Dédé Pression
18 mars 2011 à 09:26
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
0
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
18 mars 2011 à 09:39
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
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
18 mars 2011 à 09:53
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
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
18 mars 2011 à 09:33
Bonjour tous,
Le plus simple serait que tu poste ton classeur AVEC le code, ont pourrait voir pour l'optimiser.
A.
0
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!
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
18 mars 2011 à 10:38
Bonjour,
Super, on avance. Bon je ne peux pas t'aider car je ne dispose pas d'office 2007. Donc, à moins que tu n'enregistres tes documents (surtout le docx word) sous version 97-2003, je vais laisser le soin aux autres helper de corriger ton code.
0
Dédé Pression
18 mars 2011 à 11:03
Pour ceux qui n'arrive pas à ouvrir le docx, voici un autre lien :

http://www.cijoint.fr/cjlink.php?file=cj201103/cijRqM1ZJ1.doc
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
18 mars 2011 à 11:46
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+
0
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
Modifié par mic13710 le 18/03/2011 à 12:20
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 :
    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
0
Dédé Pression
21 mars 2011 à 11:35
Déjà merci à tous!

Vos commentaires me font vraiment cogiter sur ma (mauvaise) solution ...

En tout cas, merci à tous!
0