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 :

"Nom de l'objet" peut être une variable de type String. La boucle devient donc :

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.

Mise à jour
Consultez également cet article pour d’autres méthodes permettant de parcourir les contrôles d’un formulaire ou d’un état.

Vous aimerez aussi...

6 réponses

  1. Hervé Inisan dit :

    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.

  2. guy dit :

    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

  3. Hervé Inisan dit :

    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 :

  4. Raphou96 dit :

    Salut,

    Il y a aussi la possibilité d’utiliser Controls

    Controls(« Texte » & intI)

  5. Hervé Inisan dit :

    Manu > Bien vu, c’est corrigé ! 🙂

  6. Manu dit :

    Salut, n’y aurait-l pas une erreur dans l’exemple ?
    je dirais qu’il faut remplacer « intI » par « i » ou l’inverse

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *