Créer une boucle de mise à jour des CheckBox et Combobox
Bonjour,
Je suis toute nouvelle à la programmation VBA et je suis actuellement en train de créer un formulaire à usage externe.
J'ai créer le code suivant pour que le formulaire actualise les informations lorsque l'utilisateur choisi un nom d'un site (une ligne) :
Private Sub ComboBox1_Change()
Dim Ligne As Long
Dim J As Integer
Dim I As Integer
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
Ligne = Me.ComboBox1.ListIndex + 4
'For I = 10 To 14
'Me.Controls("TextBox" & I) = Worksheets("BDD").Cells(Ligne, I + 3)
'Next I
'Mise à jour des checkboxs et optionbuttons
'#1
If Worksheets("BDD").Cells(Ligne, "I") = "Oui" Then
CheckBox1.Value = True
OptionButton1.Value = True
End If
If Worksheets("BDD").Cells(Ligne, "I") = "Non" Then
CheckBox1.Value = True
OptionButton2.Value = True
End If
'#2
If Worksheets("BDD").Cells(Ligne, "L") = "Oui" Then
CheckBox2.Value = True
OptionButton3.Value = True
End If
If Worksheets("BDD").Cells(Ligne, "L") = "Non" Then
CheckBox2.Value = True
OptionButton4.Value = True
End If
'#3
If Worksheets("BDD").Cells(Ligne, "O") = "Oui" Then
CheckBox3.Value = True
OptionButton5.Value = True
End If
If Worksheets("BDD").Cells(Ligne, "O") = "Non" Then
CheckBox3.Value = True
OptionButton6.Value = True
End If
'#4
If Worksheets("BDD").Cells(Ligne, "R") = "Oui" Then
CheckBox4.Value = True
OptionButton7.Value = True
End If
If Worksheets("BDD").Cells(Ligne, "R") = "Non" Then
CheckBox4.Value = True
OptionButton8.Value = True
End If
End SubLe petit hic c'est que j'ai en tout 33 Checkbox et 66 OptionButton, ça me fait donc un pavé..
Je suis certaine que je peux créer une boucle à partir de ça cependant je ne sais absolument pas par où commencer..
Je suis preneuse si quelqu'un à une piste
(Ci-joint mon fichier, pour information c'est l'userform 2)
Bonsoir,
Je me suis fait un peu violence pour répondre à ce sujet un peu bâclé à mon gout !
Bon y avait pas grand chose à "valoriser" hein ?
Les Combos et OptionBoutons qui se réfèrent à la même colonne je n'ai pas compris...
Bon de toute façon dans cette situation les OptionButton me semblent pas fréquentables...
Je préconise l'utilisation de Bouton-bascule ou de simples Label cliquables en remplacement.
Néanmoins j'ai essayé de te faire quelque chose de cohérent.
Il y avait un gros problème de numérotation des contrôles : A mon sens les contrôles sur une même ligne doivent porter le même numéro sinon c'est pas gérable....J'ai donc pratiquement tout du renommer...
Enfin... Tu regarderas ce que tu peux en faire ! Je n'ai pas finalisé le bouton d'enregistrement car ce problème de contrôles qui se réfèrent à la même colonne me bloque : Ou c'est la même colonne et il n'y a pas besoin de plusieurs contrôles ou s'il y a plusieurs contrôles il faudra expliquer à quoi se réfère chacun...
Bonne soirée...
Bonsoir,
Merci de vous être fait violence ahah, c'est vrai que j'ai créé ce formulaire avec mes connaissances très limités en VBA alors ça ne doit pas être beau à voir.
Juste pour préciser un petit peu, l'objectif de cet userform est de permettre à des communes d'identifier quels déchets elles ont sur leurs sites (si elles ont = coche checkbox) et s'ils sont valorisés à l'heure actuel ou non (intérêt de la combobox). C'est une grille de diagnostic à usage externe.
Je vous remercie pour ce code, je vais essayer de m'en inspirer (je vais déjà progresser en essayent de le comprendre haha)
Bonne soirée,
- Messages
- 2'417
- Excel
- 2019
- Inscrit
- 13/07/2017
- Emploi
- Formateur, animateur,tech.informatique
Bonjour,
j'ai réussi à faire pour 2 boutons option dans le bouton command1 de l'usf mais c'est galère de chez galère
'Réglage OptionButton
' Frame1.Controls
For Each OptionButton In Frame1.Controls
If OptionButton1.Value = True Then
Worksheets("BDD").Cells(Ligne, "I") = "Oui"
ElseIf OptionButton2.Value = False Then
Worksheets("BDD").Cells(Ligne, "I") = "Non"
Else
Worksheets("BDD").Cells(Ligne, "I") = ""
OptionButton1.Value = False
OptionButton2.Value = False
End If
Next
' Frame2.Controls
' etc ' etc.' etc ' etc.' etc ' etc.' etc ' etc.' etc ' etc.' etc ' etc.
EDIT: bonjour Galopin
crdlt,
André
[André] : Salut ! Oui, ça me parait un bricolage peu fonctionnel.
[agroumathou] :
Oui mais... Si le CheckBox est coché les OptionButton sont cochés aussi : On peut admettre qu'on peut les décocher si les déchets ne sont pas valorisés, (c'est ce que je fais avec mes Labels cliquables) mais comme c'est la même colonne que les CheckBox on ne peut pas enregistrer sinon ça revient à dire qu'on décoche aussi le CheckBox.
Bref, il y a beaucoup de chose à revoir (probablement 33 colonnes de plus : une pour chaque Label cliquable)
De plus il va falloir utiliser les modules de classe qui ne sont guère du niveau débutant... Sinon, pour la boucle de mise à jour, ça va être Walou !
On pourrait plus ou moins envisager une solution du type boucle au moment du UsfShow, mais après vous ne pourriez pas gérer tous les évènements liés à la modification de chaque contrôle et la ce passerait inévitablement par 132 évènements Click (ou Change) pour gérer les modifs de l'utilisateur.
Et je passe sous silence sans doute bon nombre d'inconvénients liés aus OptionButton et aux Frame...
Nota :
J'ai supprimé les 2 première lignes de la BDD (Quand des lignes sont inutiles YAPA de raison de les conserver...
Par contre YAPA d'index dans ta BD : ça c'est un mauvais point (YAPA de bonne BD sans un bon index en première colonne) mais je l'ai pas rajouté. J'ai bien senti que tu n'étais pas très sensible au charme de ce type de construction...
Je n'ai pas été très généreux en commentaires. Dans l'ensemble c'est du code de base. (Sauf pour le module de classe ou c'est plutôt un problème de compréhension du concept que de traduction)
Mais je ne suis pas avare d'explications..YAKA demander...
A+