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 :

Balayer toutes les listeBox existant dans un document et récupérer la valeur selectionnée.


Sujet :

VBA Word

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Juin 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 42
    Points : 38
    Points
    38
    Par défaut Balayer toutes les listeBox existant dans un document et récupérer la valeur selectionnée.
    Bonjour.

    J'ai un certain nombre de document MS Word qui ont tous la même mise en page.

    Je souhaite :
    1- ouvrir chaque document
    2- parcourir dans chaque document l'ensemble des listbox
    3-Pour chaque listbox :
    je souhaite récupérer la valeur qui est sélectionnée

    Pour l'instant j'ai réussi à programmer la première partie : Boucler sur plusieurs document Word :

    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
    Public wordApp As New Word.Application
     
    Public Sub Ouvrir_Tout_Les_Fichiers()
     
    Dim Fichier_Objet As String
     
    titre = "Ouvrir le(s) fichier(s)"
    Filt = "Fichier(s) a integrer (*.docm;*.doc;*.docx),*.docm;*.doc;*.docx"
    fileToOpen = Application.GetOpenFilename(FileFilter:=Filt, Title:=titre, MultiSelect:=True)
     
    For I = LBound(fileToOpen) To UBound(fileToOpen)
     
        FilePath = Left(fileToOpen(I), InStrRev(fileToOpen(I), "\"))
        Fichier_Objet = Mid(fileToOpen(I), InStrRev(fileToOpen(I), "\") + 1)
        Set wordApp = CreateObject("Word.Application")
        wordApp.Documents.Open fileToOpen(I)
        wordApp.Visible = True
     
        File_Name = UBound(fileToOpen)
     
        Call _2_parcourir_dans_chaque_document_l_ensemble_des_listbox(I, Fichier_Objet)
     
        wordApp.Documents.Close
        wordApp.Quit
     
    Next I
     
    End Sub

    Dans chaque document j'essaie de parcourir l'ensemble des listbox !

    Apparemment les listbox sont des objets "ContentControlListEntry" ...
    https://docs.microsoft.com/fr-fr/off...ntrollistentry
    ... qui sont contenus dans des objets "ContentControl"
    https://docs.microsoft.com/fr-fr/off...ntent-controls

    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
    Public Sub _2_parcourir_dans_chaque_document_l_ensemble_des_listbox(I, Fichier_Objet)
    Dim objCc As ContentControl
    Dim objLe As ContentControlListEntry
     
    Debug.Print Fichier_Objet
     
    For Each objCc In wordApp.ActiveDocument.ContentControls
       For Each objLe In objCc.DropdownListEntries
            Debug.Print objLe.Text
            Debug.Print objLe.Index
            Debug.Print objLe.Value
            'Debug.Print objLe.Creator
       Next
    Next
     
    End Sub
    j'essaie ainsi de parcourir toutes les listbox (objCc.DropdownListEntries) et extraire la valeur qui a été sélectionnée. Mais impossible de trouver la bonne propriété !
    J'ai réussi à extraire objLe.Text ; objLe.Index ; objLe.Value ... mais je ne trouve rien qui ressemblerais à la valeur qui a été choisie dans la listbox. (peut-être la propriété visible = true ... ou quelque chose comme ça ??)

    ...
    j'ai réussi à extraire avec succès les valeurs des "checkbox" et les valeurs des "champs utilisateurs" ... mais je bloque vraiment sur ces "listbox" :

    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
     
    Public Sub Extraire_champs_utilisateurs_et_checkbox(I, Fichier_Objet)
    Dim ch As Field
    Dim Ctrl As ContentControl
     
    Debug.Print Fichier_Objet
     
    For Each ch In wordApp.ActiveDocument.Fields
       If ch.Type = "70" Then
          Debug.Print "Index ", ch.Index
          Debug.Print "Result ", ch.Result
          Debug.Print "Type ", ch.Type
       End If
    Next ch
     
    For Each Ctrl In wordApp.ActiveDocument.ContentControls
       If Ctrl.Type = "8" Then
          If Ctrl.Checked = True Then
             Debug.Print Ctrl.Tag
             Debug.Print Ctrl.ID
             Debug.Print "True"
          Else
             Debug.Print Ctrl.Tag
             Debug.Print Ctrl.ID
             Debug.Print "False"
     
          End If
       End If
    Next
    End Sub
    Est-ce que quelqu'un aurait une idée sur la façon de procéder ??
    Merci beaucoup

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par Wire.Less Voir le message
    Bonjour.


    Apparemment les listbox sont des objets "ContentControlListEntry" ...

    j'essaie ainsi de parcourir toutes les listbox (objCc.DropdownListEntries) et extraire la valeur qui a été sélectionnée. Mais impossible de trouver la bonne propriété !
    J'ai réussi à extraire objLe.Text ; objLe.Index ; objLe.Value ... mais je ne trouve rien qui ressemblerais à la valeur qui a été choisie dans la listbox. (peut-être la propriété visible = true ... ou quelque chose comme ça ??)
    Le ListBox, le contrôle de contenu (ContentControl) et la liste déroulante (DropDown) sont trois choses différentes que tu mélanges allègrement dans ton code. Et puis DropDownListEntries et ContentControlListEntries sont probablement des collections et pas des objets

    M'est avis qu'avant de faire ton programme, tu devrais commencer par la base:

    https://word.developpez.com/cours/
    https://docs.microsoft.com/fr-fr/off...d/object-model


    Et quand tu sauras vraiment de quoi tu parles, tu pourras peut-être avoir une réponse
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur généraliste
    Inscrit en
    Juin 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur généraliste
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2015
    Messages : 42
    Points : 38
    Points
    38
    Par défaut
    Ben, je ne penses pas être si loin de la solution que ça puisque le code suivant arrive bien à m'afficher le contenu de mes listebox !
    (Ensuite, c'est vrai que ce n'est pas être pas le bon vocabulaire ... mais apparemment se sont des ContentControlListEntry puisque j'arrive à afficher chaque élément de ma "liste")

    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
    Public Sub _2_parcourir_dans_chaque_document_l_ensemble_des_listbox(I, Fichier_Objet)
    Dim objCc As ContentControl
    Dim objLe As ContentControlListEntry
     
    Debug.Print Fichier_Objet
     
    For Each objCc In wordApp.ActiveDocument.ContentControls
       For Each objLe In objCc.DropdownListEntries
            Debug.Print objLe.Text
            Debug.Print objLe.Index
            Debug.Print objLe.Value
            'Debug.Print objLe.Creator
       Next
    Next
     
    End Sub

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour afficher la valeur sélectionnée dans toutes les listes déroulantes du document Word (Type 3 et 4) où se trouve le code VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
      Dim Ctrl As ContentControl
      For Each Ctrl In ThisDocument.ContentControls
        With Ctrl
          If .Type = 3 Or .Type = 4 Then MsgBox .Range
        End With
      Next
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [Python 3.X] Methode saut de lignes toute les x lignes dans un fichier existant.
    Par Jar0d dans le forum Général Python
    Réponses: 5
    Dernier message: 26/08/2018, 14h20
  2. Réponses: 4
    Dernier message: 11/04/2007, 11h24
  3. Réponses: 5
    Dernier message: 03/11/2006, 18h38
  4. Réponses: 1
    Dernier message: 23/10/2005, 00h55
  5. Réponses: 7
    Dernier message: 24/05/2003, 15h56

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