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
Rechercher des sujets similaires à "creer autant checkbox que vides"