Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
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 28/08/2006, 17h29   #1
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
Par défaut Word implentation d'une macro par un programme exterier puis supression a la fin

Est il possible sous Word le document etant ouvert, d'implenter avec un programme exterieurs une macro, puis apres execution de l'effacer.
Je peu appeler l'editeur mais il est en miniature dans la barre de tache je ne sais pas comment activer la page et inserrer un module
Sous Excel je sais que cela est possible d'inserrer, executer, detruire la macro de l'exterieur
le code d'appel de l'editeur:
Code :
1
2
 
ShowVisualBasicEditor = True
le but est d'appeler un fichier d'utilisateur d'effectuer un traitement de restituer le fichier sans aucune macro
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 17h32   #2
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
ben pour exécuter une macro sur document, la macro n'as pas à être forcément dans ce document...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 17h41   #3
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
c'est que je ne vois pas comment faire car je vais utiliser un programme en langage C, c'est pour cela que j'avais pense a l'ecrire temporairement sur le document
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 17h43   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
ben on peu imaginer que depuis ton programme en C tu lance une macro Word existante.. celle-ci se chargeant d'agir sur le bon document...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 17h47   #5
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
A tu un exemple s'il te plait je ne vois vraiment pas comment faire
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 17h55   #6
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
J'ai oublie de preciser chaque utilisateur a un document mais chaque document est different.
Si j'avais pu ouvrir un module VB un copier/colle par le presse papier aurait pu marcher je pense.
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 17h57   #7
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
tu as déjà un peu de code vb...? à montrer...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 18h02   #8
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
Non et c'est la mon probleme
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 18h04   #9
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
je comprends pas et c'est quoi le code que tu ve intégrér dans document WOrd..
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/08/2006, 18h15   #10
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
Des noms, des chiffres, et d'autres renseignements afin d'allimenter une base de donnees
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 08h57   #11
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
J'ai trouve ca dans l'aide VB
Citation:
VBProject, propriété
Renvoie l'objet VBProject pour le modèle ou le document spécifié.

expression.VBProject
expression Obligatoire. Expression qui renvoie l’un des objets de la liste S’applique à.

Notes
Utilisez cette propriété pour pouvoir accéder aux modules de code et aux formulaires utilisateur.

Pour afficher l'objet VBProject dans l'Explorateur d'objets, vous devez activer la case à cocher Microsoft Visual Basic pour Applications dans la boîte de dialogue Références (menu Outils) de Visual Basic Editor.

Exemples
Cet exemple montre comment afficher le nom du projet Visual Basic pour le modèle Normal.

Set normProj = NormalTemplate.VBProject
MsgBox normProj.Name

Cet exemple montre comment afficher le nom du projet Visual Basic pour le document actif.

Set currProj = ActiveDocument.VBProject
MsgBox currProj.Name

Cet exemple montre comment ajouter un module de code standard au document actif et le renommer « MyModule ».

Set newModule = ActiveDocument.VBProject.VBComponents _
.Add(vbext_ct_StdModule)
NewModule.Name = "MyModule"
J'ai implante les morceaux de programme un a un pour les tester
j'ai a chaque fois une erreur d'excution '6068'
l'acces programmique a visual basic project n'est pas approuve
apparemment j'ai bien active la case a cocher comme indique plus haut (outils->references...)
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 11h02   #12
Rédacteur
 
Homme michel Tanguy
Inscription : août 2005
Messages : 3 317
Détails du profil
Informations personnelles :
Nom : Homme michel Tanguy
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : août 2005
Messages : 3 317
Points : 10 706
Points : 10 706
bonjour

je n'ai pas tout compris à ta demande mais tu peux tester cette procedure qui:

prend en compte un document Word ouvert
y insere un module
cree dynamiquement une macro dans ce module
lance la macro
supprime la macro
supprime le module

....c'est juste pour le fun car il me semble que ce serait beaucoup plus simple d'ecrire directement dans le document Word par macro ...;o)


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Sub test()
Dim Appli As Word.Application
Dim WordDoc As Word.Document
Dim VBComp As Object
Dim X As Integer
 
On Error Resume Next
Set Appli = GetObject(, "Word.Application")
'Prend en compte le document Word ouvert
Set WordDoc = Appli.Documents("C:\leDocument.doc")
On Error GoTo 0
 
'Creation d'un module standard dans le document
Set VBComp = WordDoc.VBProject.VBComponents.Add(1)
 
'Ajout dynamique de procedure
With WordDoc.VBProject.VBComponents(VBComp.Name).CodeModule
    X = .CountOfLines
    .InsertLines X + 1, "Sub laMacro()"
    .InsertLines X + 2, "ActiveDocument.Content.Text = ""Coucou"""
    .InsertLines X + 3, "End Sub"
    DoEvents
 
    'Lancement de la macro
    Appli.Run "laMacro"
 
    'Supprime le procedure
    .DeleteLines 1, .CountOfLines
End With
 
'Suppression du module
WordDoc.VBProject.VBComponents.Remove VBComp
End Sub

bonne journée
michel
SilkyRoad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 11h16   #13
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
SilkyRoad a ecrit:
Citation:
bonjour

je n'ai pas tout compris à ta demande mais tu peux tester cette procedure qui:

prend en compte un document Word ouvert
y insere un module
cree dynamiquement une macro dans ce module
lance la macro
supprime la macro
supprime le module

....c'est juste pour le fun car il me semble que ce serait beaucoup plus simple d'ecrire directement dans le document Word par macro ...;o)
Merci pour ta reponse SilkyRoad je vais la tester je pense a lecture du code que cela correspond a mon attente

Je ne peux pas le faire par macro VB car le programme appelant est en C je dois convertir le code c'est parfois long mais pas impossible

Pour info le but est de ne laisser aucun code VB sur les Documents des utilisateurs
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 11h24   #14
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
Citation:
Envoyé par blondelle
..
Pour info le but est de ne laisser aucun code VB sur les Documents des utilisateurs
alors pourquoi en mettre...? ... de quel "C" parle tu..?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 13h12   #15
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
bbil a ecrit:
Citation:
alors pourquoi en mettre...? ... de quel "C" parle tu..?
on peut intervenir sur Word en utilisant les fonctions OleWord de Cbuilder6.
Les Macros peuvent etres convertis mais certaines il vaut mieux les conserver en VB.
Le fait de ne pas laisser de macro est uniquement pour la securite il ne peut y avoir aucunne erreur de manipulation
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 15h09   #16
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
SilkyRoad a ecrit:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
Sub test()
Dim Appli As Word.Application
Dim WordDoc As Word.Document
Dim VBComp As Object
Dim X As Integer
 
On Error Resume Next
Set Appli = GetObject(, "Word.Application")
'Prend en compte le document Word ouvert
Set WordDoc = Appli.Documents("C:\leDocument.doc")
On Error GoTo 0
 
'Creation d'un module standard dans le document
Set VBComp = WordDoc.VBProject.VBComponents.Add(1)
 
'Ajout dynamique de procedure
With WordDoc.VBProject.VBComponents(VBComp.Name).CodeModule
    X = .CountOfLines
    .InsertLines X + 1, "Sub laMacro()"
    .InsertLines X + 2, "ActiveDocument.Content.Text = ""Coucou"""
    .InsertLines X + 3, "End Sub"
    DoEvents
 
    'Lancement de la macro
    Appli.Run "laMacro"
 
    'Supprime le procedure
    .DeleteLines 1, .CountOfLines
End With
 
'Suppression du module
WordDoc.VBProject.VBComponents.Remove VBComp
End Sub
la ligne.
Code :
1
2
 
Set VBComp = WordDoc.VBProject.VBComponents.Add(1)
J'ai teste le code malheureusement il provoque une erreur "91"
Citation:
variable objet ou variable de bloc with non definie
et VBComp = Nothing
Je suis incapable de trouver la reponse a ce probleme.
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 15h17   #17
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
c'est pas du C ce code .. va bien falloir le mettre quelque part ...


ou as tu mis ce code ? si VBCOmp = Nothing... que vaut WordDoc ...?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 15h29   #18
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
bbil a ecrit:
Citation:
ou as tu mis ce code ? si VBCOmp = Nothing... que vaut WordDoc ...?
J'ai ouvert un document et j'ai implante le code dans un module pour essayer.
effectivement WordDoc = Nothing donc je ne charge pas le fichier apparement le chemin est bon j'ai fait au plus simple
Citation:
Set WordDoc = Appli.Documents("C:\book1.doc")
Je viens de faire un essai en changeant le fichier c'est toujours pareil?
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 15h36   #19
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 854
Points : 16 854
Envoyer un message via Skype™ à bbil
dans ce cas il faut que C:\book1.doc .. soit ouvert... (et le code tu le met bien dans un autre document WORD...)
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/08/2006, 15h59   #20
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 496
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 496
Points : 2 308
Points : 2 308
bbil a ecrit:
Citation:
dans ce cas il faut que C:\book1.doc .. soit ouvert... (et le code tu le met bien dans un autre document WORD...)
Je me suis apercu effectivement que le fichier devait etre ouvert
J'ai donc deux documents ouvert en meme temps maintenant WordDoc = "c:\book1.doc"
Citation:
j'ai cette fois une erreur d'excution '6068'
l'acces programmique a visual basic project n'est pas approuve
apparemment j'ai bien active la case a cocher microsoft visual basic pour applications (outils->references...)
y a t'il autre chose a faire?
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h05.


 
 
 
 
Partenaires

Hébergement Web