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 remplir combobox


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Publipostage remplir combobox
    Bonjour,

    Je génère plusieurs fichiers word à partir d'une base de données excel en utilisant le publipostage.

    Le fichier word d'origine contient une combobox qui est remplie par le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ComboBox1_DropButtonClick()
    ComboBox1.List = Array("H. Servat", "S. Marignac")
    End Sub
    Mais sur le fichier word obtenu par publipostage, le combobox n'est plus remplis.

    J'utilise la macro suivante pour générer des fichiers séparés par publipostage :

    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
    Sub Publipostage()
    ' Déclaration des variables
    Dim iR As Integer
    Dim i As Integer
    Dim oDoc As Document
    Dim DocName As String
    Dim oDS As MailMergeDataSource
     
    ' Affectation des objets
    Set oDoc = ActiveDocument
    Set oDS = oDoc.MailMerge.DataSource
     
    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(4).Value
     
            Debug.Print DocName; i
        End With
        ' Sauvegarde du document publiposté
        With ActiveDocument
     
            .Protect wdAllowOnlyFormFields
            .SaveAs "c:\CERTIFICATS ORIGINAUX\" & DocName & ".doc"
            .Close
        End With
    Next i
    End Sub
    J'aimerais savoir s'il est possible de remplir le combobox du fichier word obtenu lorsque je lance la macro du publiscopage.

    Merci pour votre aide.

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    quelle version de word utilises-tu ?
    Il semblerait que tu utilises une Combobox ActiveX qui nécessite du code VBA pour la remplir. Le publipostage fait perdre les macros de ton document donc le remplissage de ta combobox.
    Pourquoi n'utilises-tu pas la Combobox non activeX (cela dépend peut-être de la version de word, je suis sous word 2010 et j'en dispose ) :

    Nom : Word_ComboBox.png
Affichages : 527
Taille : 11,0 Ko

    Le remplissage de ce type de combobox peut se faire directement dans ses propriétés.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Merci pour ton aide.
    J'utilise Word 2013.

    Entre temps, j'ai essayé d'utiliser une Combobox non activeX.
    Mais ce que j'ai oublié de préciser c'est que j'utilise aussi une image activeX qui change en fonction du contenu de la Combobox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub ComboBox1_DropButtonClick()
    ComboBox1.List = Array("", "H. Servat", "S. Marignac")
    End Sub
     
    Private Sub ComboBox1_Change()
    If ComboBox1.Value = "H. Servat" Then
           Image1.Picture = LoadPicture("C:\servat.jpg")
           ElseIf ComboBox1.Value = "S. Marignac" Then
                    Image1.Picture = LoadPicture("C:\marignac.jpg")
           ElseIf ComboBox1.Value = "" Then
                    Image1.Picture = LoadPicture("C:\vierge.jpg")
    End If
    End Sub
    Du coup je ne sais pas comment je peux faire la même chose avec une Combobox non activeX.

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 954
    Points : 9 284
    Points
    9 284
    Par défaut
    hello,
    utilises-tu des champs de fusion dans le document de ton publipostage ou seulement les champs pour générer le nom des documents de sortie. Pourquoi utiliser alors un publipostage et pas un enregister sous de documents.
    tes documents de sortie sont-ils en format word2003 (.doc) ? et le document d'entrée en quel format (.doc ? .docm ? .docx? ) ?
    une chose qui fonctionne : enregistrer ton document d'entrée en modèle (.dotm) ouvrir un nouveau document à partir de ce modèle, lancer la macro (en changeant le format de sortie de .doc en .docm) , les fichiers de sorties ont les macros du modèle. Le problème c'est que ces fichiers sont "reliés" au modèle et il faut donc qu'il soit présent où l'on utilise un des fichiers de sortie.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonjour,
    Merci de ton aide.

    En fait, j'ai trouvé le code de la macro sur internet et je l'ai adapté à mon cas de figure. Mais je n'avais pas fait attention au départ, qu'elle enregistrait les fichiers de sortie en .doc. Je l'ai modifié par la suite pour avoir les fichiers en .docx. Mon fichier de départ est en .docm.

    Par contre, j'utilise plusieurs champs de fusion et l'un d'entre eux me permet aussi de nommer mes fichiers. J'utilise le publipostage car ma base de données excel possède plus de 1000 lignes et avec seulement une dixaine de fichier d'entrée je génère plus de 1000 fichiers de sortie en seulement quelques minutes.

    J'ai déjà essayé de modifier la macro pour enregistrer les fichiers de sortie en .docm, mais il y a un bug et je ne peut pas ouvrir les fichiers. Et j'ai toujours le même problème si mon fichier d'entré est en .dotm.

    Voilà le message d'erreur que j'obtient lorsque je veux ouvrir un des fichiers de sortie :

    Nom : Image 1.jpg
Affichages : 445
Taille : 49,6 Ko

    Je rajoute le code de la macro et celui de la combobox, il y a peut-être un élément qui fait planter les fichiers de sortie :

    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
    Sub Publipostage()
    ' Déclaration des variables
    Dim iR As Integer
    Dim i As Integer
    Dim oDoc As Document
    Dim DocName As String
    Dim oDS As MailMergeDataSource
     
    ' Affectation des objets
    Set oDoc = ActiveDocument
    Set oDS = oDoc.MailMerge.DataSource
     
    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(4).Value
     
            Debug.Print DocName; i
        End With
        ' Sauvegarde du document publiposté
        With ActiveDocument
     
            .Protect wdAllowOnlyFormFields
            .SaveAs "C:\CERTIFICATS\CERTIFICATS ORIGINAUX\" & DocName & ".docm"
            .Close
        End With
    Next i
    End Sub
     
    Private Sub ComboBox1_Change()
    If ComboBox1.Value = "H. Servat" Then
           Image1.Picture = LoadPicture("C:\CERTIFICATS\Base de données\servat.jpg")
           Else
                If ComboBox1.Value = "S. Marignac" Then
                    Image1.Picture = LoadPicture("C:\CERTIFICATS\Base de données\marignac.jpg")
                End If
    End If
    End Sub
     
    Private Sub ComboBox1_DropButtonClick()
    ComboBox1.List = Array("H. Servat", "S. Marignac")
    End Sub
    Merci par avance pour ton aide

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut



    Bonjour,

    l'erreur de conception provient de la ligne de code SaveAs ne spécifiant pas le format du fichier à enregistrer,
    juste consulter l'aide VBA interne de cette méthode …


    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 43
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2014
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup!
    J'ai enfin réussi. Voici le code final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ChangeFileOpenDirectory "C:\CERTIFICATS\CERTIFICATS ORIGINAUX\"
     .SaveAs2 FileName:=DocName + ".docm", FileFormat:=wdFormatXMLDocumentMacroEnabled

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

Discussions similaires

  1. Pb pour remplir combobox
    Par spoyet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2007, 16h40
  2. remplir combobox suivant la sélection d'un autre
    Par wiss20000 dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 17/05/2007, 20h54
  3. [C#] Remplir combobox avec un enum
    Par AlexandreP dans le forum Windows Forms
    Réponses: 2
    Dernier message: 21/12/2006, 14h47
  4. [C#][1.1]Remplir Combobox avec sqlDataReader
    Par Monstros Velu dans le forum Windows Forms
    Réponses: 3
    Dernier message: 04/08/2006, 17h04
  5. [VBA-E]Remplir combobox avec contenu d'une feuille Excel
    Par Deejoh dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/03/2006, 16h16

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