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 :

[VBA]Récupération de données d'un formulaire Word pour les envoyer vers Excel


Sujet :

VBA Word

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut [VBA]Récupération de données d'un formulaire Word pour les envoyer vers Excel
    Bonjour,

    Voici mon problème :

    - d'un côté j'ai un formulaire Word, avec des zones, des listes déroulantes.
    - de l'autre, ma feuille excel.

    Je veux récupérer les données des zones du formulaire Word pour les incoporer dans mon fichier excel. Malheureusement cela fait plusieurs heures que je bute !

    Voici le début de mon code : (merci dado91400) (mon premier champ texte du formulaire à pour signet "NumeroFiche"

    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
     
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
     
    FileToOpen = Application.GetOpenFilename("Nom fichier,*.doc") 'selection du nom du fichier à traiter
     
        Set WordApp = CreateObject("word.application")    'ouvre une session Word
        Set WordDoc = WordApp.Documents.Open(FileToOpen)    'ouvre le document Word
        WordApp.Visible = True    'Word n'est pas masqué pendant l'opération
     
        WordDoc.Bookmarks("NumeroFiche").Range.Text = "blabla"
     
     
     
     WordApp.Quit (False)   'ferme Word et le document sans sauvegarde
    La réponse est "le membre de la collection requi n'existe pas" (à propos du bookmarks)

    Si je me sers des FormFields, la réponse est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    numero = WordDoc.FormFields("NumeroFiche").Result
    la réponse est : "erreur défini par l'application ou par l'objet"

    Est ce que quelqu'un peut me sortir de l'impasse s'il vous plait !!!

    Merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Essaie d'être un peu plus clair, parce que je ne comprends pas vraiment le lien entre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Bookmarks("NumeroFiche").Range.Text = "blabla"
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero = WordDoc.FormFields("NumeroFiche").Result
    D'un côté, tu as un signet qui s'appelle "NumeroFiche" tu lui affecte le texte blabla.
    De l'autre côté, tu as un champ du formulaire "NumeroFiche" pour en extraire une valeur.
    Mis à part qu'il ont le même nom !
    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 !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    Pour être plus clair :

    Dans mon formulaire word, j'ai un "Champ texte".
    Lorsque je je regarde "Option de ce champ", je lui donne comme "signet" : "NumeroFiche"

    J'aimerais récupérer la valeur de ce champ depuis une macro programmée dans une feuille EXCEL (je code donc dans Excel) :

    J'ai donc essayé en premier lieu d'avoir une action sur ce champs, afin de voir comment on le reconnait depuis excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Bookmarks("NumeroFiche").Range.Text = "blabla"
    VB a généré une erreur lors du débogage : "le membre de la collection requi n'existe pas"

    J'ai donc modifier mon code. La reconnaissance par signet de ce champ texte "NumeroFiche" ne marchant pas, j'ai essayé de reconnaitre directement le champ formulaire par son nom.

    J'ai alors remplacé le code précédent par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numero = WordDoc.FormFields("NumeroFiche").Result
    Cette fois ci, la réponse fut : "erreur défini par l'application ou par l'objet"

    J'ai essayé depuis de tourné ça dans tous les sens, mais je n'arrive pas à récupérer la valeur du champ texte "NumeroFiche".

    As-tu une idée ?

    En tout cas les : merci pour ta réponse ! Je me sens soutenu !

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Le membre de la collection n'existe pas, c'est normal, le formulaire n'est pas ouvert.


    Il faut aller chercher l'information directement dans le document.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Activedocuemnt.bookmarks("NumeroFiche").range.text
    si le document est ouvert et actif.

    Si c'est pas le cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim MyWord As New Word.Application
    Dim MonDoc As Document
     
    MonDoc = MyWord.Documents.Open("MonChemin + document")
     
    MonDoc.Bookmarks("MonSignet").Range.Text
    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 !

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    Voici le début de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim WordApp As Word.Application
        Dim WordDoc As Word.Document
     
        FileToOpen = Application.GetOpenFilename("Nom fichier,*.doc") 'selection du nom du fichier à traiter
     
            If FileToOpen = Faux Then  'evite le bug si on clique sur annuler dans la boite d'ouverture du fichier
                Exit Sub
            Else
                Set WordApp = CreateObject("word.application") 'ouvre une session Word
                Set WordDoc = WordApp.Documents.Open(FileToOpen)    'ouvre le document Word
                WordApp.Visible = True
            End If
    Jusque là tout va bien, je choisis le document que je veux ouvrir, il s'ouvre et il est visible.

    Maintenant si je mets à la suite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        WordDoc.Activate
        numero = ActiveDocument.Bookmarks("NumeroFiche").Range.Text
    Voici la réponse : "erreur défini par l'application ou par l'objet"

    Si je remplace le code ci dessus par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    numero = WordDoc.Bookmarks("NumeroFiche").Range.Text
    Il me repond la même chose

    Je continue à chercher de mon côté, encore mille merci pour tes lumières même si je suis toujours dans les ténèbres... (oulala le craquage n'est pas loin lol)

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    La partie que je t'ai donnée, fonctionne, c'est après test que je l'ai mise en ligne.

    Par contre, là où je rencontre un problème, c'est avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.GetOpenFileName
    Je n'ai pas cette méthode pour l'application Word en version 2003.
    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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/01/2014, 21h24
  2. Réponses: 8
    Dernier message: 19/12/2013, 08h18
  3. Réponses: 9
    Dernier message: 14/03/2011, 20h06
  4. [Toutes versions] Extraire des données word pour les insérer sous excel
    Par progfou dans le forum Word
    Réponses: 23
    Dernier message: 04/05/2009, 14h23
  5. Réponses: 2
    Dernier message: 10/09/2007, 16h40

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