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 un champ de formulaire Liste déroulante dans un tableau [WD-2003]


Sujet :

VBA Word

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut Récupérer un champ de formulaire Liste déroulante dans un tableau
    Bonjour,

    Ça fait quelques années que je n'ai pas participé aux forums, mais j'ai néanmoins gardé un œil sur le site, et c'est avec plaisir que je me remets à un petit développement et par conséquent que je vais solliciter vos compétences et votre gentillesse.

    J'ai un formulaire dans un tableau, dans la première colonne un champ liste déroulante, dans la seconde un champ texte normal.

    Lorsque je récupère le contenu des cellules, il n'y a pas de problème pour le champ texte, mais pour le champ liste déroulante de la première colonne, j'ai un petit carré au lieu du contenu.
    J'ai tenté de récupérer le résultat du champ dans la cellule mais sans succès, j'obtiens le message "Erreur de compilation, Membre de méthode ou de données introuvables".

    Voici le premier code qui me renvoie un petit carré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print ActiveDocument.Tables(1).Cell(x, y).Range.text
    et le code que j'ai tenté mais qui me renvoie l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print ActiveDocument.Tables(1).Cell(x, y).FormFields.Result
    Visiblement je ne peux pas demander à prendre le résultat du champ dans une cellule, ou alors, je n'ai pas mis la bonne instruction.

    J'ai bien trouvé comment récupérer le résultat du champ mais pas lorsqu'il est dans un tableau.

    Je vous remercie par avance pour votre aide, toujours précieuse !
    Bonne journée,

    JMarc

  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,

    Ton souhait serait de prélever un contenu de cellule pour le mettre comme résultat dans une liste déroulante ?

    En général, on remplit la liste déroulante pour permettre de faire un choix.

    Mais un petit problème c'est qu'une cellule de tableau contient autre chose que du texte.

    Je te propose une petite expérience !

    Mesure la longueur d'un texte contenu dans une cellule, tu verras que le texte contient deux caractères supplémentaires.

    Il faut éliminer ces caractères, pour ne pas devoir le faire à chaque fois, j'utilise une fonction netText qui renvoie un string.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut
    Bonjour Olivier et merci pour ta réponse.

    Citation Envoyé par Heureux-oli Voir le message
    Ton souhait serait de prélever un contenu de cellule pour le mettre comme résultat dans une liste déroulante ?
    Non, en fait, mes utilisateurs font un choix avec la liste déroulante, et c'est ce choix que je veux récupérer par VBA. Ensuite, je vais compiler tous les éléments de mon formulaire dans un autre document ou une feuille excel.

    Citation Envoyé par Heureux-oli Voir le message
    Il faut éliminer ces caractères, pour ne pas devoir le faire à chaque fois, j'utilise une fonction netText qui renvoie un string.
    Oui, j'ai bien lu ton tutoriel, qui m'a appris plein de chose d'ailleurs, et j'ai aussi testé ta fonction et je l'utilise.

    Merci encore !

    JMarc

  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,

    si ta liste déroulante est un champ de formulaire, c'est bien result qu'il faut utiliser, mais ton code n'est pas bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print ActiveDocument.FormFields(3).Result
    L'utilisation du nom du contrôle peut le faire.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut
    Citation Envoyé par Heureux-oli Voir le message
    Salut,

    si ta liste déroulante est un champ de formulaire, c'est bien result qu'il faut utiliser, mais ton code n'est pas bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print ActiveDocument.FormFields(3).Result
    L'utilisation du nom du contrôle peut le faire.
    Oui, je suis d'accord avec toi dans un cas général, mais là, il faut que je prenne le résultat d'une cellule en particulier, dans un ordre précis car je dois ensuite insérer des valeurs devant et les valeurs d'autres cellules derrière, en faisant un saut de ligne à la fin de chaque ligne.
    Dans ton code, sauf si je comprends pas bien, je vais récupérer les résultats les uns à la suite des autres.
    Sachant que j'ai dans mon formulaire, plusieurs tableaux (5 pour le moment), dont le nombre de colonne est variable.

    Peut-être que mon code sera plus parlant, sachant que ce n'est qu'une approche car j'apprends au fur et à mesure.
    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
    Sub TestJMC3()
    Dim NbCol As Integer
    Dim NbLigne As Integer
     
    ActiveDocument.Unprotect
     
    For z = 1 To 5
     
        NbLigne = ActiveDocument.Tables(z).Rows.Count 'Nombre de lignes
        NbCol = ActiveDocument.Tables(z).Columns.Count 'Nombre de colonnes
     
        For x = 2 To NbLigne
            For y = 1 To NbCol
                Debug.Print NetText(ActiveDocument.Tables(z).Cell(x, y).Range.text)
            Next
        Next
    Next
     
    End Sub

  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,

    Ça ne change rien, que le formfield soit dans le document ou dans une table.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.FormFields("MaListe").Result
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveDocument.FormFields(3).Result
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut
    En fait, tout au début, j'avais fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each myFF In ActiveDocument.FormFields
        Debug.Print myFF.Name
        Debug.Print myFF.Result
    Next myFF
    Ça balayait tous les champs du document et m'en faisait une liste mais avec des retours à la ligne à chaque ligne, or j'ai besoin de faire quelque chose qui ressemble à ça au bout du compte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LigneRes = NumSemaine & vbTab & Application.UserName & vbTab & Application.UserAddress & vbTab & myFF.Result 'du FF de la première colonne mais il y aura ensuite les FF de la seconde voir de la 3ème colonne
    Debug.Print LigneRes
    Je ne sais pas comment préciser à VBA quel FormFields prendre pour l'insérer au bon endroit. Ce qui est dommage c'est que si ce n'était pas une liste déroulante, je n'aurais aucun problème...

    Merci à toi !

    JMarc

  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,

    Tous les formfields ont par défaut un nom.
    Et si le nom ne convient pas, on peut le changer.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut
    Bonjour Olivier,

    J'ai voulu être simple dans l'exposé de mon problème, mais du coup, je n'ai pas tout dit...

    Mon document est composé de plusieurs tableaux (5 à ce jour), et les utilisateurs vont cliquer sur des boutons pour ajouter des lignes dans ces tableaux par le biais de code VBA, mais dans chaque nouvelle ligne sera inséré de nouveaux formfields dont le nom est généré automatiquement.

    Puis-je déduire de ton précédent message que je pourrais, lors de la génération des nouveaux formfields, leur attribuer un nom que je pourrais contrôler ? comme par exemple FfTab1.xx, xx s'incrémentant automatiquement ???

    Merci de ton aide.

    JMarc

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 163
    Points : 166
    Points
    166
    Par défaut
    Bonjour,
    En posant mes questions et en utilisant vos (enfin, tes réponses Olivier), j'ai fini par trouver une solution.

    L'erreur que je faisais, était de vouloir récupérer les contenus des cellules des tableaux et non les formfields.

    Donc, je compte le nombre de lignes et de colonnes de chaque tableau et je fais des boucles qui vont aux bons endroits.

    Merci pour ton aide Olivier !

    Bon WE

    JMarc

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

Discussions similaires

  1. [AC-2010] Lier champs de type liste déroulante dans table
    Par py86acces dans le forum Access
    Réponses: 10
    Dernier message: 20/01/2015, 21h55
  2. Réponses: 6
    Dernier message: 25/10/2009, 11h56
  3. Réponses: 0
    Dernier message: 24/10/2007, 20h29
  4. Faire apparaitre une liste déroulante dans un tableau
    Par AsQuel dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/07/2007, 17h20
  5. Réponses: 11
    Dernier message: 26/04/2007, 10h40

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