erreur de compilation procédure trop grande [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 12-08-2009 à 17:19:40
La réponse est dans la question: découple en plusieurs fonctions. Chacune de tes fonctions devrait être courte. Très courte, genre 20-30 lignes.
Evite aussi de déclarer 47.000 variables en dehors de tes fonctions, c'est une mauvaise habitude. Déclare autant que possible à l'intérieur des fonctions.
Et tape un Option Explicit en première ligne de ton module. Si ça ne marche plus, c'est que c'est encore pire que tu le croyais.
Marsh Posté le 12-08-2009 à 17:43:27
foxley_gravity a écrit : ( j'ai deja fait beucoup de boucle pour limité la longueur ..) |
En fait ce passage me fait encore plus peur. Mais c'est bien que tu ais vu l'usage qu'on peut faire des boucles.
Marsh Posté le 12-08-2009 à 18:35:20
lol le code fait plus de 3 milles caractères je crois ^^ il y a beaucoup de copier collé .. mais obligatoire , car aucune logique dans la copie de cellule ( des dizaine d'onglet avec chacun des centaines de cellules)
donc reprenons ,j'ai un bouton ... c'est possible de mettre plusieurs petite procédure dans un bouton ?
si oui faudra t'il faire des changements du genre répéter les variables ?
cordialement
ps : ca serait vraiment génial si qql pouvait m'aider sur les posts : Problème dans une macro devant faire un tri,
[VBA] problème dans une boucle
Marsh Posté le 13-08-2009 à 08:16:40
Comme a dit drasche il faut découper en plusieurs sous fonctions que tu apellera avec des CALL dans ton event Click.
Marsh Posté le 13-08-2009 à 09:51:33
Et sans mettre le code ici, on aura du mal à te dire où couper, où faire les fonctions et comment etc.
Marsh Posté le 13-08-2009 à 09:59:10
question sudsidiere :comment copier un commentaire d'une cellule d'un workbook dans une autre cellule d'un autre workbook ?
J'ai essayé ca mais ca marche pas :
Cells(2, 2).ClearComments
Cells(2, 2).Select
Cells(2, 2).AddComment
Workbooks(1).Worksheets(1).Cells(3, 3).Comment.Text Text:=Workbooks(2).Worksheets(1).Cells(2, 2).Comment
exemple du code à compacter :
Code :
|
Marsh Posté le 13-08-2009 à 10:00:16
Code :
|
Marsh Posté le 13-08-2009 à 10:02:40
hint: tu peux passer des paramètres à tes fonctions.
hint2: ta fonction peut renvoyer une valeur de résultat.
Marsh Posté le 13-08-2009 à 10:03:48
excuse moi drasche mais je vois pas trop , peut tu me donner un exemple à partir de mon code ? merci
Marsh Posté le 13-08-2009 à 10:10:35
Bonjour,
Faire un
sub openwkb(nomfichier as string, compl_message as string)
Workbooks.Open Filename:="F:\013_DirFinTech\042_DptEtudes\018_SrvSupFiabSI\SOP - Support Offres Produits\Inventaire emprunteurs\Laurent\fichier nécessaire2\" & nomfichier
If Err.Number = 0 Then ' Pas d'erreur lors de l'ouverture du fichier
ts.Write "ouverture du fichier " & compl_message & "ok" & vbCrLf
Else
ts.Write "ouverture du fichier" & compl_message & "échec" & vbCrLf
End If
Err.Clear 'remettre à 0 la valeur de l'erreur
Marsh Posté le 13-08-2009 à 10:24:41
Re,
en regardant tes "copiés" il semble que tes liens entre PPA (récepteur) et
et CMLACO, CMB etc... soient fixes.
dans ce cas, au niveau de PPA, utilise , pour une cellule donnée la fonction = ....... en allant chercher la valeur dans le workbook désiré. Tu n'as pas besoin de VB pour faire cela.
Il semble que tu sois hyper-actif, hyper-courageux, mais essaye de réfléchir avant de toucher ton clavier!!!
Bonne journée.
Marsh Posté le 13-08-2009 à 10:33:21
ok merci papou , dit moi si c'est le bon truc alors
Si c'est bon dis moi comment integrer le tout dans un bouton merci bcp
Code :
|
Marsh Posté le 13-08-2009 à 10:36:40
et j'ai pas trop compris ta derniere remarque lol , si tu pouvez me faire encore un si beau exemple lol ... oui avec environ 5000 lignes comme ca ( change apres pas tjrs des copies lol ) ,je pense être le roi des courageux aux pays des imbécile
Marsh Posté le 13-08-2009 à 10:39:03
re,
tu n'es pas loin, mais remplace "function" par SUB, je crois que quelqu'un t'as déjà dit la différence entre function et sub.
si tu fais la mise à jour par le =...... dont je t'ai parlé, tu n'auras probablement pas besoin de faire tes open.....
pour intégrer le lancement de la "macro toto() dans ton bouton, au moment de la création de ton bouton, tu indiques le nom de la macro à lancer: ici ce sera toto
Marsh Posté le 13-08-2009 à 10:45:55
ok merci
mais pour lancer toto il faut mettre quoi comme instruction dans le
Private Sub CommandButton20_Click()
start sub toto() ?
et j'ai toujours pas trop compris l'histoire de la mise à jour avec le =
Marsh Posté le 13-08-2009 à 10:48:37
Re,
as-tu acheté des bouquins du style: ACCESS pour les nuls, et EXCEL pour les nuls, il n'y a pas grand chose dedans mais cela pourrait te servir pour connaître un certain nombre de possibilités, et, connaissant ces possibilités, tu pourrais réorganiser ton travail. Tu gagneras beaucoup de temps, en consacrant du temps à la réflexion Il y a peut-être d'autres bouquins, mais je ne connais pas trop......
Marsh Posté le 13-08-2009 à 10:48:55
call toto
C'est pas comme si t'avais jamais vu cette instruction en plus...
Marsh Posté le 13-08-2009 à 10:50:18
ok mais , je savais pas que l'on pouvez pas appelé des sub , aussi je croyais que c'était jsute des variables du type non du fichier ....
Marsh Posté le 13-08-2009 à 10:52:59
foxley_gravity a écrit : ok merci |
désolé Deamon, je n'avais pas vu ta réponse.
Marsh Posté le 13-08-2009 à 10:53:13
Mais des sub c'est comme des function mais ça renvoit rien c'est tout. Ce sont des fonctions les 2 que tu peux appeler.
Marsh Posté le 13-08-2009 à 11:00:23
foxley......, si j'ai le temps, je te prendrai en MP pour l'utilisation du signe =, dans l'après midi. C'est un peu le B A BA d'Excel et je crois qu'il n'est pas nécessaire de saturer les post's pour cela.
Marsh Posté le 13-08-2009 à 11:02:43
(il lui faudrait un tuto sur la prog, surtout)
Marsh Posté le 13-08-2009 à 11:06:41
drasche a écrit : (il lui faudrait un tuto sur la prog, surtout) |
C'est pas faute de lui avoir dit... Car vu tous les problèmes qu'il a il gagnerait du temps à lire un bouquin.
Marsh Posté le 13-08-2009 à 11:07:01
ReplyMarsh Posté le 13-08-2009 à 11:08:54
foxley_gravity a écrit : ok merci bcp papou , ca serait avec plaisir dis moi a quel heure .. |
aucune idée, mais je t'enverrai un Message dès que je suis disponible
Marsh Posté le 13-08-2009 à 11:13:32
ben vba pour excel ,et vba en général , mais sinon excel tout seul c'est bon ..
Marsh Posté le 13-08-2009 à 11:58:29
ok merci les call marche nickel seul probleme , au niveau du fichier log , il y a uniquement le commentaire du dernier call , qui apparait alors que moi je les voudrais tous , ie qu'il ne s'éfface pas au profit du dernier ...
en vous remerciant
Marsh Posté le 12-08-2009 à 17:13:02
Bonjour ,
toujours débutant en VBA j'ai une macro qui fait 365ko ..et ce message d'erreur m'apparait ...erreur de compilation procédure trop grande
En faite la quasi totalité du code est dans un Private Sub CommandButton_Click() ... mais le hic c'est que je pas trop la découpé en de petit bouton , car l'utilisateur devra appuyer que sur une bouton ( j'ai deja fait beucoup de boucle pour limité la longueur ..)
merci de donner idée et des solutions
ps : j'ai deux autres posts toujours en attente de réponses
cordialement