Créer autant de checkbox que de cellules non vides
Bonjour à tous,
Tant bien que mal j'essaye d'avancer dans mon projet d'application pour le suivit des travaux d'une équipe technique .
Pour l'instant j'ai renoncer à la compatibilité openoffice et linux. Je verrai à ça plus tard
Actuellement je suis bloqué avec un petit problème que je suis certain que vous arriverez à m'aider à résoudre :
Dans un userform j'ai créé 2 frames (frame1 et frame2) qui vont chacunes contenir des checkboxs. Cependant j'aimerai que chacunes d'elles contiennent autant de checkbox qu'il y a de "données" dans une feuille.
J'ai déjà réussis à "affecter" un caption à un checkbox en fonction du contenu d'une cellule
checkBox1.Caption = Range("a1").Value
Mais comment faire pour qu'il y ait autant de checkbox que de cellules (remplies) dans la colonne A et que chaque checkbox ait le caption du contenu de la cellule ?
Je ne sais pas à l'avance combien il va y en avoir, et au fur et a mesure de l'utilisation, les contenus des cellules vont changer.
Je pense qu'il faut utiliser un For Next, mais je ne sais pas comment m'y prendre exactement.
Merci d'avance pour votre aide et vos réponses pertinantes
salut,
je suppose que ça va vous aider.
Soit nb_cellule le nombre de cellules, alors la boucle suivante crée autant de checkbox que de cellule dans le formulaire userform1
sub creation_cellule()
'nb_cellule=range("a1") 'ceci est un exemple
for I = 1 to 10 ' 10 ici n'est qu'un exemple, vous pourrez le prendre comme indiquer plus haut
set cocher=userform1.controls.add("forms.checkbox.1",name="cocher"&I) ' partie la plus importante
userform1.controls("cocher"&I).top= 10*I 'pour modifier la position des différents checkbox
next I
excusez, j'ai oublié un ":" dans name vooici le code
sub creation_cellule()
'nb_cellule=range("a1") 'ceci est un exemple
for I = 1 to 10 ' 10 ici n'est qu'un exemple, vous pourrez le prendre comme indiquer plus haut
set cocher=userform1.controls.add("forms.checkbox.1",name:="cocher"&I) ' partie la plus importante
userform1.controls("cocher"&I).top= 10*I 'pour modifier la position des différents checkbox
next I
Merci beaucoup !
Voici le bout de code avec mon adaptation :
nb_agents = Application.WorksheetFunction.CountA(Feuil2.Range("$A:$A"))
For i = 1 To nb_agents
Set ajoutagent = Frame_agents.Controls.Add("forms.checkbox.1", Name:="ajoutagent" & i) ' partie la plus importante
Frame_agents.Controls("ajoutagent" & i).Top = 15 * i
Frame_agents.Controls("ajoutagent" & i).Caption = Feuil2.Range("a" & i)
Next i
If nb_agents > 8 Then
Frame_agents.Height = 135
Frame_agents.Width = 155
Frame_agents.ScrollBars = fmScrollBarsVertical
Frame_agents.ScrollHeight = (16 * nb_agents) + 20
Else
Frame_agents.Height = 135
Frame_agents.Width = 150
Frame_agents.ScrollBars = fmScrollBarsNone
End If
Cependant, j'aurai encore besoin d'un petit coup de main :
Dans une autre frame je créé selon la même méthode des optionbutton. J'y accole des textbox. et je masque ces derniers, que je ne veux afficher que si l'optionbutton est sélectionner.. Cependant, mon morceau de code ne fonctionne pas avec cette dernière condition.
Voici mon code (sensiblement identique au précedent)
nb_taches = Application.WorksheetFunction.CountA(Feuil4.Range("$A:$A"))
For i = 1 To nb_taches
Set ajouttache = Frame_taches.Controls.Add("forms.optionbutton.1", Name:="ajouttache" & i) ' partie la plus importante
Frame_taches.Controls("ajouttache" & i).Top = 15 + 15 * i
Frame_taches.Controls("ajouttache" & i).Caption = Feuil4.Range("a" & i)
Frame_taches.Controls("ajouttache" & i).ControlTipText = Feuil4.Range("b" & i)
ajoutqtetache = Frame_taches.Controls.Add("forms.textbox.1", Name:="ajoutqtetache" & i)
Frame_taches.Controls("ajoutqtetache" & i).Top = 15 + 15 * i
Frame_taches.Controls("ajoutqtetache" & i).Width = 30
Frame_taches.Controls("ajoutqtetache" & i).Left = 137
Frame_taches.Controls("ajoutqtetache" & i).Visible = False
Frame_taches.Controls("ajoutqtetache" & i).Value = 0
Next i
If nb_tache > 8 Then
Frame_taches.Height = 137
Frame_taches.Width = 175
Frame_taches.ScrollBars = fmScrollBarsVertical
Frame_agents.ScrollHeight = (16 * nb_taches) + 20
Else
Frame_taches.Height = 135
Frame_taches.Width = 170
Frame_taches.ScrollBars = fmScrollBarsNone
End If
End Sub
Private Sub Frame_taches_Click()
nb_taches = Application.WorksheetFunction.CountA(Feuil4.Range("$A:$A"))
For i = 1 To nb_taches
If Frame_taches.Controls("ajouttache" & i) = True Then
Frame_taches.Controls("ajoutqtetache" & i).Visible = True
Else
Frame_taches.Controls("ajoutqtetache" & i).Visible = False
End If
Next i
End Sub
En résumer : Comment créer une instruction qui se lancera dès qu'un clic interviendra sur optionbutton créé de la façon suivante :
Set ajouttache = Frame_taches.Controls.Add("forms.optionbutton.1", Name:="ajouttache" & i)
Merci d'avance pour votre aide
voici une solution:
premièrement, dans un module vous entrez le code suivant
public collection_case as collection ' collection qui contiendra vos cases à cocher
créez maintenant un bouton de commande disons commandbutton1 et entrez le code suivant:
Private Sub CommandButton1_Click()
Dim Obj As Control
Dim Cl As Classe1
Dim i As Integer
Set collection_case = New Collection
nb_taches = 10 'à remplacer avec le nombre de tâches que vous avez dans votre cas
For i = 1 To nb_taches 'boucle pour la création des CheckBox
Set ajouttache = UserForm1.Frame_taches.Controls.Add("forms.optionbutton.1", Name:="ajouttache" & i) ' partie la plus importante
UserForm1.Frame_taches.Controls("ajouttache" & i).Top = 15 + 15 * i
UserForm1.Frame_taches.Controls("ajouttache" & i).Caption = Feuil1.Range("a" & i)
UserForm1.Frame_taches.Controls("ajouttache" & i).ControlTipText = Feuil1.Range("b" & i)
ajoutqtetache = UserForm1.Frame_taches.Controls.Add("forms.textbox.1", Name:="ajoutqtetache" & i)
UserForm1.Frame_taches.Controls("ajoutqtetache" & i).Top = 15 + 15 * i
UserForm1.Frame_taches.Controls("ajoutqtetache" & i).Width = 30
UserForm1.Frame_taches.Controls("ajoutqtetache" & i).Left = 137
UserForm1.Frame_taches.Controls("ajoutqtetache" & i).Visible = False
UserForm1.Frame_taches.Controls("ajoutqtetache" & i).Value = 0
'on va ajouter la case à cocher dans une nouvelle classe comme suit
Set Cl = New Classe1
Set Cl.liste = ajouttache
collection_case.Add Cl
Next i
End Sub
et maintenant dans un module de classe, enter le code suivant
'à placer dans un module de classe dont le nom est classe1 à cause de la déclaration faite plus haut "Dim Cl As Classe1"
Public WithEvents liste As msforms.OptionButton
Private Sub liste_click()
a = collection_case.Count
For valeur = 1 To a
UserForm1.Frame_taches.Controls("ajoutqtetache" & valeur).Visible = collection_case(valeur).liste.Value
Next valeur
End Sub