Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Général VBA

Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.

Réponse
 
Outils de la discussion
Vieux 22/02/2008, 17h37   #1 (permalink)
Membre chevronné
 
Avatar de dacid
 
Date d'inscription: juin 2003
Messages: 610
Par défaut [VBA 2003] Import de module->Perte de références

Bonjour à tous,

Je fait de l'automation Word depuis Delphi.
Utilisant des macros similaires pour plusieurs modèles Word, j'ai décidé de les stoquer dans un fichier bas commun que j'importe de cette manière:
Code :
vDoc.VBProject.VBComponents.Import (MonChemin+'\Module1.bas');
Seulement, dans ces macros, je fait de l'appel aux données en utilisant l'objet DAO, ce qui impose qu'il doit se trouver dans les références du fichier Word concerné.
Seulement, j'ai beau le mettre et enregistrer dans le modèle... Il le garde bien, mais le document généré depuis ce modèle ne garde pas les références de son modèle.
Si bien que les macros se chargent bien, mais je ne peux pas les utiliser.

Je l'ai ajouté au normal.dot, mais ca ne change rien.

Comment faire pour contourner le problème (ou au pire, ajouter dynamiquement cette référence depuis le module bas ou Delphi).

Merci d'avance.
__________________
David.
dacid est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/02/2008, 10h20   #2 (permalink)
Responsable Word
 
Avatar de Heureux-oli
 
Date d'inscription: février 2006
Localisation: Morlanwelz (Carnières)
Âge: 44
Messages: 10 113
Par défaut

Lorsque tu ajoutes une référence, tu peux dès la déclaration créer et lier ton "objet" (Early binding)

Code :
Dim wApp as Word.Application
Set wApp = CreateObject("Word.Application")
Ou encore

Code :
Dim wApp as New Word.Application

Mais en VBA, il est possible de faire du (Late Binding)

Code :
Dim wApp As Object
set wApp = CreateObject("Word.Application")
Dans ce dernier cas, la référence ne doit pas être ajoutée.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Ne posez pas de question par MP, c'est inutile.
Les rubriques Office recrutent.
Ma page d'accueil
Consultez nos FAQ !! Word ; Access ; Outlook ; Excel ; PowerPoint ; SharePoint
Si vous pensez que certains sujets manquent dans la FAQ, aidez nous !
Des images
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 25/02/2008, 10h28   #3 (permalink)
Membre chevronné
 
Avatar de dacid
 
Date d'inscription: juin 2003
Messages: 610
Par défaut

Bonjour Heureux-oli,

Merci pour ta rapidité, mais je ne vois pas du tout à quel moment l'ajout de référence intervient dans ton exemple.

En fait, ce que tu donnes, je le fait dans Delphi, ensuite, je fait un:
vDoc.VBProject.VBComponents.Import ('monModule.bas');
(vDoc étant l'instance du document Word désiré)

Seulement, je comptait faire l'ajout de référence dans 'monModule.bas'.
Mais il ne connait pas l'objet 'Reference'.
Ca n'en finit plus.
__________________
David.
dacid est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/02/2008, 11h11   #4 (permalink)
Responsable Word
 
Avatar de Heureux-oli
 
Date d'inscription: février 2006
Localisation: Morlanwelz (Carnières)
Âge: 44
Messages: 10 113
Par défaut

A aucun moment.
Si dans ton code tu utilises mon dernier morceau pour la déclaration de ton code, tu n'as pas besoin de déclarer la référence.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Ne posez pas de question par MP, c'est inutile.
Les rubriques Office recrutent.
Ma page d'accueil
Consultez nos FAQ !! Word ; Access ; Outlook ; Excel ; PowerPoint ; SharePoint
Si vous pensez que certains sujets manquent dans la FAQ, aidez nous !
Des images
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 25/02/2008, 11h17   #5 (permalink)
Membre chevronné
 
Avatar de dacid
 
Date d'inscription: juin 2003
Messages: 610
Par défaut

Dans mon code VBA ???

Je fait donc un truc comme ça :
Code :
    Dim wApp as Word.Application
    Set wApp = CreateObject("Word.Application")
    Dim mydb As DAO.Database
    Dim myRS As DAO.Recordset
    Set mydb = DAO.OpenDatabase(chemBase)
    mySQL = "SELECT * FROM TblStyles WHERE Id=" & myId
    Set myRS = mydb.OpenRecordset(mySQL)
    myRS.MoveFirst
    While Not myRS.EOF
        Coloriage_Style myRS("NomStyle"), Couleur, myRS("FondouPolice")
        myRS.MoveNext
    Wend
    myRS.Close
    Set myRS = Nothing
Et ca suffit ?

Très bien, j'essaye ça dans quelques instants.

Merci.
__________________
David.
dacid est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/02/2008, 11h36   #6 (permalink)
Responsable MSOffice

 
Avatar de Maxence HUBICHE
 
Date d'inscription: juin 2002
Localisation: Argenteuil (95)
Messages: 3 561
Par défaut

hum ! hum !
J'ai peur d'avoir compris, et pense que la solution n'est pas (complètement) là.


Effectivement, comme l'à dit Heureux-Oli, le Late-Binding te permettra de t'affranchir des références.
Mais, si tu as à créer un document word, tu as d'office les références à Word. Partant, le CreateObject ne sert plus à grand-chose pour les bjets de Word.
Là où tu en aurais plutôt besoin, ce serait pour tes objets DAO qui ne sont pas référencés, par défaut, dans un projet Word.



Une autre possibilité, c'est d'ajouter les références à la volée dans ton projet.
Pour cela, regardes donc le tutoriel suivant:
http://sinarf.developpez.com/access/autoref/
__________________
MVP Office Systems - Access
Je ne réponds pas aux questions techniques par MP

surtout ne cliquez pas >>là<< je vous aurai prévenu !
Profil LinkedIn <=> Viadeo
Pour une formation de qualité : 1formaxion
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 25/02/2008, 11h38   #7 (permalink)
Responsable Word
 
Avatar de Heureux-oli
 
Date d'inscription: février 2006
Localisation: Morlanwelz (Carnières)
Âge: 44
Messages: 10 113
Par défaut

Dans mon dernier exemple, je met

Code :
Dim wApp as Objet
Tous les objets doivent être déclaré en Objet.

Code :
Dim oDoc as Object
Set oDoc = wApp.Documents.Add
Pareil pour le DAO

Code :
Set rs as Object
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Ne posez pas de question par MP, c'est inutile.
Les rubriques Office recrutent.
Ma page d'accueil
Consultez nos FAQ !! Word ; Access ; Outlook ; Excel ; PowerPoint ; SharePoint
Si vous pensez que certains sujets manquent dans la FAQ, aidez nous !
Des images
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation
NEWS MS-OFFICEFAQs OFFICETUTORIELS OFFICELIVRES OFFICESOURCES VBAACCESS

Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Général VBA

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide