flostralian
Messages postés26Date d'inscriptionvendredi 15 mai 2009StatutMembreDernière intervention26 mars 2015
-
12 mai 2011 à 23:42
flostralian
Messages postés26Date d'inscriptionvendredi 15 mai 2009StatutMembreDernière intervention26 mars 2015
-
3 juin 2011 à 13:28
Bonjour à tous,
Après de longues recherches sur les forums, je n'ai pas trouvé la réponse à mon problème.
Le code a été validé mais après avoir rajouté des éléments, je me suis confronté au message d'erreur "Procedure too large". J'ai donc souhaité intégrer aux codes des fonctions Call (Appel) mais quand je lance le code principal, le programme s'arrête au niveau de la deuxième procédure.
Voici mon code:
sub monprogramme
' code du progamme
....
Call auxilaire
End Sub
--------------------
Sub auxiliaire
' Je demande a la macro d'aller chercher dans des cellules excel des données. le code en lui meme marche et a été testé.
'Mais VBA me souligne et bloque a la ligne suivante
wordDoc.Bookmarks("pso1").Range.Text = Worksheets("Cdt et Ps").Cells(9, 8)
wordDoc.Bookmarks("pso2").Range.Text = Worksheets("Cdt et Ps").Cells(10, 8)
End sub
Peut etre que je dois définir certains éléments? Quels sont les élements manquants?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 mai 2011 à 02:17
Salut Florian
Pas clair.
Tu parles de l'erreur "Procedure too large" et ensuite tu nous montres du code.
Mais l'erreur ne doit pas être celle-ci ?
Si ?
Si c'est too large, faut rétrécir, pas d'autre solution. La limite est quand même très large et voir cette erreur veut dire que tu as mal organisé ton programme - il doit y avoir beaucoup de choses qui se répètent.
Si le compilateur bloque, il dit toujours pourquoi, mais nous, on ne le sait pas.
Quelles sont les définitions (dimensionnement) de wordDoc ?
Quelles références as-tu ajoutées à ton programme pour accéder aux objets Word ?
wordDoc est-il ouvert ?
Les signets existent-ils ?
As-tu le droit de changer le texte d'un signet de cette manière ?
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
flostralian
Messages postés26Date d'inscriptionvendredi 15 mai 2009StatutMembreDernière intervention26 mars 2015 13 mai 2011 à 08:06
Bonjour,
Je pense que tu as raison est que j'ai surement mal organisé mon code puisque beaucoup de chose se répètent mais le code (avant changement ) marchait.
C'est la fonction Call qui me pose souci.
Comme indiqué ci dessus, elle a été intégrée mais le problème s’arrête à la première ligne de cette fonction call.
un message d'erreur s'affiche: Error 424 , Object required.
Le code en lui même, marche quand il est testé indépendamment .( Hors fonction Call).
Faut il définir un objet? un autre élément? La fonction se limite t elle à certaines macros?
Pour répondre à tes questions:
-Mon document Word est toujours fermé avant le début du programme et s'ouvre pendant son déroulement.
-Le doc Word contient tous les signets présents dans mon code vba.
-Toutes les données prennent source dans un classeur excel et vont dans un document word.
Les signés sont définis dans mon modèle Word et sont présents sans exeption dans Vba.
Concernant, les objets word je comprends pas trop....
J'espère avoir été plus clair.
Merci de ton aide
Florian
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 mai 2011 à 10:11
Ok, c'est plus clair quant à l'erreur.
Sur cette ligne, il lui manque un objet.
C'est wordDoc ou Worksheets qui pose problème.
Ta syntaxe sous-entend que tu es sous Excel.
Donc Worksheets("Cdt et Ps") doit être correct et ouvert|accessible. Peut-être faut-il préciser le ActiveWorkbook ou rappeler le nom du classeur.
Mais je pencherais plus pour l'objet wordDoc :
Si tu as déplacé ces lignes dans une Sub/Function, tu as peut-être oublié de passer cet objet en paramètre afin d'être accessible, ...
Comment et où est-il déclaré ?
Es-tu familier de l'usage/manipulation/étendue des variables ?
Si tu as déclaré/dimensionné wordDoc dans la Sub principale devenue trop longue, la variable n'existe que dans cette Sub.
Alors, deux solutions :
- Tu déplaces la déclaration de l'objet dans la partie Déclarations de ta page de code afin que toute la page de code puisse y avoir accès
- Tu fournis à ta Sub auxiliaire un paramètre faisant référence à cet objet :
Sub Auxiliaire(ByRef wordDoc As XXXX)
où tu remplaceras XXXX par le type adéquat, je pense Word.Document, et tu fais le call ainsi :
Call Auxiliaire(wordDoc)
Nota : Ici, pour simplifier la syntaxe, j'ai appelé la variable déclarée dans la Sub de la même manière que l'objet passé, ceci afin de t'éviter d'avoir à modifier le code de cette Sub auxiliaire, mais garde en tête que se sont deux choses/objets différentes - l'objet de la Sub auxiliaire n'est qu'un 'lien' vers l'objet source.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 13 mai 2011 à 10:15
As-tu tenté un débogage ?
Quand le programme s'arrête sur cette ligne, est-ce :
- avant l'exécution lors d'une demande de compilation
- ou bien lors du passage pendant l'exécution ?
Dans ce 2ème cas, ouvre la fenêtre de débug avec Ctrl-G et tape
? wordDoc.Name
Si le nom du document ressort sans problème, ce n'est pas là le problème.
Vous n’avez pas trouvé la réponse que vous recherchez ?
flostralian
Messages postés26Date d'inscriptionvendredi 15 mai 2009StatutMembreDernière intervention26 mars 2015 3 juin 2011 à 13:28
Salut,
je viens juste de retravailler sur le code
J'ai essayé de comprendre et de suivre tes conseils, et le code marche en intégrant au début de la deuxième fonction le code ci dessous:
Sub XXXXX (ByRef wordDoc As Word.Document)
Dim wordApp As Word.Application
Dim wordDoc As Word.Document
Set wordApp = GetObject(, "Word.Application")
wordApp.Visible = True
Set wordDoc = wordApp.Documents.Open("C:\Documents and Settings\....\.XXXXXXX.doc")
wordDoc.Bookmarks("pso1").Range.Text = Worksheets("Cdt et Ps").Cells(9, 8)
wordDoc.Bookmarks("pso2").Range.Text = Worksheets("Cdt et Ps").Cells(10, 8)