IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Word implentation d'une macro par un programme exterier puis supression a la fin


Sujet :

VBA Word

  1. #1
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShowVisualBasicEditor = True
    le but est d'appeler un fichier d'utilisateur d'effectuer un traitement de restituer le fichier sans aucune macro

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    ben pour exécuter une macro sur document, la macro n'as pas à être forcément dans ce document...

  3. #3
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    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

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    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...

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    A tu un exemple s'il te plait je ne vois vraiment pas comment faire

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    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.

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    tu as déjà un peu de code vb...? à montrer...

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Non et c'est la mon probleme

  9. #9
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    je comprends pas et c'est quoi le code que tu ve intégrér dans document WOrd..

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Des noms, des chiffres, et d'autres renseignements afin d'allimenter une base de donnees

  11. #11
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    J'ai trouve ca dans l'aide VB
    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...)

  12. #12
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  13. #13
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    SilkyRoad a ecrit:
    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

  14. #14
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    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..?

  15. #15
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    bbil a ecrit:
    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

  16. #16
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    SilkyRoad a ecrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set VBComp = WordDoc.VBProject.VBComponents.Add(1)
    J'ai teste le code malheureusement il provoque une erreur "91"
    variable objet ou variable de bloc with non definie
    et VBComp = Nothing
    Je suis incapable de trouver la reponse a ce probleme.

  17. #17
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    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 ...?

  18. #18
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    bbil a ecrit:
    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
    Set WordDoc = Appli.Documents("C:\book1.doc")
    Je viens de faire un essai en changeant le fichier c'est toujours pareil?

  19. #19
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    dans ce cas il faut que C:\book1.doc .. soit ouvert... (et le code tu le met bien dans un autre document WORD...)

  20. #20
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    bbil a ecrit:
    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"
    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?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Démarrage d'une macro par Enter ou par Tabulation
    Par Le POlonais dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/12/2007, 08h46
  2. Impression d'un document Word fermé dans une macro Excel
    Par Le POlonais dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/11/2007, 10h00
  3. Démarrage d'une macro par SQL Server
    Par PiercingDegree dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/09/2005, 09h13
  4. VB Word : appel d'une macro depuis l'extérieur
    Par pezz dans le forum VBA Word
    Réponses: 2
    Dernier message: 24/02/2005, 10h28
  5. Réponses: 2
    Dernier message: 05/12/2003, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo