Boucle for

Bonjour le forum !

Dans le cadre d'un projet, je réalise un outil de gestion de la fertilisation du sol.

N'étant pas forcément très à l'aise avec VBA mes codes ne sont pas toujours très "propres" et en particulier ce dernier :

Private Sub UserForm_Initialize()

CheckBox1.Value = False

CheckBox1.Value = False

CheckBox1.Value = False

QtéApp1.Visible = False

QtéApp2.Visible = False

QtéApp3.Visible = False

TextBox1.Visible = False

TextBox2.Visible = False

TextBox3.Visible = False

TextBox1.Value = 0

TextBox2.Value = 0

TextBox3.Value = 0

End Sub

Je voulais savoir s'il était possible de simplifier tout cela avec une boucle for?

Merci par avance pour votre aide !

bonsoir

as tu tenté qqchose comme ça

Private Sub UserForm_Initialize()

for i= 1 to 3

CheckBox&i.Value = False

QtéApp&i.Visible = False

TextBox&i.Visible = False

TextBox&i.Value = 0

next i

End Sub

A tester, je n'ai pas excel sous la main actuellement

Je viens de tester et ça ne fonctionne pas. J'ai aussi essayé avec les guillemets et les parenthèses mais rien à faire

Bonsoir,

Non ! ce n'est pas tout à fait comme ça...

Controls("TextBox" & i).Value = ...

Plutôt ainsi... Mais !!!

As-tu vraiment mesuré ce que tu es en train de faire dans une procédure Initialize ?

Lorsque tu mets en place ton Userform avec ses contrôles, tu disposes d'une fenêtre de propriétés, dans laquelle tu peux faire le tour des propriétés de chaque contrôle pour voir celles qui leur sont définies par défaut. Si tu veux que telle ou telle propriété ait une autre valeur pour chacun des contrôles à l'ouverture du Userform, tu la modifies dans cette fenêtre.

Ce que tu auras définis ainsi ce seront les propriétés par défaut toujours présentes à chaque ouverture du Userform !

Ce que je dis donc c'est que la meilleure chose à faire est de définir les propriétés par défaut là où elles se définissent (dans la fenêtre de propriété), et de supprimer purement et simplement cette procédure superflue.

Si tu as des contrôles dont l'apparence ou la valeur ou ... doit varier à l'ouverture selon le contexte dans lequel tu l'ouvres, là oui, la procédure Initialize prend tout son sens : tu testes et tu modifies selon résultat du test, ou bien tu affectes des valeurs qui vont changer à chaque fois et que tu prélèves dans ton fichier...

Sache aussi (cela peut servir) que outre la définition de propriétés par défaut à la conception, la procédure Initialize (qui s'exécute dès chargement du Userform, avant son ouverture), tu peux également manipuler les propriétés des contrôles à partir de la procédure appelante avant l'ouverture du Userform (cette manipulation s'exécute le cas échéant après l'Initialize éventuelle).

Enfin, si dans ton Userform tu as mis en place des procédures réagissant au changement de valeur du contrôle, soit pour vérifier la validité de la valeur, soit pour réagir sur d'autres contrôles selon la valeur affectée, l'affectation initiale provoquera l'exécution des ces procédures, que tu peux donc en tenir compte pour éviter des répétitions d'actions et produire avec le minimum de moyen et de volume de code le maximum d'effet...

Cordialement.

Oh merci mille fois pour cette technique qui marche à merveille ! En effet, cela va alléger le nombre de lignes de codes.

Très bonne journée à vous !

Rechercher des sujets similaires à "boucle"