Procédure VBA trop grosse

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!!!

12 réponses

michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
 
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 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
As tu lu ce que je t'avais écrit ?

désolé,
Abandon du suivi :-((
0
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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 Statut Membre 10
 
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
 
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 1165 Date d'inscription   Statut Membre Dernière intervention   360
 
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
 
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 1165 Date d'inscription   Statut Membre Dernière intervention   360
 
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 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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 9042 Statut Contributeur 1 191
 
Bonjour tous,
Le plus simple serait que tu poste ton classeur AVEC le code, ont pourrait voir pour l'optimiser.
A.
0
Dédé Pression
 
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 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 768
 
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
 
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 9042 Statut Contributeur 1 191
 
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 1165 Date d'inscription   Statut Membre Dernière intervention   360
 
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
 
Déjà merci à tous!

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

En tout cas, merci à tous!
0