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 :

récupérer les champs de formulaire word


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Mars 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2020
    Messages : 7
    Points : 7
    Points
    7
    Par défaut récupérer les champs de formulaire word
    Bonjour,

    Dans un formulaire word ayant un certain nombre de contrôle (champ texte, numérique, liste déroulante, date ou case à cocher), je souhaite faire en VBA-Word une boucle de 1 à N pour récupérer tous les noms de contrôle et leur valeur pour ensuite pousser le tout dans un fichier CSV. Selon moi le plus simple sera de faire la boucle 2 fois pour écrire en premier la ligne d'entête et à la 2e passe la ligne de data. Par la suite ce fichier CSV sera poussé dans une BD Access ou vers un fichier Excel qui recevra tout par la magie du nuage.
    En VBA access, je suis bien alaise, un peu moins en VBA excel mais en VBA word, jamais. J'ai tenté quelques essais mais je plafonne (rapidement) sans succès. Les contrôles dont je parle sont ceux word 2016 et + avec les braquettes devant et après la zone à saisir (ce ne sont pas ceux issus d'ActiveX ni ceux des zones de champ des versions antérieures de word).

    Ma première question: comment récupérer ces objets. Si j'arrive à afficher un msgbox avec le nom et le contenu d'un seul champs je serai déjà bien heureux car par la suite je ferai mes essais de boucle pour conclure avec l'envoi dans un fichier CSV.

    merci pour vos suggestions.

  2. #2
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonjour Duppie,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Les contrôles dont je parle sont ceux word 2016 et + avec les braquettes devant et après la zone à saisir
    Tu parles des signets ?

    Regardes du côté "bookmarks" via ce lien :
    https://docs.microsoft.com/fr-fr/off...6)%26rd%3Dtrue

    Par contre, prends en compte qu'un bookmark (signet, si c'est bien ce que tu as décrit) est facilement effaçable dans un Word.

    Cordialement,
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Mars 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2020
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Après quelques recherches ce sont des “content controls”. Je cherches comment les retrouver via du code VBA pour les exploiter.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par duppie20 Voir le message
    Après quelques recherches ce sont des “content controls”. Je cherches comment les retrouver via du code VBA pour les exploiter.
    Bonjour,

    A tester :
    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
     
    Option Explicit
     
    Public MatriceControles() As Variant
    Public IndexMatrice As Integer
     
    Sub TestListerLesContentControls()
     
        ListerLesContentControls ActiveDocument
        LireLaMatriceControles
     
    End Sub
     
    Sub ListerLesContentControls(ByVal WordDoc As Document)
     
    Dim I As Integer
     
        IndexMatrice = 0
     
        With WordDoc
             For I = 1 To .ContentControls.Count
                 With .ContentControls(I)
                      'Debug.Print "Titre : " & .Title & ", type : " & .Type & ", contenu : " & .Range.Text
                      ReDim Preserve MatriceControles(2, IndexMatrice)
                      MatriceControles(0, IndexMatrice) = .Title
                      MatriceControles(1, IndexMatrice) = .Type
                      MatriceControles(2, IndexMatrice) = .Range.Text
                      IndexMatrice = IndexMatrice + 1
                End With
            Next I
       End With
     
    End Sub
     
     
    Sub LireLaMatriceControles()
     
        For IndexMatrice = LBound(MatriceControles, 2) To UBound(MatriceControles, 2)
            Debug.Print "Titre : " & MatriceControles(0, IndexMatrice) & ", type : " & MatriceControles(1, IndexMatrice) & ", contenu : " & MatriceControles(2, IndexMatrice)
        Next IndexMatrice
     
    End Sub

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Mars 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2020
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Type de content control
    Merci infiniment

    C'est exactement ce que je cherchais.
    Peut-être toutefois, je remarque que le type de content control n'est pas toujours facile à choisir

    Dans le cadre d'un formulaire où la protection à la saisie est activé, ça ne fait pas trop de différence entre texte enrichi versus texte brut.
    Pour les autres type c'est un peu la même chose entre zone le liste déroulante versus liste déroulante.
    Il n'y a pas de type numérique (je vais me résigner à inscrire des chiffres en alpha et les convertir plus tard...)

    pour la partie qui vise à transférer le contenu vers un fichier CSV ou EXCEL, je devrais y parvenir sans trop de peine.

    Bref, j'ai découvert les types suivants :

    type
    0- texte enrichi
    1- texte brut
    2- image
    3- zone liste déroulante
    4- liste déroulante
    5- ne semble pas exister
    6- calendrier
    7- ne semble pas exister
    8- case à cocher --> le data oui/non (ou peut être -1/0) ne s'affiche pas (ça indique seulement "?") --> je vais introduire une liste avec oui/non codé en -1 et 0. ;-)
    9- text répétitif

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par duppie20 Voir le message
    Pour les cases à cocher, modifiez le code comme ci-dessous :
    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
     
    Sub ListerLesContentControls(ByVal WordDoc As Document)
     
    Dim I As Integer
     
        IndexMatrice = 0
     
        With WordDoc
             For I = 1 To .ContentControls.Count
                 With .ContentControls(I)
                      'Debug.Print "Titre : " & .Title & ", type : " & .Type & ", contenu : " & .Range.Text
                      ReDim Preserve MatriceControles(2, IndexMatrice)
                      MatriceControles(0, IndexMatrice) = .Title
                      MatriceControles(1, IndexMatrice) = .Type
                      Select Case .Type
                             Case 8
                                  MatriceControles(2, IndexMatrice) = .Checked
                             Case Else
                                  MatriceControles(2, IndexMatrice) = .Range.Text
     
                      End Select
                      IndexMatrice = IndexMatrice + 1
                End With
            Next I
       End With
     
    End Sub

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Responsable d'exploitation informatique
    Inscrit en
    Mars 2020
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable d'exploitation informatique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2020
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Génial

    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/10/2008, 22h21
  2. [MySQL] Problème pour récupèrer les champs d'un formulaire qui se trouve dans un while
    Par mademoizel dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 21/03/2008, 14h59
  3. Réponses: 11
    Dernier message: 20/07/2007, 15h32
  4. Récupérer les champs d'un formulaire dans une jsp
    Par lalyly dans le forum Struts 1
    Réponses: 1
    Dernier message: 19/04/2007, 10h50
  5. Réponses: 2
    Dernier message: 29/01/2007, 19h34

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