Précédent   Forum des professionnels en informatique > 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.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/02/2008, 17h37   #1
Membre confirmé
 
Avatar de dacid
 
Homme
Inscription : juin 2003
Messages : 859
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2003
Messages : 859
Points : 260
Points : 260
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 00
Vieux 25/02/2008, 10h20   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
Lorsque tu ajoutes une référence, tu peux dès la déclaration créer et lier ton "objet" (Early binding)

Code :
1
2
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 :
1
2
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 ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 10h28   #3
Membre confirmé
 
Avatar de dacid
 
Homme
Inscription : juin 2003
Messages : 859
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2003
Messages : 859
Points : 260
Points : 260
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 00
Vieux 25/02/2008, 11h11   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
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 ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 11h17   #5
Membre confirmé
 
Avatar de dacid
 
Homme
Inscription : juin 2003
Messages : 859
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juin 2003
Messages : 859
Points : 260
Points : 260
Dans mon code VBA ???

Je fait donc un truc comme ça :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    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 00
Vieux 25/02/2008, 11h36   #6
Rédacteur

 
Avatar de Maxence HUBICHE
 
Homme Maxence HUBICHE
Formateur et Développeur - Conseil en Informatique
Inscription : juin 2002
Messages : 3 687
Détails du profil
Informations personnelles :
Nom : Homme Maxence HUBICHE
Âge : 42
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Formateur et Développeur - Conseil en Informatique

Informations forums :
Inscription : juin 2002
Messages : 3 687
Points : 6 516
Points : 6 516
Envoyer un message via MSN à Maxence HUBICHE Envoyer un message via Skype™ à Maxence HUBICHE
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/
__________________
1formaxion, une formation de qualité, des formateurs compétents
Mes tutoriels et vidéos :
Tableaux croisés dynamiques, Access les Bases, et les autres !
Maxence HUBICHE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2008, 11h38   #7
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
Dans mon dernier exemple, je met

Tous les objets doivent être déclaré en Objet.

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

__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h31.


 
 
 
 
Partenaires

Hébergement Web