Actualisation d'un Userform

Calvus

XLDnaute Barbatruc
Bonsoir le forum,

Existe t'il l'équivalent de Change pour un Userform ?
C'est à dire une façon d'actualiser.

Par exemple, j'ai ce code :
VB:
Private Sub UserForm_Initialize()
If OptionButton1 = False Then
Frame3.BackColor = RGB(255, 0, 0)
End If

Ça fonctionne bien à l'ouverture du Userform, mais ce n'est ensuite plus actif. Comment faire pour que cette commande soit réactivée pendant l'affichage du Userform sans avoir à le ré-ouvrir ?

Merci
 

Lone-wolf

XLDnaute Barbatruc
Hello Calvus :)

Un Essai comme ceci

VB:
Private Sub Frame1_Click()
OptionButton1 = False
Frame1.BackColor = RGB(255, 255, 255)
End Sub

Private Sub OptionButton1_Click()
If OptionButton1 Then Frame1.BackColor = RGB(255, 0, 0)
End Sub

Private Sub UserForm_Activate()
OptionButton1 = False
Frame1.BackColor = RGB(255, 255, 255)
End Sub
 
Dernière édition:

Hellboy

XLDnaute Accro
Une autre proposition:

Private Sub Frame1_Click()
Call ChangeColor
End Sub

Private Sub OptionButton1_Click()
Call ChangeColor
End Sub

Private Sub UserForm_Activate()
Call ChangeColor
End Sub

Private Sub ChangeColor()
Select Case OptionButton1.Value
Case True: Frame1.BackColor = RGB(255, 0, 0)
Case False: Frame1.BackColor = RGB(255, 255, 255)
End Select
End Sub
 

Calvus

XLDnaute Barbatruc
Bonsoir Lone-wolf :), Hellboy,

Je vous remercie de vos réponses.
Les procédures que vous m'indiquez, je les avais déjà testées. Je souhaitais que le changement se fasse automatiquement, sans avoir à cliquer sur le contrôle.
Ça ne me convient donc pas.

J'ai trouvé la solution en biaisant, à savoir que je recharge le Userform à la suite d'un clic sur un autre OptionButton. Comme ceci :
VB:
Private Sub OptionButton2_Click()
UserForm_Initialize
End Sub

A bientôt
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Une autre proposition (si j'ai bien compris le problème) :
VB:
Private Sub OptionButton1_Change()
If OptionButton1 Then
    Frame3.BackColor = RGB(200, 200, 200)
Else
    Frame3.BackColor = RGB(255, 0, 0)
End Sub


[edit]Je vois que j'arrive trop tard et en plus ma proposition ne convient peut-être bien pas. Désolé. :([/edit]
 

TooFatBoy

XLDnaute Barbatruc
En plus je n'avais probablement pas bien compris le problème : je croyais qu'il fallait changer la couleur de fond du cadre Frame3 en fonction de l'état du bouton-radio OptionButton1, à chaque fois que celui-ci changeait d'état...
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Bonjour Lonewolf :), le Forum,

Oui, tu as raison, je me suis mal exprimé.
Ce que je voulais dire, c'est ne pas avoir à cliquer sur le frame à chaque fois.
Mais j'ai m'impression que ce n'est pas tout à fait faisable car je me suis heurté à un autre problème.
Il me semble que je devrais plutôt passer par les Checkbox pôur ce que je veux réaliser.
Je reviendrai pour cette seconde partie donc, si je n'arrive pas à avancer.
Merci.
A+ et bonne journée.
 

Calvus

XLDnaute Barbatruc
Re-bonjour,

Je reste sur cette discussion car il s'agit du même projet.
Lone-wolf (ou quelqu'un d'autre évidemment :)),

Comment raccourcir ce code ?
VB:
Private Sub OptionButton1_Click()
If OptionButton1 = True Then Label10.BackColor = 16744576: OptionButton1.Font.Bold = True: OptionButton1.BackColor = 16761024
End Sub

Private Sub OptionButton2_Click()
If OptionButton2 = True Then Label10.BackColor = 16744576: OptionButton2.Font.Bold = True: OptionButton2.BackColor = 16761024
End Sub

Private Sub OptionButton9_Click()
If OptionButton9 = True Then Label11.BackColor = 16744576: OptionButton9.Font.Bold = True: OptionButton9.BackColor = 16761024
End Sub

Private Sub OptionButton10_Click()
If OptionButton10 = True Then Label12.BackColor = 16744576: OptionButton10.Font.Bold = True: OptionButton10.BackColor = 16761024
End Sub

Il y a encore une bonne quinzaine de boutons.
Les Labels et les Frames ne sont pas les mêmes.

Pour les gérer par Frame, j'ai utilisé ce code, qui me contrarie tout de même dans le sens où je suis obligé de cliquer dans le Frame pour actualiser, d'où ma question du début.
VB:
Private Sub Frame4_Click()
Dim Ctrl As Variant
For Each Ctrl In Array(OptionButton8, OptionButton9)
If Ctrl.Value = True Then
Ctrl.BackColor = 16761024 'RGB(255, 0, 140)
Else: Ctrl.BackColor = 16744576: Ctrl.Font.Bold = False
End If
Next
End Sub

Et j'ai fait ça pour chaque Frame.
Il y en a 7...
Là aussi, on devrait pouvoir raccourcir non ?

Je ne pense pas qu'un fichier soit nécessaire, mais j'en ferai un si vous en ressentez le besoin.

Merci
 

TooFatBoy

XLDnaute Barbatruc
Il y a encore une bonne quinzaine de boutons.
Les Labels et les Frames ne sont pas les mêmes.

Pour les gérer par Frame, j'ai utilisé ce code, qui me contrarie tout de même dans le sens où je suis obligé de cliquer dans le Frame pour actualiser, d'où ma question du début.
VB:
Private Sub Frame4_Click()
Dim Ctrl As Variant
For Each Ctrl In Array(OptionButton8, OptionButton9)
If Ctrl.Value = True Then
Ctrl.BackColor = 16761024 'RGB(255, 0, 140)
Else: Ctrl.BackColor = 16744576: Ctrl.Font.Bold = False
End If
Next
End Sub

Et j'ai fait ça pour chaque Frame.
Il y en a 7...
Là aussi, on devrait pouvoir raccourcir non ?
A mon avis, ce que tu as mis dans ta procédure Framex_Click() devrait être, au mieux, dans la procédure d'initialisation du UserForm.

En suite faire pour chaque bouton-radio comme je l'ai indiqué précédemment.
Certes, c'est relativement long à écrire, mais au niveau exécution ça devrait être plus rapide car les différentes procédures de mise en forme s'exécuteront uniquement pour les boutons-radio changeant d'état.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Et pour compléter, je pense qu'il serait également mieux de définir, pour chaque OptionButton de ton UserForm, directement lors de la création de ton UserForm :
- le BackColor à rouge (ou bleu-violet, ou la couleur que tu veux),
- le BackStyle à transparent (sauf pour ceux que tu veux actifs dès le chargement de ton UserForm),
- le Font.Bold à false (sauf pour ceux que tu veux actifs dès le chargement de ton UserForm).

En suite, comme je disais, pour chaque OptionButton tu crées la même procédure :
VB:
Private Sub OptionButton1_Change()
'
    With OptionButton1
        If .Value Then
            .BackStyle = 1
            .Font.Bold = True
        Else
            .BackStyle = 0
            .Font.Bold = False
        End If
    End With

End Sub
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Bonsoir Laetitia :), Marcel, le Forum,

Merci de vous intéresser à mon problème.
Voici un fichier avec ce que j'ai déjà fait.
Je pense que ça rejoint ce que préconise Marcel, seulement le code me semble long.
En tout cas tout fonctionne, mis à part qu'il faille cliquer à nouveau dans le Frame 3 par exemple pour réinitialiser, si on a cliqué sur plusieurs OptionButtons ( de 1 à 7)

Et puisqu'on y est, comment éviter les décimales à ralllonge dans la Listbox2 ?
J'ai essayé différentes choses, comme Round() par exemple, mais sans succès.

Merci et à bientôt.
 

Pièces jointes

  • Formulaire Factures 3 Forum.xlsm
    78.4 KB · Affichages: 48

Discussions similaires

Statistiques des forums

Discussions
312 199
Messages
2 086 160
Membres
103 148
dernier inscrit
lulu56