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 :

Importer des données d'un formulaire Word vers mes champs Excel (pour éviter resaisie


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut Importer des données d'un formulaire Word vers mes champs Excel (pour éviter resaisie
    Bonjour à tous,
    je commence à me mettre au VBA (je suis toujours débutant), et j'aimerais arriver à faire ceci:
    - j'ai un formulaire Word préformaté avec des champs texte bien définis
    - j'ai un fichier Excel de suivi (mini base de données) dans lequel sont saisies certaines des informations dès réception d'un formulaire rempli.

    Aujourd'hui le fihcier Excel est rempli "à la main"; c'est-à-dire que par exemple le nom du demandeur est récupéré sur le formulaire puis recopié manuellement sur le fichier Excel dans la colonne "nom du demandeur", idem pour la date de la demande etc... Donc un processus répétitif dans lequel certains champs identifiés de mon formulaire Word sont recopiés dans certaines colonnes identifiées de mon fichier Excel (donc double saisie).
    Ce processus est de plus en plus lourd sachant qu'il y a de plus en plus de formulaires reçus.

    J'aimerais donc si possible automatiser cette copie de données:
    pourquoi pas avec une boîte de dialogue qui me permettrait de sélectionner mon fichier Word (ou autre manip,tant que ça marche!) et qui me récupèrerait automatiquement mes champs Word pour les copier dans la bonne colonne de mon fichier Excel ("nom du demandeur" vers "nom du demandeur",etc...).

    Je ne sais pas comment m'y prendre auriez-vous des suggestions?
    Merci d'avance,
    M

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    bonjour,
    c'est tout à fait envisageable.

    Tu peux piloter excel depuis word et inversement. Dans ton cas, je pense que tu pars d'Excel.
    Les étapes que je propose:
    1/ bouton parcourir pour récupérer le fichier .doc
    2/parcours du fichier doc et copie des éléments dans les cellules excel.

    ^^
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par jpcheck Voir le message
    bonjour,
    c'est tout à fait envisageable.

    Tu peux piloter excel depuis word et inversement. Dans ton cas, je pense que tu pars d'Excel.
    Les étapes que je propose:
    1/ bouton parcourir pour récupérer le fichier .doc
    2/parcours du fichier doc et copie des éléments dans les cellules excel.

    ^^

    C'est exactement ce qu'il me faut,les petits détails étant:
    - je ne sais pas récupérer un fichier à partir d'Excel
    - je ne sais pas comment parcourir mon Word ni faire référence aux champs texte pour les copier vers Excel
    Comme je vous l'ai dit je débute donc je ne serai pas contre un petit coup de main (je ne demande pas de ma mâcher le travail mais un petit coup de pouce serait le bienvenue).
    Cordialement,
    M

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    Citation Envoyé par drthodt Voir le message
    - je ne sais pas récupérer un fichier à partir d'Excel
    - je ne sais pas comment parcourir mon Word ni faire référence aux champs texte pour les copier vers Excel
    Comme je vous l'ai dit je débute donc je ne serai pas contre un petit coup de main (je ne demande pas de ma mâcher le travail mais un petit coup de pouce serait le bienvenue).
    Cordialement,
    M
    ajouter dans les références la librairie Microsoft Word
    regarde ce que tu peux faire avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dim fichier as Variant
    dim fichier_Doc as Word.Document
    dim
    fichier = Application.GetOpenFileName()
    if fichier<>False Then
    fichier_Doc.Open(fichier)
    End If
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Merci je vais essayer de trouver un moment pour essayer ça demain.
    Bonne soirée,
    M

  6. #6
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    J'arrive bien à ouvrir un document Word, mais comment faire référence à mes champs texte?
    Ils ont tous un signet "Texte1", "Texte2" etc... je dois travailler à partir de ça?

  7. #7
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    bjr,
    effectivement, ca servira de base. Le plus efficace dans un premier temps est d'utiliser le macro recorder en copiant un des champs et en le collant dans excel. Ca devrait te permettre de savoir à quel bloc d'informations du document tu touches, et tu pourras reproduire la même manip' pour les autres.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  8. #8
    Expert éminent sénior

    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
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    Tu peux utiliser et adapter cet exemple


    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
    Sub ExtractionDonneesDansChampWord()
        'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
        Dim WordApp As Word.Application
        Dim WordDoc As Word.Document
     
        'ouvre session word
        Set WordApp = New Word.Application
        'ouvre document Word
        Set WordDoc = WordApp.Documents.Open("C:\monFichier.doc")
        'word est masqué pendant l'opération
        WordApp.Visible = False
     
        'Récupère le contenu d'un champ
        'Fields(1) : premier champ du document Word
        MsgBox WordDoc.Fields(1).Result.Text
     
        'Ferme le document word
        WordDoc.Close False
        'ferme la session Word
        WordApp.Quit
    End Sub


    bonne journée
    michel

  9. #9
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Ok j'y arrive mais j'ai encore deux petits problèmes:

    - Mon fichier Word d'origine est un fichier formulaire word verrouillé (avec le petit cadenas): il faut que je le déverrouille avant de copier les données mais comment faire?
    J'ai essayé la propriété "Locked" (WordDoc.Locked=False, en ayant déclaré Dim WordDoc As Word.Document) mais j'obtiens un message d'erreur: la propriété ou méthode n'est pas g&ré par cet objet

    - deuxième point (et dernier à priori): je ne désire pas uniquement récupérer des champs texte simples (que je récupère selon principe Field(numéro duchamp) mais également des informations de date (champ date automatique inséré dans l'entête de mon formulaire): comment faire référence à celui-ci?
    Merci d'avance pour vos réponses,
    M

    Voici 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub test1()
     
    'nécéssite d'activer la référence Microsoft Word xx.x Object Library
    Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
    Dim Fichier As Variant
     
    'affichage boite de dialogue pour choisir un document Word
    Fichier = Application.GetOpenFilename("Text Files (*.doc*), *.doc*")
    If Fichier = False Then Exit Sub
     
    'le document Word est supposé fermé avant le lancement de la macro
    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = False 'pour que word reste masqué pendant l'opération
    Set WordDoc = WordApp.Documents.Open(Fichier) 'ouverture du fichier Word
    WordDoc.Locked = False
     
     
     
    Cells(1, 1) = WordDoc.Fields(1).Result.Text 'copie du champ texte Word
    Cells(1, 2) = WordDoc.Fields(2).Result.Text
     
    WordDoc.Close False 'ferme le document Word sans sauvegarde
    WordApp.Quit 'ferme l'application Word
    End Sub

  10. #10
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    J'ai résolu un de mes problèmes (utilisant la méthode Unprotect pour déverrouiller mon document Word).
    Je n'arrive pas par contre à récupérer le champ date automatique qui apparait dans mon entête (j'ai essayé par l'enregistreur de macro de récupérer une référence mais impossible apparemment de basculer en mode netête/pied de page lors de l'enregistrement d'une macro).
    Comment faire référence à ce champ date automatique qui se trouve en entête pour en récupérer la valeur?

  11. #11
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 594
    Points : 34 263
    Points
    34 263
    Par défaut
    il me semble que s'il s'agit d'une date automatique, c'est celle du jour en cours non ?
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  12. #12
    Expert éminent sénior

    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
    Points : 20 144
    Points
    20 144
    Par défaut
    rebonjour

    Comment faire référence à ce champ date automatique qui se trouve en entête pour en récupérer la valeur?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsgBox WordDoc.Sections(1). _
        Headers(wdHeaderFooterPrimary). _
        Range.Fields(1).Result.Text

    michel

  13. #13
    Membre du Club
    Inscrit en
    Août 2005
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 217
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par SilkyRoad Voir le message
    rebonjour



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsgBox WordDoc.Sections(1). _
        Headers(wdHeaderFooterPrimary). _
        Range.Fields(1).Result.Text

    michel

    Merci à toi silkyroad,j'y suis bien parvenu en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordDoc.Sections(1).Headers(wdHeaderFooterPrimary).Range.Fields(1).Result.Text
    Par contre cela me mélange parfois les dates (selon le document) en me les mettant au format américain.
    eX. Si je récupère la date 01/10/2007 dans mon fichier excel j'obtiens 10/01/2007.
    Par contre cela n'est pas systématique (parfois la date est bien recopiée: comment garantir que ma donnée sera recopiée telle qu'elle est à l'origine?
    Il me faudrait récupérer juste la valeur texte telle qu'elle est affichée dans le document Word d'origine.

Discussions similaires

  1. [WD-2010] Importer des donnée d'un tableau exel vers un tableau sur word
    Par Matrixmax dans le forum VBA Word
    Réponses: 3
    Dernier message: 09/04/2013, 17h25
  2. Réponses: 10
    Dernier message: 22/03/2011, 23h40
  3. Réponses: 3
    Dernier message: 24/05/2008, 18h56
  4. importer des données d'une base SQL vers word?
    Par Jayceblaster dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/10/2007, 09h43
  5. Réponses: 1
    Dernier message: 29/08/2006, 17h03

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