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 :

Sélection automatique d'une liste déroulante en publipostage [WD-2016]


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Sélection automatique d'une liste déroulante en publipostage
    Bonjour à tous,

    Je débute en VBA et je suis confrontée à un problème de publipostage.
    En effet, mon client demande à ce qu'on ajoute l'un de ses courriers à notre application afin d'y intégrer des champs de fusion et que ce dernier soit automatiquement rempli.
    Jusque là pas de souci, sauf que son document comporte plusieurs listes déroulantes qui, selon la demande du client, doivent être pré-sélectionnées en fonction d'une valeur retournée par un champs de fusion également présent dans le document.
    Pour faire plus simple, j'ai un champs de fusion qui prendra une certaine valeur lors du lancement de la fusion et la liste déroulante contenant l'objet du courrier devra automatiquement être sélectionnée en fonction de cette valeur.

    Première point : Est ce possible ?
    Deuxième point :
    J'ai voulu utiliser la liste déroulante déjà présente dans le document mais VBA ne la trouve pas dans la liste des champs du document (FormFields ou Fields).
    J'ai donc créé une autre liste déroulante via les "outils hérités" de l'onglet "Développeur / Contrôles" mais là je ne sais pas comment demander la sélection d'une ligne spécifique de la combo

    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
    Private Sub UserForm_Initialize()
     
        'récupération de la valeur du signet ecran_source (champs de fusion ECRAN)
        s_ecran = ActiveDocument.Bookmarks("ecran_source").Range.Text    
        With ActiveDocument.FormFields("ListeDéroulante1")   
            Select Case s_ecran        
            Case "ECRAN1"
                ActiveDocument.FormFields("ListeDéroulante1").Value = 2
            Case "ECRAN2"
                ActiveDocument.FormFields("ListeDéroulante1").Value = 4     
            End Select                  
        End With       
    End Sub
    J'ai également essayé avec la propriété "ListeIndex" mais j'ai j'ai toujours le même message d'erreur qui apparait lorsque je teste mon code dans VBA : "Membre de méthode ou de données introuvable"

    D'avance merci pour votre aide !!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Audrey37 Voir le message
    Bonjour,

    Regardez si le #14 de ce message peut vous aider : liste-deroulante-cascade

    Ci-dessous, la procédure pour charger des Combobox à l'ouverture du document. Vous pouvez adapter celle-ci pour récupérer la valeur de vos 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Private Sub Document_Open()
     
    Dim ControleEnCours As InlineShape
     
     
        For Each ControleEnCours In ActiveDocument.InlineShapes
            If ControleEnCours.Type = wdInlineShapeOLEControlObject Then
                 Select Case ControleEnCours.OLEFormat.ClassType
                        Case "Forms.ComboBox.1" '"Forms.ListBox.1", "Forms.Label.1", "Forms.TextBox.1"
                             With ControleEnCours.OLEFormat.Object
                                  If .Name = "ComboBoxNiveau11" Then
                                        .AddItem "Cuisine"
                                        .AddItem "Salon"
                                        .AddItem "Salle de bain"
                                  End If
     
                                  If .Name = "ComboBox12" Then
                                        .AddItem "Français"
                                        .AddItem "Mathématiques"
                                        .AddItem "Sport"
                                  End If
     
     
                            End With
                End Select
         End If
        Next
    End Sub

  3. #3
    Candidat au Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Regardez si le #14 de ce message peut vous aider : liste-deroulante-cascade
    Bonjour Eric et merci pour votre réponse.
    J'ai essayé d'utiliser la méthode suivante pour la sélection de ma liste déroulante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListeDéroulante1.List (3)
    Mais lorsque je lance un test du code dans VB, j'ai ce message qui apparait :
    "Erreur d'exécution '424' : Objet requis"
    Savez-vous ce que cela signifie ?

    De plus, je rencontre un pb dans mon document car la liste déroulante ne s'affiche pas correctement ; le bouton de la liste déroulante ne s'affiche pas !
    Par conséquent, l'utilisateur n'a pas du tout la main sur cette dernière. Ce qui ne correspond pas aux besoins du client.
    Je précise que mon document n'est pas un formulaire... (Je ne sais d'ailleurs pas comment utiliser ce type de document dans Word ^^')

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Audrey37 Voir le message
    Bonjour,

    En mettant ce code dans un module standard et en faisant apparaître la fenêtre exécution, que donnent les Debug.Print insérés dans le 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
     
    Sub IdentifierLesInLineShapes()
     
    Dim ControleEnCours As InlineShape
    Dim MonDocument As Document
     
        Set MonDocument = ActiveDocument
     
        Debug.Print "Nb Inlinehapes : " & ActiveDocument.InlineShapes.Count
        MsgBox "Nb Inlinehapes : " & ActiveDocument.InlineShapes.Count
     
        If ActiveDocument.InlineShapes.Count > 0 Then
            For Each ControleEnCours In ActiveDocument.InlineShapes
                If ControleEnCours.Type = wdInlineShapeOLEControlObject Then
                 '  Debug.Print "Contrôle en cours : " & ControleEnCours.OLEFormat.Object.Name
                     Select Case ControleEnCours.OLEFormat.ClassType
                            Case "Forms.ComboBox.1" '"Forms.ListBox.1", "Forms.Label.1", "Forms.TextBox.1"
                                 With ControleEnCours.OLEFormat.Object
                                      Debug.Print "Combobox : " & .Name & ", contenu : " & .Text
                                End With
                    End Select
             End If
            Next
        End If
     
        Set MonDocument = Nothing
     
    End Sub

  5. #5
    Candidat au Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    En mettant ce code dans un module standard et en faisant apparaître la fenêtre exécution, que donnent les Debug.Print insérés dans le code ?
    Résultat obtenu :
    "Nb Inlinehapes : 0"

    Je ne rentre même pas dans la boucle...
    C'est mauvais signe

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Audrey37 Voir le message
    Je ne rentre même pas dans la boucle...
    C'est normal si 0.
    Sans voir votre document, je ne peux pas vous renseigner.

  7. #7
    Candidat au Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Sans voir votre document, je ne peux pas vous renseigner.
    J'ai fait un nouveau test avec une nouvelle combo que j'ai trouvée dans les "Autres Contrôles" de Word.
    D'après ce que je viens de voir, elle est entièrement pilotable par VBA.
    Par contre, il faut tout programmer : taille, police, contenu ...

    J'ai mis mon doc en pièce jointe pour que vous puissiez regarder.
    Il y a 3 liste déroulantes différentes :
    La plus basse est celle initialement prévue par le client (non programmable)
    Celle du dessus est celle qui renvoie 0 avec le code que vous m'avez envoyé plus tôt dans notre discussion.
    Et enfin, la 3ième (celle présente sur la ligne "Objet :" est la dernière testée (celle qui est programmable)
    Fichiers attachés Fichiers attachés

  8. #8
    Candidat au Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Le but initial était de garder la première liste déroulante et venir pré-sélectionner une de ses lignes en fonction de la valeur du champs de fusion [ECRAN].
    Par conséquent, la dernière combo me semble compliquée à utiliser...
    Pensez-vous que la première liste déroulante serait utilisable ou pas du tout ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Audrey37 Voir le message
    Pouvez-vous mettre votre fichier en .zip ?

  10. #10
    Candidat au Club
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2018
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2018
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Pouvez-vous mettre votre fichier en .zip ?
    Voici le zip.
    et merci encore pour votre aide !
    Fichiers attachés Fichiers attachés

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Audrey37 Voir le message
    Ce sont des contrôles de type ControlField et ControlContent

    Il vous faut regarder comment le contrôle ActiveX Combobox1 est chargé à l'ouverture. Je n'ai pas réussi à assigner la valeur du FormField ListeDéroulante1 avec la valeur de la Combobox1. Cette liste à l'air non modifiable.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/01/2010, 15h50
  2. Réponses: 17
    Dernier message: 23/12/2009, 17h12
  3. Réponses: 2
    Dernier message: 22/09/2009, 17h56
  4. Réponses: 3
    Dernier message: 13/08/2009, 10h55
  5. [AJAX] Rafraîchissement automatique sur une liste déroulante
    Par frutix dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/04/2007, 16h09

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