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

Macros et VBA Excel Discussion :

ouvrir un fichier word dans macro vba


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut ouvrir un fichier word dans macro vba
    bonjour,

    Je suis certaine que la solution est tres proche mais je n'arrive pas a trouver la syntaxe correcte...

    Ceci fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyAppID = Shell("Winword.EXE ""H:\BUE face-lift\Demarche de mise en place\1zsc003699-AAA\" & File01 & ".doc""", 1)
    Mon but: remplacer les chemin d'acces par une variable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto = "H:\BUE face-lift\Demarche de mise en place\1zsc003699-AAA\"
    En théorie je mettrais ceci, mais... à corriger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyAppID = Shell("Winword.EXE "toto & File01 & ".doc""", 1)
    C'est une ligne de commande trouvée sur le net. Ce qui explique pourquoi je n'arrive pas a la maitriser: je ne comprends pas les doubles "

    Merci pr toute aide!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    La syntaxe suivante est plus correcte à mon goût, puisqu'au lieu de lancer le fichier via une commande Shell, elle le lance en tant qu'objet, que tu peux aisément manipuler après.

    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
        Dim WordApp As Object
        Dim WordDoc As Object
        Dim titre as String
     
    titre = "H:\BUE face-lift\Demarche de mise en place\1zsc003699-AAA\" & File01 & ".doc"
     
        Set WordApp = CreateObject("Word.Application")
        Set WordDoc = WordApp.Documents.Open(titre)
     
    ...
     
        WordDoc.Close
        WordApp.Quit
     
        Set WordDoc = Nothing
        Set WordApp = Nothing
    Pour info, les doubles " servent à écrire un " dans une chaîne de caractères (pour ne pas confondre avec les simples " qui délimitent une chaîne de caractères). Ainsi MsgBox "Bonjour ""toto""" affichera: Bonjour "toto"

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Je suppose que ca fonctionne... (ouvert en arriere plan? je ne le vois pas... juste que le fichier tmp crée lors de l'ouverture qui apparait... ca va pas etre evident de gerer les actions suivantes!)

    Aurais tu un lien ou ... autre pr m'aider ds la suite? J'ai deja fais 2 ou 3 macros xls mais jamais liées a word...

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Pour info, tu peux aussi ouvrir le document avec l'Api ShellExecute bien que groslou2 t'as, à mon sens, donné la meilleure solution si ensuite tu veux travailler sur ton document par macro :
    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
     
    Private Declare Function ShellExecute _
                    Lib "shell32.dll" _
                    Alias "ShellExecuteA" (ByVal hwnd As Long, _
                                           ByVal lpszOp As String, _
                                           ByVal lpszFile As String, _
                                           ByVal lpszParams As String, _
                                           ByVal lpszDir As String, _
                                           ByVal FsShowCmd As Long) As Long
     
     
    Sub Ouvrir()
     
        Dim Retour As Long
     
        Retour = ShellExecute(0, "open", Toto & File01 & ".doc", "", "", 3)
     
        If Retour = 2 Then
     
            MsgBox "Le fichier " & Fichier & " est introuvable !"
     
        End If
     
    End Sub
    Hervé.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    Pour voir ton doc, il faut rajouter:

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    cool!
    Bien, donc je laisse tomber avec le shell: ce qui m'arrange vu que j'y connais pas grd chose.

    Du coup je manipule un objet... bien. Comment on fait ca ?
    J'ai que des copiés/collés a faire... pourrAIS TU ME DONNER 2 OU 3 COMMANDES, APRES JE CHERCHERAI SUR LE NET PR LES UTILISER OU PLUS...

    ops désolée

  7. #7
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Si tu travailles avec des objets typés, tu bénéficies de l'intellisense et des capacités du debogueur.
    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
        Dim WordApp As Word.Application
        Dim WordDoc As Word.Application
        Dim titre as String
     
    titre = "H:\BUE face-lift\Demarche de mise en place\1zsc003699-AAA\" & File01 & ".doc"
     
        Set WordApp = New Word;Application
        Wdapp.Visible = True
        Set WordDoc = WordApp.Documents.Open(titre)
     
        WordDoc.Bookmarks("sgnNom").Range.Text = "Machepreau"
    ...
     
        WordDoc.Close wdSaveChanges
        WordApp.Quit wdDonNotSaveChanges
     
        Set WordDoc = Nothing
        Set WordApp = Nothing
    Cordialement,

    PGZ

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    Comme le souligne à juste titre pgz, ce qui est pratique avec l'objet WordDoc, c'est de pouvoir remplir des signets word avec Excel. Pour info, les signets (fonction insertion/signet sous word) sont des petites balises que tu insères où tu veux dans un document word et auxquelles tu donnes un nom pour pouvoir les récupérer facilement (en particulier à partir d'une macro). La fonction suivante permet de remplir un signet d'un doc word à partir d'Excel, sans détruire le signet (comme ça tu peux le remodifier par la suite).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub RemplirSignet(WordDoc As Object, Signet As String, Texte As String)
     
        Dim Place As Long
        Place = WordDoc.Bookmarks(Signet).Range.Start
        WordDoc.Bookmarks(Signet).Range.Text = Texte
        WordDoc.Bookmarks.add Name:=Signet, Range:=WordDoc.Range(Place, Place + Len(Texte))
     
    End Sub
    Pour remplir le signet "mon_signet" avec le texte "bonjour", il suffit de faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call RemplirSignet(WordDoc, "mon_signet", "bonjour")
    dans ta macro Excel.
    Ainsi, tu peux remplir des champs où tu veux dans un doc word. Tu peux mettre des images, des tableaux ...

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Ca m'arrange que vous tombiez d'accord car je me suis demandée un instant ce qu'il valait mieux utiliser.
    Je dois faire des copies de cellules xls (ca je pense que ca va pas etre difficile) vers des endroits précis dans le document word.
    Tel que je le comprends, il suffit de mettre des balise dans tous les champs que je veux remplir?

    Question parralele: ce document word est en qq sorte un "standard" et je ne sais pas si je suis autorisée a le modifier (et dons a y mettre des balises!). La collegue est absente pour le moment je lui demanderai plus tard. Y a t il donc une autre solution?

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    Le problème dans word, c'est de se localiser. Tout dépend à quoi tu veux te raccrocher pour localiser l'endroit que tu veux modifier: un numéro de chapitre? un groupe de mots? un tableau? une image?...
    A chaque méthode correspondent des fonctions VBA plus ou moins simples à utiliser...
    Sinon, pour info les signets sont invisibles à l'impression (on peut les afficher sous word -> ça met des parenthèses grises) et pour ce que tu veux faire, c'est vraiment ce qu'il y a de plus simple et surtout de plus robuste.

  11. #11
    Membre actif
    Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2006
    Messages
    240
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 240
    Points : 275
    Points
    275
    Par défaut
    Perso j'avais testé sans signet mais c'est quasi impossible à gérer.

    mise à part si tu veux des table de donnée dynamique. Ou dans ce cas tu peux utilisé des formats de tableaux bien spécifique mais ça devient assez compliquer dans un sens.

  12. #12
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'ai bien compris ce qu'est un signet et l'idée me plait bien! (en plus, si le document change les balises peuvent suivre!)
    Mais est il possible de changer un standard... je sais pas.
    Pt'et que je ne changerai que MA version (a)

    En essayant ce code j'ai.. 2 ou 3 problems. Je me demandais si c'etait bien pour excel 2003...

    1)
    "user-defined type not defined" a la 1ere ligne! (dim WordApp as Word.Application)

    2)
    "Expected: end of statement" a la ligne "Set WordApp=NewWord;Application

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    Le code de pgz est bon, mais il te faut rajouter un module pour qu'il marche (outils/références dans Excel VBA -> cocher "Microsoft Office numero_de_version Object Library"). sinon, si tu utilises ma syntaxe, ça devrait marcher sans ajout de module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim WordApp As Object
        Dim WordDoc As Object
        Dim titre as String
     
    titre = "H:\BUE face-lift\Demarche de mise en place\1zsc003699-AAA\" & File01 & ".doc"
     
        Set WordApp = CreateObject("Word.Application")
        Set WordDoc = WordApp.Documents.Open(titre)

  14. #14
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Ta synthaxe fonctionne... Pour l'autre je ne sais pas, le module était déjà coché...

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    Exact, en fait il faut cocher: "Microsoft Word numero_de_version Object Library".

  16. #16
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'ai toujours la 2eme ereure... pas grave j'utilise l'autre synthaxe (qui a ce que je sais donne le meme résultat)

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    Y'avait une petite coquille (. au lieu de ; ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set WordApp = New Word.Application

  18. #18
    Futur Membre du Club
    Inscrit en
    Mars 2011
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Il me semblais bien que ce ";" était bizare...

    J'ai fais un 1er test avec un signet, fructueu.

    Donc l'etape suivante est: peut on aussi passer en argument des valeur, des colonnes... ? (tu as tout défini en text dans ton exemple...)

  19. #19
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Re,

    Au temps pour moi. En fait il y a 2 erreurs :
    1. le ";" est une faute de frappe pour "."
    2. Dans les déclarations c'est
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Dim WordDoc as Word.Document

    Ce qui arrives quand on tape en vitesse et sans tester.

    Cordialement,

    PGZ

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    Tu peux peux aussi passer des nombres en argument. En revanche, pas d'image ou de tableau.

    Pour un tableau, c'est comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Set MonRange = WordDoc.Bookmarks("mon_signet").Range
    Set MaTable = WordDoc.Tables.Add(Range:=MonRange, numrows:=nombre_de_lignes,
    numcolumns:=nombre_de_colonnes)
    MaTable.AutoFormat Format:=wdTableFormatContemporary
    MaTable.Cell(1, 1).Range.Text = "Case 1-1"
    MaTable.Cell(1, 2).Range.Text = "Case 1-2"
    ...

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

Discussions similaires

  1. [AC-2007] Ouvrir un fichier word dans un formulaire
    Par glooping dans le forum IHM
    Réponses: 7
    Dernier message: 27/08/2009, 09h42
  2. Ouvrir un fichier word dans le répertoire parent
    Par gangsterus dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 19/03/2009, 14h26
  3. Ouvrir un fichier word à partir de VBA
    Par stephnovice dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/02/2009, 20h20
  4. Ouvrir un fichier Word dans Access
    Par voyou dans le forum Access
    Réponses: 2
    Dernier message: 25/10/2006, 11h24
  5. [COM] Ouvrir un fichier Word dans PHP
    Par TomZ dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 24/03/2006, 13h58

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