OVH Cloud OVH Cloud

[VBA] Formulaire : itération sur un nom de label

4 réponses
Avatar
Nemroth
Bonsoir à tous,

J'ai un formulaire dans lequels j'ai des champs (texte ou liste
déroulante) dont certains ont des labels de structure identique.

Par exemple, j'ai un label D1Ste (pour moi Dossier n°1 : Société), un
label D2Ste, etc...

Je souhaite appliquer des modifications aux éléments représentés par ces
labels et pour celà j'utilise, par ex :

For i = 1 To 3
ActiveDocument.FormFields("D" & Str(i) & "Ste").DropDown.Value =
2
Next i

VBA me répond en passant sur la seconde ligne : Erreur d'exécution 5941
: Le membre de la collection requis n'exite pas.

Bien entendu, les champs liste déroulant dont le label est D1Ste, D2Ste
et D3Ste existent bien dans mon document.

Quelqu'un peut-il m'indiquer ce qui ne va pas ?

Par avance merci

@+ Nemroth

4 réponses

Avatar
Anacoluthe
Bonjour !

"Nemroth" nous a écrit ...
Par exemple, j'ai un label D1Ste
Je souhaite appliquer des modifications aux éléments représentés par ces
labels et pour celà j'utilise, par ex :
For i = 1 To 3
ActiveDocument.FormFields("D" & Str(i) & "Ste").DropDown.Value = 2
Next i
VBA me répond en passant sur la seconde ligne : Erreur d'exécution 5941
: Le membre de la collection requis n'exite pas.


- Par label vous parlez sans doute du 'signet' d'un champ formulaire
- "D" & Str(1) & "Ste" va donner D 1Ste (notez l'espace entre D et 1)
vieille habitude du Basic : revoyez votre expression chaîne !!!!!!

Anacoluthe
« Les méthodes sont les habitudes de l'esprit
et les économies de la mémoire. »
- RIVAROL

Avatar
Nemroth
Bonsoir Anacoluthe,

Merci pour ton aide précieuse.
Je n'avais effectivement pas vu que mon expression renvoyait "D 1Ste"
Pourquoi ? Parce que (en lisant un peu mieux l'aide (j'ai honte !...)), la
fonction Str() garde un espace à gauche pour le signe même si le nombre est
positif (donc en général sans signe...)
Problème résolu en mettant :

For i = 1 To 3
ActiveDocument.FormFields("D" & LTrim(Str(i)) & "Ste").DropDown.Value = 2
next i

Et là ça fonctionne parfaitement...

Merci encore pour ton aide.

@+ Nemroth


Bonjour !

"Nemroth" nous a écrit ...
Par exemple, j'ai un label D1Ste
Je souhaite appliquer des modifications aux éléments représentés par ces
labels et pour celà j'utilise, par ex :
For i = 1 To 3
ActiveDocument.FormFields("D" & Str(i) & "Ste").DropDown.Value = 2
Next i
VBA me répond en passant sur la seconde ligne : Erreur d'exécution 5941
: Le membre de la collection requis n'exite pas.


- Par label vous parlez sans doute du 'signet' d'un champ formulaire
- "D" & Str(1) & "Ste" va donner D 1Ste (notez l'espace entre D et 1)
vieille habitude du Basic : revoyez votre expression chaîne !!!!!!

Anacoluthe
« Les méthodes sont les habitudes de l'esprit
et les économies de la mémoire. »
- RIVAROL


--
Pour me répondre en BAL, retirer le nospam...


Avatar
Guy Moncomble
Bonjour à tous,
dans le message ,

| Pourquoi ? Parce que (en lisant un peu mieux l'aide (j'ai honte
| !...)), la fonction Str() garde un espace à gauche pour le signe même
| si le nombre est positif (donc en général sans signe...)

Aie, aie, j'espère que tu ne vas pas avoir encore plus honte.
En lisant un peu plus l'aide tu vas constater que lorsque l'on a besoin
de convertir une valeur d'un type quelconque dans un autre, string par
exemple, il est plus sûr d'utiliser les fonctions de conversion.

| For i = 1 To 3
| ActiveDocument.FormFields("D" & LTrim(Str(i)) & "Ste").DropDown.Value
| = 2 next i


d'où l'expression :
ActiveDocument.FormFields("D" & Cstr(i) & "Ste").DropDown.Value

Str, qui est plutôt un héritage du passé est à réserver, éventuellement
, à l'affichage. A mon avis, c'est une fonction à oublier, d'autant
qu'elle ne renvoie pas une chaîne mais un Variant qui peut provoquer des
erreurs si on l'utilise comme argument d'entrée dans une fonction dont
les arguments sont typés. En outre Cstr est mieux définie quant au
contenu de la chaîne renvoyée, voir l'aide.

--
A+

GMO MVP Word

Laissées à elles-mêmes, les choses tendent à aller de pire en pire. Se
faire aider ne fait qu'accélérer le processus.

Edward A. Murphy, Jr.
Avatar
Nemroth
Bonsoir Guy,

Une certain temps à répondre, ne serait-ce que pour dire merci.

Je reviens seuleument aujourd'hui sur ce fil, en me promenant...

Je retiens tout à fait le conseil tout à fait judicieux et non, je n'ai pas plus
honte, car je ne suis pas un cador en VBA et j'ignorais même jusqu'à l'existence
de Cstr...

Alors merci beaucoup.

@+ Nemroth


Bonjour à tous,
dans le message ,

| Pourquoi ? Parce que (en lisant un peu mieux l'aide (j'ai honte
| !...)), la fonction Str() garde un espace à gauche pour le signe même
| si le nombre est positif (donc en général sans signe...)

Aie, aie, j'espère que tu ne vas pas avoir encore plus honte.
En lisant un peu plus l'aide tu vas constater que lorsque l'on a besoin
de convertir une valeur d'un type quelconque dans un autre, string par
exemple, il est plus sûr d'utiliser les fonctions de conversion.

| For i = 1 To 3
| ActiveDocument.FormFields("D" & LTrim(Str(i)) & "Ste").DropDown.Value
| = 2 next i

d'où l'expression :
ActiveDocument.FormFields("D" & Cstr(i) & "Ste").DropDown.Value

Str, qui est plutôt un héritage du passé est à réserver, éventuellement
, à l'affichage. A mon avis, c'est une fonction à oublier, d'autant
qu'elle ne renvoie pas une chaîne mais un Variant qui peut provoquer des
erreurs si on l'utilise comme argument d'entrée dans une fonction dont
les arguments sont typés. En outre Cstr est mieux définie quant au
contenu de la chaîne renvoyée, voir l'aide.

--
A+

GMO MVP Word

Laissées à elles-mêmes, les choses tendent à aller de pire en pire. Se
faire aider ne fait qu'accélérer le processus.

Edward A. Murphy, Jr.


--
Pour me répondre en BAL, retirer le nospam...