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

  1. #1
    Candidat au Club
    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
    Points : 3
    Points
    3
    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 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    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 !

  3. #3
    Candidat au Club
    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
    Points : 3
    Points
    3
    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 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    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

  5. #5
    Candidat au Club
    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
    Points : 3
    Points
    3
    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 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    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.

  7. #7
    Candidat au Club
    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
    Points : 3
    Points
    3
    Par défaut
    En effet cette reférence n'existe pas dans Word2003. Je n'ai pas trouvé la bibliothèque de référence permettant de la faire marcher sous word.

    De mon côté je programme depuis une feuille Excel, où là elle marche (j'ai pourtant les même références...)

    Si tu colle mon code dans une feuille Excel2003, GetOpenFileNAme ne devrait pas te poser de problème...et c'est très pratique lorsque tu veux ouvrir un document que tu veux choisir (tu ne rentres pas de nom figé dans WordApp.Documents.Open() )

    Pour l'instant, depuis excel, je cherche mon doc (avec le GetOpenFileName), je l'ouvre, et je le vois...mais c'est au moment de récupérer les données que ça plante...

    Merci pour tout

  8. #8
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    je vais chercher de cette façon alors.

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    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
     
    Sub testSignet()
    Dim wdApp As New Word.Application
        Dim WordDoc As Word.Document
        Dim FileToOpen
     
     
        FileToOpen = Application.GetOpenFilename("Nom fichier,*.doc") 'selection du nom du fichier à traiter
     
            If FileToOpen = False Then  'evite le bug si on clique sur annuler dans la boite d'ouverture du fichier
                Exit Sub
            Else
     
                Set WordDoc = wdApp.Documents.Open(FileToOpen)    'ouvre le document Word
                'wdApp.Visible = True
            End If
     
    ActiveCell.Value = WordDoc.Bookmarks("BM01").Range.Text
     
    Set WordDoc = Nothing
    wdApp.Quit
     
    Set wdApp = Nothing
    End Sub
    Je viens d'essayer au départ d'Excel et le code à fonctionné sans problème.
    J'ai juste un fichier Word avec un signet BM01 qui contient un mot.
    A la fin, j'ai bien mon mot dans la cellule active de mon fichier Excel.

  10. #10
    Candidat au Club
    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
    Points : 3
    Points
    3
    Par défaut
    ça marche !!

    Merci beaucoup ! Maintenant je n'ai plus qu'a faire une boucle, mettre les bonnes infos aux bons endroits !

    A bientôt peut être et encore merci !

    VIVE LE FORUM DES DEVELOPPEURS !

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingénieur QSE
    Inscrit en
    Janvier 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur QSE

    Informations forums :
    Inscription : Janvier 2018
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Hello,
    J'ai exactement le même besoin mais avec office365; Le premier signet s'appelle "NumFNC"
    Une âme charitable pour m'aider svp ?

    Dim derniereLigne As Integer
    'Sélection de la cellule A2
    Cells(2, 1).Select

    derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
    Range("A" & derniereLigne + 1).Select

    Dim FileToOpen

    FileToOpen = Application.GetOpenFilename() 'selection du nom du fichier à traiter

    Set objetword = CreateObject("Word.Application")
    If Dir(FileToOpen) <> "" Then
    objetword.Visible = True
    objetword.Documents.Open FileToOpen
    End If



    ActiveCell.Value = objetword.Bookmarks("NumFNC").Range.Text

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Ingénieur QSE
    Inscrit en
    Janvier 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur QSE

    Informations forums :
    Inscription : Janvier 2018
    Messages : 7
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Voilà ce que j'ai pu faire.

    Je ne suis pas satisfait car je n'ai pas réussi à remonter ni les cases à cocher ni le choix dans une liste déroulante

    Je me suis inspiré d'un bout de code proposé par chatGPT

    Si ça peut aider

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    Sub RecupDataForms()
     
        Dim objWord As Object
        Dim objDoc As Object
     
        Dim i As Integer
        Dim derniereLigne As Integer
        Dim FileToOpen
     
     
        'Sélection de la cellule A2
        Cells(2, 1).Select
     
        derniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
     
        FileToOpen = Application.GetOpenFilename(, , Title = "FNC à importer")  'selection du nom du fichier à traiter
     
        ' Ouvrir le document Word contenant le formulaire
        Set objWord = CreateObject("Word.Application")
        objWord.Visible = False ' Mettre à True pour afficher Word pendant l'exécution
        Set objDoc = objWord.Documents.Open(FileToOpen)
     
        i = 1
     
        ' Parcourir tous les signets du document Word
        For Each sBookmark In objDoc.Bookmarks
             'Récupérer le nom du signet
            sBookmarkName = sBookmark.Name
            ActiveSheet.Cells(1, i).Value = sBookmark.Name 'rempli le nom du champs
           '
           ' récupère le texte en retirant le type
            ActiveSheet.Cells(derniereLigne + 1, i).Value = Mid(sBookmark.Range.Text, 11)
            i = i + 1
            ' Décaler la cellule active d'une colonne vers la droite
            ActiveSheet.Cells(derniereLigne + 1, i).Activate
     
        Next sBookmark
     
        'format colonnes
        Columns("A:AE").Select
        Selection.Columns.AutoFit
        With Selection
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
            .Orientation = 0
            .AddIndent = False
            .IndentLevel = 0
            .ShrinkToFit = False
            .ReadingOrder = xlContext
            .MergeCells = False
        End With
        Application.CutCopyMode = False
     
        ' Fermer le document Word et le fichier Excel
        objDoc.Close
     
     
        ' Libérer la mémoire
        Set objWord = Nothing
        Set objDoc = Nothing
     
        'message fin import
       MsgBox ("Import fnc terminé")
     
       End Sub

+ 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