Dans un tableau Word de 4 colonnes et 15 lignes, il y a dans la première
colonne sur chaque ligne un champ formulaire texte. Chaque champ
formulaire texte à un nom incrémenté (par exemple TClient01, Tclient02,
etc...).
Comment déterminer, en VBA, le nombre de lignes remplies, sachant qu'il
n'y a pas de lignes vides intercalées admises.
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ] Bonjour à toutes et à tous
Dans un tableau Word de 4 colonnes et 15 lignes, il y a dans la première colonne sur chaque ligne un champ formulaire texte. Chaque champ formulaire texte à un nom incrémenté (par exemple TClient01, Tclient02, etc...).
Comment déterminer, en VBA, le nombre de lignes remplies, sachant qu'il n'y a pas de lignes vides intercalées admises.
Je ne vois pas d'autre solution que de les compter, ou plutôt en partant du bas, s'arrêter à la première cellule non vide. Par exemple avec deux boucles imbriquées du genre (écrit à la volée, pas testé) for i = NbLignes to 1 step -1 for i = 1 to NbColonnes if len(MonTableau.Cell(i,j).text) >2 then goto Suite next i next j Suite : ' i est la 1-ère ligne remplie ' si le tableau est vide i = 0
C'est de la programmation dont on doit avoir honte, mais c'est efficace. Pour faire plus académique utiliser un booléen qui indique qu'on a trouvé du texte et tester la valeur du booléen pour sortir proprement des deux for.
-- A+
Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ]
Bonjour à toutes et à tous
Dans un tableau Word de 4 colonnes et 15 lignes, il y a dans la première colonne sur
chaque ligne un champ formulaire texte. Chaque champ formulaire texte à un nom
incrémenté (par exemple TClient01, Tclient02, etc...).
Comment déterminer, en VBA, le nombre de lignes remplies, sachant qu'il n'y a pas de
lignes vides intercalées admises.
Je ne vois pas d'autre solution que de les compter, ou plutôt en
partant du bas, s'arrêter à la première cellule non vide.
Par exemple avec deux boucles imbriquées du genre (écrit à la volée,
pas testé)
for i = NbLignes to 1 step -1
for i = 1 to NbColonnes
if len(MonTableau.Cell(i,j).text) >2 then goto Suite
next i
next j
Suite :
' i est la 1-ère ligne remplie
' si le tableau est vide i = 0
C'est de la programmation dont on doit avoir honte, mais c'est
efficace.
Pour faire plus académique utiliser un booléen qui indique qu'on a
trouvé du texte et tester la valeur du booléen pour sortir proprement
des deux for.
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ] Bonjour à toutes et à tous
Dans un tableau Word de 4 colonnes et 15 lignes, il y a dans la première colonne sur chaque ligne un champ formulaire texte. Chaque champ formulaire texte à un nom incrémenté (par exemple TClient01, Tclient02, etc...).
Comment déterminer, en VBA, le nombre de lignes remplies, sachant qu'il n'y a pas de lignes vides intercalées admises.
Je ne vois pas d'autre solution que de les compter, ou plutôt en partant du bas, s'arrêter à la première cellule non vide. Par exemple avec deux boucles imbriquées du genre (écrit à la volée, pas testé) for i = NbLignes to 1 step -1 for i = 1 to NbColonnes if len(MonTableau.Cell(i,j).text) >2 then goto Suite next i next j Suite : ' i est la 1-ère ligne remplie ' si le tableau est vide i = 0
C'est de la programmation dont on doit avoir honte, mais c'est efficace. Pour faire plus académique utiliser un booléen qui indique qu'on a trouvé du texte et tester la valeur du booléen pour sortir proprement des deux for.
-- A+
Demokos
Merci Geo pour ta réponse. Elle me donne un début de solution. Mais : 1) je ne veux vérifier que la première colonne, pour moi c'est suffisant. Donc pas besoin de for j = 1 to NbColonnes. 2) Dans chaque cellule, il y a un champ de formulaire, et non directement du texte. Là je bloque pour savoir s'il y a un texte dans le champ ou non. 3) L'idée de partir du bas (j'avoue ne je l'ai pas eue) me paraît très intéressante.
Geo a écrit :
Bonjour
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ] Bonjour à toutes et à tous
Dans un tableau Word de 4 colonnes et 15 lignes, il y a dans la première colonne sur chaque ligne un champ formulaire texte. Chaque champ formulaire texte à un nom incrémenté (par exemple TClient01, Tclient02, etc...).
Comment déterminer, en VBA, le nombre de lignes remplies, sachant qu'il n'y a pas de lignes vides intercalées admises.
Je ne vois pas d'autre solution que de les compter, ou plutôt en partant du bas, s'arrêter à la première cellule non vide. Par exemple avec deux boucles imbriquées du genre (écrit à la volée, pas testé) for i = NbLignes to 1 step -1 for i = 1 to NbColonnes if len(MonTableau.Cell(i,j).text) >2 then goto Suite next i next j Suite : ' i est la 1-ère ligne remplie ' si le tableau est vide i = 0
C'est de la programmation dont on doit avoir honte, mais c'est efficace. Pour faire plus académique utiliser un booléen qui indique qu'on a trouvé du texte et tester la valeur du booléen pour sortir proprement des deux for.
Merci Geo pour ta réponse. Elle me donne un début de solution.
Mais :
1) je ne veux vérifier que la première colonne, pour moi c'est
suffisant. Donc pas besoin de for j = 1 to NbColonnes.
2) Dans chaque cellule, il y a un champ de formulaire, et non
directement du texte. Là je bloque pour savoir s'il y a un texte dans le
champ ou non.
3) L'idée de partir du bas (j'avoue ne je l'ai pas eue) me paraît très
intéressante.
Geo a écrit :
Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ] Bonjour à
toutes et à tous
Dans un tableau Word de 4 colonnes et 15 lignes, il y a dans la
première colonne sur chaque ligne un champ formulaire texte. Chaque
champ formulaire texte à un nom incrémenté (par exemple TClient01,
Tclient02, etc...).
Comment déterminer, en VBA, le nombre de lignes remplies, sachant
qu'il n'y a pas de lignes vides intercalées admises.
Je ne vois pas d'autre solution que de les compter, ou plutôt en partant
du bas, s'arrêter à la première cellule non vide.
Par exemple avec deux boucles imbriquées du genre (écrit à la volée, pas
testé)
for i = NbLignes to 1 step -1
for i = 1 to NbColonnes
if len(MonTableau.Cell(i,j).text) >2 then goto Suite
next i
next j
Suite :
' i est la 1-ère ligne remplie
' si le tableau est vide i = 0
C'est de la programmation dont on doit avoir honte, mais c'est efficace.
Pour faire plus académique utiliser un booléen qui indique qu'on a
trouvé du texte et tester la valeur du booléen pour sortir proprement
des deux for.
Merci Geo pour ta réponse. Elle me donne un début de solution. Mais : 1) je ne veux vérifier que la première colonne, pour moi c'est suffisant. Donc pas besoin de for j = 1 to NbColonnes. 2) Dans chaque cellule, il y a un champ de formulaire, et non directement du texte. Là je bloque pour savoir s'il y a un texte dans le champ ou non. 3) L'idée de partir du bas (j'avoue ne je l'ai pas eue) me paraît très intéressante.
Geo a écrit :
Bonjour
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ] Bonjour à toutes et à tous
Dans un tableau Word de 4 colonnes et 15 lignes, il y a dans la première colonne sur chaque ligne un champ formulaire texte. Chaque champ formulaire texte à un nom incrémenté (par exemple TClient01, Tclient02, etc...).
Comment déterminer, en VBA, le nombre de lignes remplies, sachant qu'il n'y a pas de lignes vides intercalées admises.
Je ne vois pas d'autre solution que de les compter, ou plutôt en partant du bas, s'arrêter à la première cellule non vide. Par exemple avec deux boucles imbriquées du genre (écrit à la volée, pas testé) for i = NbLignes to 1 step -1 for i = 1 to NbColonnes if len(MonTableau.Cell(i,j).text) >2 then goto Suite next i next j Suite : ' i est la 1-ère ligne remplie ' si le tableau est vide i = 0
C'est de la programmation dont on doit avoir honte, mais c'est efficace. Pour faire plus académique utiliser un booléen qui indique qu'on a trouvé du texte et tester la valeur du booléen pour sortir proprement des deux for.
Geo
Bonjour
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ] Merci Geo pour ta réponse. Elle me donne un début de solution. Mais : 1) je ne veux vérifier que la première colonne, pour moi c'est suffisant. Donc pas besoin de for j = 1 to NbColonnes.
Super, on va faire de la programmation propre, remplacer le goto Suite par exit for
2) Dans chaque cellule, il y a un champ de formulaire, et non directement du texte. Là je bloque pour savoir s'il y a un texte dans le champ ou non.
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient par la propriété result : Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result If len(montexte) > 0 then 'rempli
-- A+
Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ]
Merci Geo pour ta réponse. Elle me donne un début de solution.
Mais :
1) je ne veux vérifier que la première colonne, pour moi c'est suffisant. Donc pas
besoin de for j = 1 to NbColonnes.
Super, on va faire de la programmation propre, remplacer le goto Suite
par exit for
2) Dans chaque cellule, il y a un champ de formulaire, et non directement du texte. Là
je bloque pour savoir s'il y a un texte dans le champ ou non.
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient
par la propriété result :
Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result
If len(montexte) > 0 then 'rempli
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ] Merci Geo pour ta réponse. Elle me donne un début de solution. Mais : 1) je ne veux vérifier que la première colonne, pour moi c'est suffisant. Donc pas besoin de for j = 1 to NbColonnes.
Super, on va faire de la programmation propre, remplacer le goto Suite par exit for
2) Dans chaque cellule, il y a un champ de formulaire, et non directement du texte. Là je bloque pour savoir s'il y a un texte dans le champ ou non.
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient par la propriété result : Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result If len(montexte) > 0 then 'rempli
-- A+
Demokos
En combinant ta réponse (et le .Result qui m'a intéressé) et une (nouvelle) recherche dans l'aide VBA, j'ai trouvé qu'en utilisant quelque chose comme : ActiveDocument.FormFields("TClien01").Result = "", Je peux tester si le champ texte est vide ou non. Est-il possible dans une boucle de tester TClien15, TClien14, etc., ou dois-je tester les champs un par un ?
Geo a écrit :
Bonjour
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ] Merci Geo pour ta réponse. Elle me donne un début de solution. Mais : 1) je ne veux vérifier que la première colonne, pour moi c'est suffisant. Donc pas besoin de for j = 1 to NbColonnes.
Super, on va faire de la programmation propre, remplacer le goto Suite par exit for
2) Dans chaque cellule, il y a un champ de formulaire, et non directement du texte. Là je bloque pour savoir s'il y a un texte dans le champ ou non.
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient par la propriété result : Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result If len(montexte) > 0 then 'rempli
En combinant ta réponse (et le .Result qui m'a intéressé) et une
(nouvelle) recherche dans l'aide VBA, j'ai trouvé qu'en utilisant
quelque chose comme :
ActiveDocument.FormFields("TClien01").Result = "",
Je peux tester si le champ texte est vide ou non.
Est-il possible dans une boucle de tester TClien15, TClien14, etc., ou
dois-je tester les champs un par un ?
Geo a écrit :
Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ] Merci Geo pour
ta réponse. Elle me donne un début de solution.
Mais :
1) je ne veux vérifier que la première colonne, pour moi c'est
suffisant. Donc pas besoin de for j = 1 to NbColonnes.
Super, on va faire de la programmation propre, remplacer le goto Suite
par exit for
2) Dans chaque cellule, il y a un champ de formulaire, et non
directement du texte. Là je bloque pour savoir s'il y a un texte dans
le champ ou non.
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient par
la propriété result :
Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result
If len(montexte) > 0 then 'rempli
En combinant ta réponse (et le .Result qui m'a intéressé) et une (nouvelle) recherche dans l'aide VBA, j'ai trouvé qu'en utilisant quelque chose comme : ActiveDocument.FormFields("TClien01").Result = "", Je peux tester si le champ texte est vide ou non. Est-il possible dans une boucle de tester TClien15, TClien14, etc., ou dois-je tester les champs un par un ?
Geo a écrit :
Bonjour
[ Cette réponse est faite sur le forum public Word : news://msnews.microsoft.com/microsoft.public.fr.word ] Merci Geo pour ta réponse. Elle me donne un début de solution. Mais : 1) je ne veux vérifier que la première colonne, pour moi c'est suffisant. Donc pas besoin de for j = 1 to NbColonnes.
Super, on va faire de la programmation propre, remplacer le goto Suite par exit for
2) Dans chaque cellule, il y a un champ de formulaire, et non directement du texte. Là je bloque pour savoir s'il y a un texte dans le champ ou non.
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient par la propriété result : Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result If len(montexte) > 0 then 'rempli
Lotre
Bonsoir,
Geo wrote:
Bonjour
(...)
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient par la propriété result : Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result If len(montexte) > 0 then 'rempli
... En plus je ne suis pas sûr d'avoir compris la situation ;o)
S'agit-il de champs du type { ASK TClient37 "Texte de l'invite : " } ?
Si c'est ça et donc si j'ai compris la question le contenu saisi est tout simplement dans
ActiveDocument.Bookmarks("TClient37").Range.Text
Sinon , ActiveDocument.Fields(37).Result.Text donnera la même chose si le champs TClient37 a été le 37-ième champs créé dans le document ... ( ce qui n'est pas obligatoire ;o)
Et ... il n'est pas utile de faire référence au tableau qui contient ces champs...
HB
Bonsoir,
Geo wrote:
Bonjour
(...)
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient
par la propriété result :
Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result
If len(montexte) > 0 then 'rempli
... En plus je ne suis pas sûr d'avoir compris la situation ;o)
S'agit-il de champs du type
{ ASK TClient37 "Texte de l'invite : " } ?
Si c'est ça et donc si j'ai compris la question
le contenu saisi est tout simplement dans
ActiveDocument.Bookmarks("TClient37").Range.Text
Sinon , ActiveDocument.Fields(37).Result.Text
donnera la même chose si le champs TClient37
a été le 37-ième champs créé dans le document ...
( ce qui n'est pas obligatoire ;o)
Et ... il n'est pas utile de faire référence au tableau
qui contient ces champs...
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient par la propriété result : Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result If len(montexte) > 0 then 'rempli
... En plus je ne suis pas sûr d'avoir compris la situation ;o)
S'agit-il de champs du type { ASK TClient37 "Texte de l'invite : " } ?
Si c'est ça et donc si j'ai compris la question le contenu saisi est tout simplement dans
ActiveDocument.Bookmarks("TClient37").Range.Text
Sinon , ActiveDocument.Fields(37).Result.Text donnera la même chose si le champs TClient37 a été le 37-ième champs créé dans le document ... ( ce qui n'est pas obligatoire ;o)
Et ... il n'est pas utile de faire référence au tableau qui contient ces champs...
HB
Demokos
Il est vrai que le tableau est utilisé pour des raisons de présentation et que le champ texte de formulaire pourrait être hors du tableau.
Lotre a écrit :
Bonsoir,
Geo wrote:
Bonjour
(...)
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient par la propriété result : Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result If len(montexte) > 0 then 'rempli
... En plus je ne suis pas sûr d'avoir compris la situation ;o)
S'agit-il de champs du type { ASK TClient37 "Texte de l'invite : " } ?
Si c'est ça et donc si j'ai compris la question le contenu saisi est tout simplement dans
ActiveDocument.Bookmarks("TClient37").Range.Text
Sinon , ActiveDocument.Fields(37).Result.Text donnera la même chose si le champs TClient37 a été le 37-ième champs créé dans le document ... ( ce qui n'est pas obligatoire ;o)
Et ... il n'est pas utile de faire référence au tableau qui contient ces champs...
HB
Il est vrai que le tableau est utilisé pour des raisons de présentation
et que le champ texte de formulaire pourrait être hors du tableau.
Lotre a écrit :
Bonsoir,
Geo wrote:
Bonjour
(...)
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient
par la propriété result :
Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result
If len(montexte) > 0 then 'rempli
... En plus je ne suis pas sûr d'avoir compris la situation ;o)
S'agit-il de champs du type
{ ASK TClient37 "Texte de l'invite : " } ?
Si c'est ça et donc si j'ai compris la question
le contenu saisi est tout simplement dans
ActiveDocument.Bookmarks("TClient37").Range.Text
Sinon , ActiveDocument.Fields(37).Result.Text
donnera la même chose si le champs TClient37
a été le 37-ième champs créé dans le document ...
( ce qui n'est pas obligatoire ;o)
Et ... il n'est pas utile de faire référence au tableau
qui contient ces champs...
Il est vrai que le tableau est utilisé pour des raisons de présentation et que le champ texte de formulaire pourrait être hors du tableau.
Lotre a écrit :
Bonsoir,
Geo wrote:
Bonjour
(...)
Là il faudrait un petit exemple, mais la valeur d'un champ s'obtient par la propriété result : Je verrais bien : MonTexte = MaCellule.Range.Fields(1).Result If len(montexte) > 0 then 'rempli
... En plus je ne suis pas sûr d'avoir compris la situation ;o)
S'agit-il de champs du type { ASK TClient37 "Texte de l'invite : " } ?
Si c'est ça et donc si j'ai compris la question le contenu saisi est tout simplement dans
ActiveDocument.Bookmarks("TClient37").Range.Text
Sinon , ActiveDocument.Fields(37).Result.Text donnera la même chose si le champs TClient37 a été le 37-ième champs créé dans le document ... ( ce qui n'est pas obligatoire ;o)
Et ... il n'est pas utile de faire référence au tableau qui contient ces champs...
HB
Lotre
Bonsoir,
Demokos wrote:
En combinant ta réponse (et le .Result qui m'a intéressé) et une (nouvelle) recherche dans l'aide VBA, j'ai trouvé qu'en utilisant quelque chose comme : ActiveDocument.FormFields("TClien01").Result = "", Je peux tester si le champ texte est vide ou non.
Tient ... Chez moi c'est ....Result.text mais peut-être Text est-elle la propriété par défaut de Result ce qui expliquerait le truc ...
Est-il possible dans une boucle de tester TClien15, TClien14, etc., ou dois-je tester les champs un par un ?
bien sûr puisque l'argument de FormFields est une chaîne tu peux la fabriquer...
Qqchose du genre =============================================== NbVide = 0 for i = 0 to 37 Nom = "TClient" & Right("00" & CStr(i),2) ' pour bien avoir 01 , 02 puis 10, 11, ..., ... jusqu'à 37
Contenu = ActiveDocument.FormFields(Nom).Result
If Contenu ="" Then ' traitement éventuel si vide NbVide = NbVide + 1 Else ' traitement éventuel si pas vide End If
' NbVide contient, comme son nom l'indique, ... =============================================== HB.
Bonsoir,
Demokos wrote:
En combinant ta réponse (et le .Result qui m'a intéressé) et une
(nouvelle) recherche dans l'aide VBA, j'ai trouvé qu'en utilisant
quelque chose comme :
ActiveDocument.FormFields("TClien01").Result = "",
Je peux tester si le champ texte est vide ou non.
Tient ... Chez moi c'est ....Result.text
mais peut-être Text est-elle la propriété par défaut de Result
ce qui expliquerait le truc ...
Est-il possible dans une boucle de tester TClien15, TClien14, etc.,
ou
dois-je tester les champs un par un ?
bien sûr puisque l'argument de FormFields
est une chaîne tu peux la fabriquer...
Qqchose du genre
=============================================== NbVide = 0
for i = 0 to 37
Nom = "TClient" & Right("00" & CStr(i),2)
' pour bien avoir 01 , 02 puis 10, 11, ..., ... jusqu'à 37
Contenu = ActiveDocument.FormFields(Nom).Result
If Contenu ="" Then
' traitement éventuel si vide
NbVide = NbVide + 1
Else
' traitement éventuel si pas vide
End If
' NbVide contient, comme son nom l'indique, ...
===============================================
HB.
En combinant ta réponse (et le .Result qui m'a intéressé) et une (nouvelle) recherche dans l'aide VBA, j'ai trouvé qu'en utilisant quelque chose comme : ActiveDocument.FormFields("TClien01").Result = "", Je peux tester si le champ texte est vide ou non.
Tient ... Chez moi c'est ....Result.text mais peut-être Text est-elle la propriété par défaut de Result ce qui expliquerait le truc ...
Est-il possible dans une boucle de tester TClien15, TClien14, etc., ou dois-je tester les champs un par un ?
bien sûr puisque l'argument de FormFields est une chaîne tu peux la fabriquer...
Qqchose du genre =============================================== NbVide = 0 for i = 0 to 37 Nom = "TClient" & Right("00" & CStr(i),2) ' pour bien avoir 01 , 02 puis 10, 11, ..., ... jusqu'à 37
Contenu = ActiveDocument.FormFields(Nom).Result
If Contenu ="" Then ' traitement éventuel si vide NbVide = NbVide + 1 Else ' traitement éventuel si pas vide End If
' NbVide contient, comme son nom l'indique, ... =============================================== HB.
Et ... il n'est pas utile de faire référence au tableau qui contient ces champs...
Sauf que la question était : "Comment déterminer, en VBA, le nombre de lignes remplies"
Mais peut-être n'était-ce pas le but exact, mais un moyen ?
-- A+
Demokos
Super, je vais tester tout ça demain au boulot et je posterai mon code. Merci à vous pour vos réponses qui m'orientent vers la solution.
Lotre a écrit :
Bonsoir,
Demokos wrote:
En combinant ta réponse (et le .Result qui m'a intéressé) et une (nouvelle) recherche dans l'aide VBA, j'ai trouvé qu'en utilisant quelque chose comme : ActiveDocument.FormFields("TClien01").Result = "", Je peux tester si le champ texte est vide ou non.
Tient ... Chez moi c'est ....Result.text mais peut-être Text est-elle la propriété par défaut de Result ce qui expliquerait le truc ...
Est-il possible dans une boucle de tester TClien15, TClien14, etc., ou dois-je tester les champs un par un ?
bien sûr puisque l'argument de FormFields est une chaîne tu peux la fabriquer...
Qqchose du genre =============================================== > NbVide = 0 for i = 0 to 37 Nom = "TClient" & Right("00" & CStr(i),2) ' pour bien avoir 01 , 02 puis 10, 11, ..., ... jusqu'à 37
Contenu = ActiveDocument.FormFields(Nom).Result
If Contenu ="" Then ' traitement éventuel si vide NbVide = NbVide + 1 Else ' traitement éventuel si pas vide End If
' NbVide contient, comme son nom l'indique, ... =============================================== > HB.
Super, je vais tester tout ça demain au boulot et je posterai mon code.
Merci à vous pour vos réponses qui m'orientent vers la solution.
Lotre a écrit :
Bonsoir,
Demokos wrote:
En combinant ta réponse (et le .Result qui m'a intéressé) et une
(nouvelle) recherche dans l'aide VBA, j'ai trouvé qu'en utilisant
quelque chose comme :
ActiveDocument.FormFields("TClien01").Result = "",
Je peux tester si le champ texte est vide ou non.
Tient ... Chez moi c'est ....Result.text
mais peut-être Text est-elle la propriété par défaut de Result
ce qui expliquerait le truc ...
Est-il possible dans une boucle de tester TClien15, TClien14, etc., ou
dois-je tester les champs un par un ?
bien sûr puisque l'argument de FormFields
est une chaîne tu peux la fabriquer...
Qqchose du genre
=============================================== > NbVide = 0
for i = 0 to 37
Nom = "TClient" & Right("00" & CStr(i),2)
' pour bien avoir 01 , 02 puis 10, 11, ..., ... jusqu'à 37
Contenu = ActiveDocument.FormFields(Nom).Result
If Contenu ="" Then
' traitement éventuel si vide
NbVide = NbVide + 1
Else
' traitement éventuel si pas vide
End If
' NbVide contient, comme son nom l'indique, ...
=============================================== >
HB.
Super, je vais tester tout ça demain au boulot et je posterai mon code. Merci à vous pour vos réponses qui m'orientent vers la solution.
Lotre a écrit :
Bonsoir,
Demokos wrote:
En combinant ta réponse (et le .Result qui m'a intéressé) et une (nouvelle) recherche dans l'aide VBA, j'ai trouvé qu'en utilisant quelque chose comme : ActiveDocument.FormFields("TClien01").Result = "", Je peux tester si le champ texte est vide ou non.
Tient ... Chez moi c'est ....Result.text mais peut-être Text est-elle la propriété par défaut de Result ce qui expliquerait le truc ...
Est-il possible dans une boucle de tester TClien15, TClien14, etc., ou dois-je tester les champs un par un ?
bien sûr puisque l'argument de FormFields est une chaîne tu peux la fabriquer...
Qqchose du genre =============================================== > NbVide = 0 for i = 0 to 37 Nom = "TClient" & Right("00" & CStr(i),2) ' pour bien avoir 01 , 02 puis 10, 11, ..., ... jusqu'à 37
Contenu = ActiveDocument.FormFields(Nom).Result
If Contenu ="" Then ' traitement éventuel si vide NbVide = NbVide + 1 Else ' traitement éventuel si pas vide End If
' NbVide contient, comme son nom l'indique, ... =============================================== > HB.