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 :

Publipostage dans word via Excel [WD-97]


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Publipostage dans word via Excel
    Bonjour,

    J'aimerais réaliser un publipostage dans word via une base de donnée Excel.
    Les données Excel sont relatives à des références d'appareils.
    Le but serait que l'opérateur remplisse la ligne correspondant à l'appareil rentré et qu'en lançant une macro, le document publiposté soit enregistré et imprimé sous word en sachant que chaque ligne correspond à un document enregistré à part lors du publipostage.

    Pour ce faire, j'ai suivuis le tutoriel fort bien fait de heureuxoli sur le publipostage et en particulier la partie 7.G sur l' " Enregistrement de chaque document".
    Je me heurte au problème suivant lorsque je compile :

    "Erreur de compilation : Membre de méthode ou de données introuvable"

    et la partie pointée est

    iR = oDoc.MailMerge.DataSource.RecordCount

    Pourriez vous m'indiquer quel pourrait être le problème s'il vous plaît !


    Le programme est le suivant :

    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
    Dim i As Integer
    Dim iR As Integer
    Dim a As Integer
    Dim b As Integer
    Dim oDoc As Document
    Dim DocName As String
    Dim oDS As MailMergeDataSource
    Dim Count As Integer
    Dim n As Integer
     
    ActiveDocument.MailMerge.OpenDataSource Name:="DVS.xls"
     
    ' Affectation des objets
    Set oDoc = ActiveDocument
    Set oDS = oDoc.MailMerge.DataSource
     
    ChangeFileOpenDirectory "S:\Appareils.doc"
     
    iR = oDoc.MailMerge.DataSource.RecordCount
     
     
    Debug.Print iR
     
    For i = 1 To iR
     
     
        With oDoc.MailMerge
               'Définition du premier et dernier enregistrement
            .DataSource.FirstRecord = i
     
            .DataSource.LastRecord = i
            ' Envoi des données dans un nouveau document
            .Destination = wdSendToNewDocument
            ' Exécution du publipostage
            .Execute
            ' Actualisation de l'enregistrement pour la sauvegarde
            .DataSource.ActiveRecord = i
            'Utilisation de deux champs pour obtenir le nom du document
            DocName = .DataSource.DataFields("ChampFusionAuto1")
            DocName = DocName & "_" & .DataSource.DataFields("ChampFusionAuto5")
            ' Impression du document publiposté
               '.ViewMailMergeFieldCodes = wdToggle
        Debug.Print DocName; i
        End With
            ' ActiveDocument.PrintOut
        ' Sauvegarde du document publiposté
        With ActiveDocument
            .SaveAs FileName:=DocName & ".doc"
            '.Close
        End With

    Merci d'avance si quelqu'un pouvait m'aider !
    Bonne journée

  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
    Salut,

    Il est possible que cette méthode ou propriété ne soit pas disponible pour Word 97.

    Chaque nouvelle version apporte son lot de nouveauté et supprime aussi certaines choses.

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Y a t-il une autre méthode pour remplacer cette fonction, c'est à dire réussir à indiquer la dernière ligne renseignée ?

  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
    Salut,

    Une fonction, non, c'est un membre qui n'est pas connu dans W 97.

    Une solution serait d'ouvrir la source pour compter le nombre d'enregistrements.

  5. #5
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Comment cela s'effectue en VBA ? Désolé je ne suis pas un spécialiste de VBA....

    Merci !

  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
    Salut,

    Je ne comprend pas très bien la raison de passer par un système qui fera un publipostage complet alors que si j'ai bien compris, tu ne souhaites publiposter qu'un seul enregistrement.

    Dans ce cas, il suffit d'injecter les données dans le document au moyen de signets.

  7. #7
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Je ne veux pas forcément publiposter qu'un seul document, il se peut que je veuille remplir 15 lignes sous Excel pour des appareils différents et ainsi avoir 15 courriers types derrière.
    Pour le moment, vu que je ne peux pas renseigner le nombre de boucles à faire dans la boucle for, cela engendre que dès qu'il arrive sur la première ligne vide dans Excel, il bug !

    L'erreur émise par VBA est alors la suivante :

    "Erreur d'exécution '5631' :
    Impossible de fusionner le document principal avec la source de données: les enregistrements étaient tous vides ou aucun enregistrement ne correspondaient à vos options de requête. "

    J'arrive à commpter le nombre de lignes remplies dans le fichier Excel que j'ai mis dans une cellule mais je n'arrive pas à lire la valeur de cette cellule dans mon VBA word..

  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
    Salut,

    Il te suffit simplement d'ouvrir avant publipostage le fichier contenant la données pour l'utiliser ensuite.


    Ajouter au projet la référence à la bibliothèque Excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim xlApp As Excel.Application
    Dim xlWB As Excel.Workbook
    Dim xlWS As Excel.Worksheet
     
    Set xlApp = New Excel.Application
    Set xlWB = xlApp.Workbooks.Open("Mon chemin")
    Set xlWS = xlWB.Worksheets(1)
     
     
    set xlapp = nothing
    set xlwb = nothing
    ...

  9. #9
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Cela marche nickel, merci bien !!!

    J'ai un autre souci maintenant... En faite, dans mon classeur Excel, jai plusieurs feuilles (une feuille par opérateur). Lorsque je lance le fichier word, il me demande de choisir le document du classeur que je veux ouvrir, c'est à dire que je peux choisir la feuille désirée pour le publipostage. En effet, lorsque j'ai sélectionnée la source de donnée pour le publipostage, j'ai choisi "feuille de calcul Microsoft Excel via un convertisseur (*.xls)

    Ma requête serait que :
    le problème avec les lignes que tu m'a donné c'est que dans xlBook.Worksheets() on doit mettre le numéro de la feuille. Est il possible de mettre le nom de la feuille dans Worksheet() en fonction de la sélection de la feuille qui a été faite lors de l'ouverture du document ?

    Merci..!

  10. #10
    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
    Salut,

    On peut utiliser le nom de la feuille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xlWB.WorkSheets("Ma Feuille")

  11. #11
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Certes, merci.
    Mais serait il possible de sélectionner la dernière feuille active dans le fichier Excel ? Parce que dans l'état actuel des choses, si on rentre un nom de feuille dans la macro fixe, et que l'on utilise une autre feuille ça ne marchera pas...
    Le problème c'est qu'en fonction de l'opérateur qui utilise le fichier, la feuille utilisée n'est pas la même...

  12. #12
    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
    Salut,

    Peut-être ActiveSheet ?

  13. #13
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    ActiveSheet marche très bien, merci bien !

    Juste peut être encore une petite question, lorsque je cherche la valeur du nombre ligne j'ouvre le fichier Excel, qu'elle est alors la commande pour refermer derrière ce même fichier Excel ?

  14. #14
    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
    Salut,

    La commande pour un fichier est close et pour une application Office, c'est Quit.

    Ne pas oublier de libérer les objets lorsqu'on n'en a plus besoin.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    monObjet.Close
    Set monObjet = Nothing

  15. #15
    Candidat au Club
    Inscrit en
    Mai 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci à toi pour ces aides précieuses !

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

Discussions similaires

  1. Utilisation publipostage sous word via Excel
    Par athalantar dans le forum VBA Word
    Réponses: 21
    Dernier message: 07/04/2011, 10h56
  2. Insertion d'un tableau Excel dans Word via Ole
    Par blondelle dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/12/2008, 10h55
  3. Insérer un Tableau excel dans Word via VBA depuis Excel
    Par Godzestla dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/05/2008, 08h52
  4. coller une plage dans word depuis excel
    Par tarmin dans le forum VBA Word
    Réponses: 7
    Dernier message: 18/01/2006, 10h16

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