Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2011, 11h46   #1
Membre habitué
 
Inscription : août 2006
Messages : 163
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : août 2006
Messages : 163
Points : 138
Points : 138
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 :
Debug.Print ActiveDocument.Tables(1).Cell(x, y).Range.text
et le code que j'ai tenté mais qui me renvoie l'erreur :
Code :
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
jeanchcom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 13h03   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 219
Points : 29 219
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 13h09   #3
Membre habitué
 
Inscription : août 2006
Messages : 163
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : août 2006
Messages : 163
Points : 138
Points : 138
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
jeanchcom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 13h23   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 219
Points : 29 219
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 :
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 13h42   #5
Membre habitué
 
Inscription : août 2006
Messages : 163
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : août 2006
Messages : 163
Points : 138
Points : 138
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 :
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 :
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
jeanchcom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 13h51   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 219
Points : 29 219
Salut,

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

Code :
ActiveDocument.FormFields("MaListe").Result
Ou

Code :
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 14h28   #7
Membre habitué
 
Inscription : août 2006
Messages : 163
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : août 2006
Messages : 163
Points : 138
Points : 138
En fait, tout au début, j'avais fait ça :
Code :
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 :
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
jeanchcom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 17h35   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 219
Points : 29 219
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 !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 08h57   #9
Membre habitué
 
Inscription : août 2006
Messages : 163
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : août 2006
Messages : 163
Points : 138
Points : 138
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
jeanchcom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2011, 15h02   #10
Membre habitué
 
Inscription : août 2006
Messages : 163
Détails du profil
Informations personnelles :
Âge : 50

Informations forums :
Inscription : août 2006
Messages : 163
Points : 138
Points : 138
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
jeanchcom est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h31.


 
 
 
 
Partenaires

Hébergement Web