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 Access Discussion :

Exporter les données d'un formulaire vers Word [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 19
    Points
    19
    Par défaut Exporter les données d'un formulaire vers Word
    Bonjour à tous,

    Voila je mets mon petit post ici car j'ai quelques problèmes avec Access 2007

    Bon je vais essayer d'être précis.

    Je conçois une petite base de données relationnelles pour mon association. Mais mon niveau en informatique n'est pas vraiment top.

    Donc voila j'ai fait mes tables mes petits liens et mon formulaire jusque là tous va bien !

    C'est ici que ça se corse :
    Maintenant je voudrais imprimer le formulaire avec Word.
    Je me suis renseigné sur le publipostage mais il n'est pas assez puissant pour faire ce que je demande
    Voilà ce que je veux faire :

    Exemple:

    - Dans le formulaire je tape : Nom, Prénom, Adresse Numéro de secu etc...
    - Dans Word : il complète le nom, le prénom... sur le contrat type que j'ai fait.

    Donc je me suis tourné vers le VBA.


    Après quelques recherches et quelques heures sur le chat j'ai pu avoir ce 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
    26
    27
    28
    29
    30
    31
    32
    Private Sub CmdWORD_Click()
    'Voici pour la déclaration du code:
    Dim wdapp As Word.Application
    Dim moncode
     
    moncode = code.Value
     
    'Démarrer Word
    Set wdapp = CreateObject("Word.application")
    ' le code ci-dessous permet de faire apparaitre word 
    ' en premier plan ou pas, false -> non et true -> oui
    wdapp.Visible = False
    'on ouvre le document
    wdapp.Documents.Open "j:\Doc_Atelier\td138\td138_gdt.doc"
    ' avant d'affecter la valeur du champ code au signet code,
    ' je teste si le champ code est vide, 
    'car si oui cela posera probleme et dans ce cas j'affecte la valeur "."
    If code.Value <> "" Then
    wdapp.ActiveDocument.Bookmarks("code").Range.Text = code.Value
    Else
    wdapp.ActiveDocument.Bookmarks("code").Range.Text = "."
    End If
    ' je sauvegarde le fichier sous un autre nom     
    wdapp.ActiveDocument.SaveAs "j:\Doc_Atelier\td138\" & moncode & ".doc"
    ' je ferme le fichier
    wdapp.ActiveDocument.Close
    ' je ferme l'application
    wdapp.Application.Quit SaveChanges:=wdDoNotSaveChanges
    ' et j'avertis l'utilisateur que le fichier word est crée
    MsgBox "Le fichier WORD est crée !"
    set wdapp=nothing
    End Sub
    http://access.developpez.com/sources...ipostageSignet

    Comme je vous l'ai dit je suis pas très fort en info donc j'aimerais avoir quelques éclaircissements :

    1: Le code date de 2004 est-il toujours opérationnel ?
    2: Quels sont les mots que je dois remplacer ?
    3: Pouvez-vous m'expliquer plus en détail les lignes entre "if" et "end if"?
    4: Pouvez-vous m'expliquer plus en detail le "code.value"?

    Voila voila j'espère avoir été clair!
    Je suis à votre disposition

  2. #2
    Membre habitué Avatar de miamou
    Inscrit en
    Novembre 2009
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 161
    Points : 178
    Points
    178
    Par défaut
    Bonjour,
    je te passe la fonction (trouvée sur Internet) que je met dans un module et qui fonctionne aussi avec access 2007 :
    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
    Public Sub Publipostage(strCheminDoc As String, strCheminFusion As String, strSQL As String)
    Dim wdApp As Word.Application
     
    ' Démarrer
    Set wdApp = New Word.Application
    With wdApp
        ' Ouvrir le document de publipostage
        .Documents.Open strCheminDoc
        ' Paramétrer le publipostage
        With .ActiveDocument.MailMerge
            .OpenDataSource Name:=CurrentProject.FullName, _
                SQLStatement:=strSQL, _
                ReadOnly:=True
            ' Diriger le publipostage vers un nouveau document
            ' plutôt que vers l'imprimante
            .Destination = wdSendToNewDocument
            ' Lancer la fusion
            .Execute
        End With
        ' Sauvegarder le document fusionné
        .ActiveDocument.SaveAs FileName:=strCheminFusion
        ' Quitter Word
        .Quit SaveChanges:=wdDoNotSaveChanges
    End With
    ' Libérer les objets
    Set wdApp = Nothing
    End Sub

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Merci pour cette réponse mais le problème c'est que dans ce code je vois pas comment définir l'emplacement des champs que je veut renseigner dans Word

    Et quand je copie ton code dans Access et que je clic sur "play" il m'indique "end sub" attendu...

    Voila voila si je pouvais avoir plus de précision! ^^ merci

  4. #4
    Membre habitué Avatar de miamou
    Inscrit en
    Novembre 2009
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 161
    Points : 178
    Points
    178
    Par défaut
    Bonjour,
    Dans le code j'utilise une requete; et le document word de base est liée à la meme requete (ou une requete plus générale) dans ce document j'injecte les champs dans les emplacements que je veux, et tout le travail est fait la fusion s'effectue avec succès

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Ok mais le problème c'est que j'aimerai le faire avec un formulaire et non pas avec une requête donc si tu voit une solution ^^
    merci!

  6. #6
    Membre habitué Avatar de miamou
    Inscrit en
    Novembre 2009
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 161
    Points : 178
    Points
    178
    Par défaut
    Moi aussi je parle de la meme chose, réaliser la fusion via un formulaire mais bien évidemment sur la base d'une requete. il faut dans tout les cas préparer le document word à utiliser pour faire le publipostage (en l'occurence les champs de fusion)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Bonjour,
    Désolé je suis vraiment perdu

    Pour préparer le document j'utilise l'outil de publipostage ou j'utilise des "signets" (bookmarks) ?

    Dois-je activer Mail merge ? Ou cela se fait automatiquement ?

    Merci et encore merci pour votre patience

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Re bonjour,
    Bon j'ai encore chercher toute la journée donc voila je pense pouvoir effectuer mon publipostage il n'y a plus qu'un seul souci.
    Lors du paramétrage de mon document Word il me propose que les tables de ma base de donnée mais pas ma requête.

    Il y a une manipulation à faire ?
    J'ai lu quelque chose sur le ODBC et les source de données

  9. #9
    Membre habitué Avatar de miamou
    Inscrit en
    Novembre 2009
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 161
    Points : 178
    Points
    178
    Par défaut
    Bonjour,
    tu fais Publipostage --> Démarrer la fusion et le publipostage --> Document word normal --> Selection des destinataire --> Utiliser la liste existante...--> et là tu n'as que les table de ta base??? aucune requete?

  10. #10
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    On s'écarte du sujet initial.

    Tu prépares un document Word avec divers signets : Nom, Prénom, etc...

    Dans ton formulaire Access, diverses zones de textes avec comme nom, strNom, strPrenom, etc...

    Sur ton formulaire, un bouton cmdPublipostage et dans l'événement Sur clic, ce début de 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    Private Sub cmdPublipostage_Click()()
     
        'En cas d'erreur, on n'en tient pas compte
        On Error Resume Next
     
        'Déclaration d'une instance Word
        Dim W_App As New Word.Application
     
        'Instance Word
        With W_App
     
            'Word est visible à l'écran ou non
            .Visible = True
     
            'Ouvre le document Word avec les signets
            .Documents.Open ("C:\....\NomDeTonDocument.doc")
     
            'Tranfert du nom : strNom ==> Signet Nom
            .ActiveDocument.Bookmarks("Nom").Select
            .Selection.Text = Me.strNom
     
             'Tranfert du nom : strPrenom ==> Signet Prénom
            .ActiveDocument.Bookmarks("Prenom").Select
            .Selection.Text = Me.strPrenom
     
            'Sauvegarde du nouveau document
            .ActiveDocument.SaveAs ("Nouveau document.Doc")
     
            'Fermeture de Word
            .Quit
     
        End With
     
        'Libération de l'objet Word         
        Set W_App = Nothing
     
    End Sub
    C'est un code pour démarrer. Plusieurs options sont possibles.

    • Créer le document à partir d'un modèle Word
    • Imprimer le document
    • Spécifer le répertoire de sauvegarde
    • Afficher la boîte de dialogue Enregistrer sous... de Word
    • Etc...


    Tu peux déjà faire un essai avec ça et tu pourras le compléter/modifier selon tes besoins.

    Domi2

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Merci domi pour ta réponse

    J'ai appliqué ta procédure à la lettre
    Les signets sont placés
    Le bouton est crée
    Le code copier:
    - J'ai changer le chemin d'aces, j'ai mit celui de mon document
    - J'ai mit le nom de mes champs à moi

    Je repasse mon formulaire en mode normal je click sur le bouton et il m'indique:
    "erreur de compilation"
    "type défini par l'utilisateur non défini"

    Puis me surligne en bleu la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim W_App As New Word.Application
    Je clic sur "ok"

    Puis il me surligne en jaune :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub cmdPublipostage_Click()
    J'ai peut être oublier quelque chose
    Une solution ?
    Merci encore

  12. #12
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonsoir,

    Désolé, j'ai oublié de le préciser.

    Dans l'éditeur VBA, menu Outils ==> Références, tu cherches Microsoft Word 12.0 Object Library et tu la coches pour l'ajouter à ton projet.

    Domi2

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Bon je fais des progrès ^^

    Effectivement j'ai coché la case ça à enlever une erreur
    Mais bon ça aurait été trop beau si ça marchait du premier coup.

    Nouvel erreur de compilation:

    "Membre de méthode ou de données introuvable sur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Selection.Text = Me.strnom_etudiant
    Sachant que nom_etudiant est le nom de mon champs et également le nom de mon signet.

    P.S: Petite précision chez moi entre "With" et "End with" tout est écrit en noir comparé au code affiché sur le site. Je ne sais pas si ça change quelque chose.

  14. #14
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    Après avoir taper "Me.", est-ce que le nom de ton champ est bien proposé à la complétion ?

    Eventuellement, change le nom : strNomEtudiant, par exemple.

    Domi2

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Bon alors j'ai essayé avec "Nometudiant" en respectant les majuscules
    Par contre je sais pas il me propose rien à la "complétion" je sais pas trop ce que c'est
    Si tu veut savoir il est écrit en noir

    En fait le problème c'est qu'il ne trouve pas mon champs dans la bases ou dans le document Word ?

  16. #16
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Par contre je sais pas il me propose rien à la "complétion" je sais pas trop ce que c'est
    Dans le code, lorsque tu tapes par exemple "Me.", tu as une liste qui s'ouvre avec le nom des méthodes ou champs qui sont utilisables.

    Bon, j'ai retrouvé une petite base exemple que je joins en annexe, tu pourras ainsi comparer avec ce que tu as fait jusqu'à maintenant.

    C'est exactement ce que j'ai décrit plus haut, le code est identique (sauf que j'ai spécifié un chemin de sauvegarde).

    Il faut placer la base et le document Word dans le même répertoire.

    Bon tests.

    Domi2

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Bonjour,
    Alors domi j'ai essayer avec ton exemple effectivement ça fonctionne nickel

    Par contre j'ai regardé effectivement mon champs n'est pas proposé en complétion. Je pense que cela provient de fait que mon champs est dans un sous formulaire car je ne vois que les champs de formulaire et pas du sous formulaire.
    Je rajoute aussi que j'ai réussi à faire marcher le code en ce qui concerne les données qui sont dans le formulaire donc gros gros gros progrès merci

    Puis pour avoir les autre champs (du sous formulaire) j'ai essayer de bidouiller un peu j'ai fait une requête et un état pour faire en sorte que ton les champs que je souhait soit sur le même état mais sans succès. Il ne m'affiche pas d'erreur je vois dans ma barre de démarrage Word s'ouvrir très très brièvement.

    Donc voila je fouille un peu pour trouver une solution.

  18. #18
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    Effectivement, tu as bien compris là où ça "coince", problème de syntaxe.

    Pour mieux comprendre, un tutoriel absolument incontournable : Les syntaxes d'appel : Interaction des formulaires et états.

    Tu y découvriras notamment comment faire référence à un champ d'un sous-formulaire depuis le formulaire qui le contient... Et le contraire aussi.

    A lire et à relire !

    Domi2

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Ok j'irai m'instruire

    Sinon la je viens a l'instant de réussir à faire la macro via un état ^^
    Je suis en vraiment content d'avoir réussi un grand merci à vous j'ai beaucoup appris. J'ai meme réussi a enregistré avec le nom importé
    Bon après je vais essayé de faire un sorte de créer un chemin d'accès (creation du dossier) mais facultatif ^^

    En tout les cas tu m'as sorti une épine du pied.

  20. #20
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut probleme sur le fichier annexe
    bjr

    j'ai le meme probleme sur mon projet et j'arrive pas a trouver le fichier joint que vous avez mis en annexe, si vous pouvez le remettre à nouveau ça sera sympa

    merci

    imad

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

Discussions similaires

  1. export des données de plusieurs formulaires vers word
    Par adelsunwind dans le forum IHM
    Réponses: 2
    Dernier message: 11/02/2009, 19h44
  2. [Exporter les résultats d'une recherche vers Word
    Par ludovicparis dans le forum Access
    Réponses: 10
    Dernier message: 04/04/2007, 09h11
  3. Réponses: 2
    Dernier message: 21/03/2007, 10h02
  4. Exporter les données d'une flexgrid vers Excel
    Par ecarbill dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/08/2006, 18h06
  5. Transfert de données d'un formulaire vers Word
    Par CybSnoopy dans le forum Access
    Réponses: 2
    Dernier message: 07/08/2006, 11h48

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