XL 2016 Utilisation de la fonction Me.Controls

dayyoni

XLDnaute Nouveau
Bonjour tout le monde, je suis débutant sur Excel.
j'ai créé un formulaire de création de compte utilisateur
je veux boucler sur mes CheckBox en cochant les cases de 1 à 17 en plaçant un "X" dynamiquement dans les cellules concernées de ma feuille "Administrateur" afin d'autoriser l’accès aux feuilles du classeur.
Cependant, j'ai une erreur avec la fonction Me.Controls("CheckBox" & i)

J'ai une autre solution qui consiste a alimenter directement les CheckBox en rajoutant à chaque fois une ligne par CheckBox !
If Me.CheckBox1 = True Then
mais x fois c'est .......................!!!!

Quelqu'un peut il m'éclairer car là, je suis bloqué !

Vous remerciant d'avance pour vos lumières.

Cordialement,

Voila mon code :

Private Sub CdtCreerUnCompte_Click()
'on définit les variables
Dim User As String 'utilisateur
Dim mdp As String 'mot de passe
Dim cnf As String 'confirmation
Dim Coché As Boolean 'case a coché
Dim Derl As Long 'remplissage de la dernière ligne
Dim Ws As Worksheet 'feuille matrice


Set Ws = Sheets("Administrateur") 'selection de la feuille Administrateur
Coché = False 'position de départ de la case (décoché)

'on vérifie que l'utilisateur à rempli tous les champs
If Me.TextBox1 = "" Or Me.TextBox2 = "" Or Me.TextBox3 = "" Then
MsgBox "Veuillez remplir tous les champs" 'message si champ manquant
Exit Sub 'on ferme la boite de dialogue
End If

User = Me.TextBox1 'on attribut les valeurs aux variables
mdp = Me.TextBox2
cnf = Me.TextBox3

For i = 1 To 17 'on crée une boucle de controle
'on vérifie si au moins une case est coché
If Me.Controls("CheckBox" & i) = True Then
Coché = True
End If
Next i 'on passe à létape suivante

If Coché = False Then 'si condition case coché est fausse, on a une alerte
MsgBox "Veuillez cochez au moins une feuille"
Exit Sub 'on ferme la boite de dialogue
End If 'on sort de la condition

'on définit la plage de cellules à remplir en fonction de la derniere ligne
Derl = Ws.Range("A" & Rows.Count).End(xlUp).Row + 1

For Each C In Ws.Range("A2:A" & Derl) 'on créer une boucle de vérification
If C = User Then 'pour les utilisateur que l'on rajoute
MsgBox "Ce nom d'utilisateur est déja utilisé, veuillez saisir un autre"
Exit Sub 'on ferme la boite de dialogue
End If 'on ferme la condition
Next

If mdp <> cnf Then 'pour le mot de passe créé
MsgBox "Les mots de passe ne sont pas identiques"
Me.TextBox2 = "" 'on vide les textbox
Me.TextBox3 = ""
Exit Sub 'on sort du programme
End If

If MsgBox("Voulez vous créer ce compte?", vbYesNo, "Création du compte") = vbYes Then
With Ws
.Range("A" & Derl).Value = User
.Range("B" & Derl).Value = mdp

For i = 1 To 17
If Me.Controls("CheckBox" & i) = True Then
.Cells(Derl, i + 2).Value = "X"
End If
Next i
End With
MsgBox "Ce compte a été créer avec succés"

'on libère l'espace mémoire


End If
Set Ws = Nothing
End Sub
 
Solution
bon a la bonne heure puisque ca se radouci on peut avancer
alors pour ton userform de creation de compte
tu va commencer par remplacer ceci
VB:
Private Sub UserForm_Activate() 'on définit les variables
Dim Ws As Worksheet
Dim Lr As Long

Set Ws = Sheets("Administrateur") 'on selectionne la feuille WS

Lr = Ws.Range("A" & Rows.Count).End(xlUp).Row 'on associe la variable Lr(last row) à la feuille Ws

If Lr > 1 Then  'on ouvre la condition pour alimenter la combobox
   For Each C In Ws.Range("A2:A" & Lr) 'on alimente la combobox
      Me.ComboBox1.AddItem C
   Next
End If

Set Ws = Nothing 'on detruit la fonction,permet de liberer l'espace mémoire

End Sub
par cela
VB:
Private Sub UserForm_Activate()    'on définit les variables...

dayyoni

XLDnaute Nouveau
@dayyoni, le fil,

dans le fichier de mon post #7 as-tu remarqué que j'ai renommé toutes
tes CheckBox 2 à 18 en CheckBox 1 à 17 ? et j'ai mis plusieurs boucles
avec 1 à 17 en plus de celles que tu avais déjà mises.

tu avais utilisé une variable de nom Workbook mais il ne faut pas le faire
car c'est un mot-clé réservé du VBA ; j'ai remplacé Workbook par Wbk
et mis : Dim Wbk As Workbook

tu avais utilisé une variable de nom Shape mais il ne faut pas le faire
car c'est un mot-clé du VBA ; j'ai remplacé Shape par Sh et mis :
Dim Sh As Shape

j'espère que tu as fait toutes ces modifs dans ton vrai fichier. ;)
mais prends en priorité les infos que @patricktoulon est en
train de te donner en ce moment.

pour les nombreuses erreurs de compilation que j'ai corrigées,
c'était finalement inutile puisque ce n'était pas le bon fichier,
mais l'essentiel est que ton vrai fichier marche bien.


soan
merci pour ta bienveillance saon.!Ca marche!!
 

Discussions similaires

Réponses
2
Affichages
177
Réponses
4
Affichages
433

Statistiques des forums

Discussions
314 764
Messages
2 112 707
Membres
111 639
dernier inscrit
edb