bouligrain
Messages postés5Date d'inscriptionmardi 28 avril 2009StatutMembreDernière intervention 9 juin 2009
-
8 juin 2009 à 16:11
bouligrain
Messages postés5Date d'inscriptionmardi 28 avril 2009StatutMembreDernière intervention 9 juin 2009
-
9 juin 2009 à 13:45
Bonjour à tous,
J'ai une question concernant un formulaire excel.
Comment faire pour qu'une action s'effectue à chaque fois qu'un contrôle est changé?
Je m'explique, j'ai le code suivant (grâce à l'un d'entre vous):
Dim maFrame As Object
Dim LastPos As Long
LastPos = 10
For Each maFrame In Controls
If maFrame.Name Like "Frame*" Then
If maFrame.Visible = True Then
maFrame.Top = LastPos + 10
' Décale la prochaine
LastPos = maFrame.Top + maFrame.Height + 5
End If
End If
Next
UserForm1.Height = LastPos + 30
Il permet de positionner les textboxs les uns à la suite des autres selon qu'ils sont visibles ou non.
Il fonctionne très bien pour l'action Userform_Initialize, mais j'aimerais l'appliquer dès que l'utilisateur fait de nouveaux choix, donc à chaque fois qu'un contrôle est changé (et qu'un frame apparait ou disparait).
J'ai tenté avec UserForm_Activate, et en rajoutant une boucle, mais ça ne marche pas non plus. Je suis un peu perdue.
Est-ce que quelqu'un aurait une idée?
Merci beaucoup d'avance!
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 9 juin 2009 à 09:23
Bonjour,
Pour faire cela il faut placer le code dans les procédures événementielles de chaque contrôles de ton formulaire (click, change, etc..). Pour faire plus propre, tu peux crée une routine (sub) ou tu vas placer ton code comme ceci :
Private Sub RefreshControls()
Dim maFrame As Object
Dim LastPos As Long
LastPos = 10
For Each maFrame In Controls
If maFrame.Name Like "Frame*" Then
If maFrame.Visible = True Then
maFrame.Top = LastPos + 10
' Décale la prochaine
LastPos = maFrame.Top + maFrame.Height + 5
End If
End If
Next
UserForm1.Height = LastPos + 30
End Sub
Puis tu appel cette routine dans les évenement de tes contrôles :
Private Sub UserForm_Resize()
Call RefreshControls
End Sub
Voila.
Remarque: Ton code ne déplace pas tes Textbox mais seulement les frames qui les contiennent.
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <