CheckBox qui ne se coche pas
Bonjour,
J'ai un problème avec un checkbox dans un userform. Lorsqu'on clique dessus, il ne se coche pas.
Le code est le suivant:
Private Sub CheckBox1_Change()
If ListView1.SelectedItem.ListSubItems(1).Text = "" Then CheckBox1.Value = False
'Si je ne mets pas cette ligne, le checkbox est coché quelle que soit le ligne sélectionnée
End Sub
Private Sub CmdValider_Click()
'inscription des données récupérées du formulaire validé dans la feuille excel
'sélection de la ligne sur laquelle écrire (la première vide)
num = Sheets("Feuil1").Range("A65536").End(xlUp).Row + 1 'on part du bas de la colonne, on cherche
'la première cellule non vide avec end(xlup), on renvoie son N° avec row et on ajoute 1 pour avoir le numéro de la
'ligne d'en dessous
Sheets("Feuil1").Activate
Range("A" & num).Value = TextBox1.Value
Range("B" & num).Value = IIf(CheckBox1, "X", "")
End Sub
Private Sub ListView1_ItemClick(ByVal Item As MSComctlLib.ListItem)
Dim Ctrl As Control
'Vider les checkbox: sinon une fois que l'on clique sur une ligne où le checkbox est cochée, il reste coché quelle que soit la ligne sélectionnée par la suite
For Each Ctrl In UserForm1.Controls
If TypeName(Ctrl) = "CheckBox" Then Ctrl.Value = False
Next Ctrl
With ListView1
'affichage de la fiche correspondant à la ligne sélectionnée
Rng = .SelectedItem.Index
TextBox1 = .ListItems(.SelectedItem.Index).Text
CheckBox1 = .SelectedItem.ListSubItems(1).Text
End With
End Sub
Private Sub UserForm_Initialize()
''''''''''''''''''''''''''''''REMPLISSAGE LV''''''''''''''''''''''''''''''''''''''''
' -- Identification des variables
Dim Ws As Worksheet
Dim i As Integer
Dim rg As Range
Dim j As Integer
' -- Initialisation des variables
Set Ws = ThisWorkbook.Sheets("Feuil1") 'Nom de l'onglet contenant nos données
Set rg = Ws.Range("refTab") 'Notre cellule de référence de notre tableau
' -- Construction du tableau
With UserForm1.ListView1
' -- Ajout des colonnes
.ColumnHeaders.Clear ' Effacer les entêtes existantes
'on boucle sur les éléments tant qu'on ne trouve pas de lignes vides
i = 0
Do Until IsEmpty(rg.Offset(0, i))
'Ajouter une colonne en spécifiant :
' une clé d'identification (Key) (situé 1 ligne au-dessus de notre tableau)
' une description
' une largeur (basé sur la largeur de la colonne dans notre classeur)
'les titres sont sur la même ligne que notre référence (rg)
.ColumnHeaders.Add , rg.Offset(-1, i), rg.Offset(0, i), rg.Offset(0, i).Width
i = i + 1
Loop
' -- Ajouter les éléments de la 1re colonne
i = 1
Do Until IsEmpty(rg.Offset(i, 0))
'Ajouter un élément en spécifiant:
' une clé d'identification unique (on suppose que tous nos éléments de notre BD sont uniques)
' la valeur
'les éléments sont dans la même colonne que notre référence (rg)
' .ListItems.Add , rg.Offset(i, 0), rg.Offset(i, 0)
.ListItems.Add , rg.Offset(i, 2).Address, rg.Offset(i, 0) '' cette ligne est modifiée
' -- Ajouter les sous-éléments
' on utilise ici une boucle en supposant qu'il n'y a pas de lignes vides entre les éléments
j = 1
Do Until IsEmpty(rg.Offset(0, j))
'Ajouter un sous-élément en spécifiant la valeur seulement
.ListItems(i).ListSubItems.Add , , rg.Offset(i, j)
j = j + 1
Loop
i = i + 1
Loop
' -- Spécifier l'affichage du Listview en mode "Détails"
.View = lvwReport
.Sorted = True ' trier selon no d'adhérent
End With
End SubSi je laisse le code tel quel, le checkbox ne peut plus être coché, et si j'enlève les ligne concernant le checkbox, celle-ci reste cochée quelle que soit la ligne de la listview sélectionnée.
Je joins un fichier résumant le problème.
Si quelqu'un pouvait me dire ce qu'il manque. Merci à tous ceux qui se pencheront sur la question.
Bonjour
Je ne comprends pas trop la finalité de ton programme
Mais pour que ton CheckBox accepte d'être coché il faut avoir sélectionner dans la ListView une ligne qui a une valeur en colonne 2
Et dans ta macro ListView1_ItemClick
Je modifierais cette ligne
CheckBox1 = .SelectedItem.ListSubItems(1).Text <> ""Encore merci à toi Banzai64. Ca marche impeccable.
Pour ce qui est de la finalité du programme, je n'ai envoyé qu'un échantillon limité au problème rencontré. J'ai en fait une base de données avec plusieurs colonnes dont des colonnes remplies par des checkbox (par exemple pour voir si un adhérent est actif ou non). Le fait de cliquer sur une ligne permet de visualiser sur une fiche les données de la ligne.
En tout cas merci encore pour ton aide précieuse.
Cordialement.