Boucler sur les contrôles
Dans un formulaire, j’ai des zones de texte nommées
Texte1
,Texte2
,Texte3
jusqu’àTexte20
. Comment les parcourir par une boucle VBA ?
Solution
L’une des méthodes possibles pour référencer un objet de formulaire est la syntaxe :
1 |
Forms |
"Nom de l'objet"
peut être une variable de type String. La boucle devient donc :
1 2 3 4 |
Dim intI As Integer For intI = 1 to 20 MsgBox Forms Next |
Dans l’exemple ci-dessus, on affiche simplement la valeur de champ zone nommée Texte1
, Texte2
, etc.
Vous pouvez bien sûr effectuer tout type de traitement sur ces champs.
La technique s’applique aussi aux états, remplacez seulement Forms
par Reports
.
guy > Ton formulaire n’a sans doute pas que des objets TextBox, et certains de ces objets n’ont pas la propriété
Value
. D’où le message.Il faut juste améliorer la boucle en tenant compte du type d’objets. Cet autre article du Grenier devrait aider.
Bonjour!
Cette boucle ne marche qu’avec msgbox?
J’ai un formulaire avec 7 contrôles zones texte et tous les contrôles doivent être remplis. Je dois faire un test pour eviter de contrôles vides. J’ai voulu adapter le code
…
For Each ctl in Me.Controls
If ctl.value = » » then
msgbox (« Tous les champs doivent être remplis »)
End if
Next ctl
…
Je reçois un message d’erreur 438 « propriété ou méthode non géré par cet objet » sur le If.
Quelle serait la solution?
Merci
Raphou96 > Oui, c’est en fait la même chose :
est un raccourci pour :
et, si on est sur le formulaire concerné, on n’a pas besoin de préciser son nom :
Salut,
Il y a aussi la possibilité d’utiliser Controls
Controls(« Texte » & intI)
Manu > Bien vu, c’est corrigé ! 🙂
Salut, n’y aurait-l pas une erreur dans l’exemple ?
je dirais qu’il faut remplacer « intI » par « i » ou l’inverse