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 !