Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

CheckBox et module de classe.

7 réponses
Avatar
Gregory Hilaire
Bien le bonjour,

Je voulais avoir des Checkbox qui se créaient à l'execution (Run-Time) et
les associer à un tableau afin de les utiliser dans une boucle
Grace à JB cela fonctionne et très bien même ( Encore merci ). Maintenant je
me heurte à un nouvel écueil comment recupérer les
valeurs de ces checkboxs, et comment inter agir avec les méthodes de ces
CheckBox....

Illustrons pour plus de clareté.
Mon module de classe [ qui ne fonctionne pas comme il faut :( ]

Public WithEvents GrSaisie As MSForms.CheckBox

Private Sub GrSaisie_Change()
'Columns("A").EntireColumn.Hidden = Not CheckBox1.Value
MsgBox GrSaisie.Name
End Sub
'============================================================================================
' Mon module normal qui droit créer des CheckBox à l'execution, et quand on
clique sur un Checkbox il doit chacher la colonne qu'il
' représente (non coché) ou afficher la colonne (coché). Pour le moment à
l'initialisation il me dit les colonnes caché mais le hic c'est quand
' je veux cliquer pour cacher ou afficher :)
'============================================================================================
Dim n As Integer
'Déclarons 63 Case à cocher du type que nous avions défini dans le module de
Classe
Dim Chk(1 To 63) As New ClasseMesCasesACocher
Private Sub UserForm_Initialize()
Dim Retour 'Valeur retournée par l'ajout de Controls sur la
Dim NbrCol As Byte 'Nombre de Colonnes désirées
Dim NbrLig As Byte 'Nombre de Lignes désirées
Dim QteMax As Byte 'Quantité de valeurs désirées
Dim IndCnt As Byte 'Indice de chaque Control
Dim TabTit As Variant ' Liste des titres à cacher ou afficher (variant
obligatoire)

QteMax = 63
NbrCol = 4
NbrLig = QteMax \ NbrCol
TabTit = Array( _
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J" _
, "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T" _
, "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD" _
, "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO" _
, "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY" _
, "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI" _
, "BJ", "BK", "BL" _
)

'Initialisation des paramètres pour 63 cases à cocher
For IndCnt = 1 To QteMax
Retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & IndCnt, True)
Me("CheckBox" & IndCnt).Top = 20 + ((IndCnt - 1) \ NbrCol) * 20 'Lignes
distants de 20 Pts
Me("CheckBox" & IndCnt).Left = 20 + ((IndCnt - 1) Mod NbrCol) * 60
'Colonne distant de 60 points
Me("CheckBox" & IndCnt).Caption = TabTit(IndCnt - 1)
Next
' Création de n instances (n Objets Chk de type ClasseMesCasesACocher)
For IndCnt = 1 To QteMax
Set Chk(IndCnt).GrSaisie = Me("Checkbox" & IndCnt)
Next IndCnt

Dim X As Byte 'variable pour les colonnes
X = 1
'Nous assumons ici que dans le cadre (Frame) nous n'avons que des case à
cocher
For Each ctrl In Me.Controls
ctrl.Value = Not Columns(X).EntireColumn.Hidden
X = X + 1
Next
End Sub

=========================================================================================
Avant je mettait le code suivant à l'évènement de chaque case à cocher (at
design time) maintenant qu'elle sont crées dynamiquement
je suis un peu perdu.
=========================================================================================

Private Sub ChkCol1_Click()
Columns("A").EntireColumn.Hidden = Not ChkCol1.Value
End Sub

Private Sub ChkCol2_Click()
Columns("B").EntireColumn.Hidden = Not ChkCol2.Value
End Sub

Un gros Merci pour tout aide

7 réponses

Avatar
MichDenis
Explication donnée mais sans aucun test ...!

Quand tu baptises tes contrôles "checkbox" de ton tableau
je te suggère fortement d'utiliser le symbole "underscore _"
entre "Checkbox et son numéro index pour obtenir ceci : Checkbox_1
ceci facilitera le traitement ultérieur. La nouvelle ligne de code
se lira comme suit :

| Set Chk(IndCnt).GrSaisie = Me("Checkbox_" & IndCnt)
Cette ligne de code crée un tableau d'objet de CheckBox
Chaque objet de ce tableau est indépendant et il représente
L'instance du checkbox que ta procédure à créer

*********************************************
Dans la procédure d'initialisation de ton formulaire
*********************************************

IL s'agit simplement de modifier cette section de ta procédure
'----------------------------------
For Each ctrl In Me.Controls
ctrl.Value = Not Columns(X).EntireColumn.Hidden
X = X + 1
Next
'----------------------------------

Par :n'oublie pas que tu dois boucler sur ton tableau "Chk"
qui représente les objets chechbox

'-----------------------------------
'pour chaque élément du tableau d'objets -> attribution
'de son état en fonction
X = 0
For Element in Chk
X = X + 1
Element.Value = Not Columns(X).EntireColumn.Hidden
Next
'-----------------------------------


************************************************
MODIFICATION DU MODULE DE CLASSE
************************************************
Cette procédure de ton module de classe pourrait être modifé
'------------------------------------
Private Sub GrSaisie_Change()
'Columns("A").EntireColumn.Hidden = Not CheckBox1.Value
MsgBox GrSaisie.Name
End Sub
'------------------------------------
de cette manière :

'------------------------------------
Private Sub GrSaisie_Change()
Dim X As String ' Recevoir le nom du checkbox cliqué
Dim C As Integer ' représente le numéro du checkbox
'qui est en même temps le numéro de la colonne associée
X = GrSaisie.Name
C = Split(X, "_")(UBound(Split(X, "_")))
Columns(C).EntireColumn.Hidden = GrSaisie.Value
End Sub









"Gregory Hilaire" a écrit dans le message de news:
Oz%
Bien le bonjour,

Je voulais avoir des Checkbox qui se créaient à l'execution (Run-Time) et
les associer à un tableau afin de les utiliser dans une boucle
Grace à JB cela fonctionne et très bien même ( Encore merci ). Maintenant je
me heurte à un nouvel écueil comment recupérer les
valeurs de ces checkboxs, et comment inter agir avec les méthodes de ces
CheckBox....

Illustrons pour plus de clareté.
Mon module de classe [ qui ne fonctionne pas comme il faut :( ]

Public WithEvents GrSaisie As MSForms.CheckBox

Private Sub GrSaisie_Change()
'Columns("A").EntireColumn.Hidden = Not CheckBox1.Value
MsgBox GrSaisie.Name
End Sub
'=========================================================================================== ' Mon module normal qui droit créer des CheckBox à l'execution, et quand on
clique sur un Checkbox il doit chacher la colonne qu'il
' représente (non coché) ou afficher la colonne (coché). Pour le moment à
l'initialisation il me dit les colonnes caché mais le hic c'est quand
' je veux cliquer pour cacher ou afficher :)
'=========================================================================================== Dim n As Integer
'Déclarons 63 Case à cocher du type que nous avions défini dans le module de
Classe
Dim Chk(1 To 63) As New ClasseMesCasesACocher
Private Sub UserForm_Initialize()
Dim Retour 'Valeur retournée par l'ajout de Controls sur la
Dim NbrCol As Byte 'Nombre de Colonnes désirées
Dim NbrLig As Byte 'Nombre de Lignes désirées
Dim QteMax As Byte 'Quantité de valeurs désirées
Dim IndCnt As Byte 'Indice de chaque Control
Dim TabTit As Variant ' Liste des titres à cacher ou afficher (variant
obligatoire)

QteMax = 63
NbrCol = 4
NbrLig = QteMax NbrCol
TabTit = Array( _
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J" _
, "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T" _
, "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD" _
, "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO" _
, "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY" _
, "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI" _
, "BJ", "BK", "BL" _
)

'Initialisation des paramètres pour 63 cases à cocher
For IndCnt = 1 To QteMax
Retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & IndCnt, True)
Me("CheckBox" & IndCnt).Top = 20 + ((IndCnt - 1) NbrCol) * 20 'Lignes
distants de 20 Pts
Me("CheckBox" & IndCnt).Left = 20 + ((IndCnt - 1) Mod NbrCol) * 60
'Colonne distant de 60 points
Me("CheckBox" & IndCnt).Caption = TabTit(IndCnt - 1)
Next
' Création de n instances (n Objets Chk de type ClasseMesCasesACocher)
For IndCnt = 1 To QteMax
Set Chk(IndCnt).GrSaisie = Me("Checkbox" & IndCnt)
Next IndCnt

Dim X As Byte 'variable pour les colonnes
X = 1
'Nous assumons ici que dans le cadre (Frame) nous n'avons que des case à
cocher
For Each ctrl In Me.Controls
ctrl.Value = Not Columns(X).EntireColumn.Hidden
X = X + 1
Next
End Sub

======================================================================================== Avant je mettait le code suivant à l'évènement de chaque case à cocher (at
design time) maintenant qu'elle sont crées dynamiquement
je suis un peu perdu.
========================================================================================
Private Sub ChkCol1_Click()
Columns("A").EntireColumn.Hidden = Not ChkCol1.Value
End Sub

Private Sub ChkCol2_Click()
Columns("B").EntireColumn.Hidden = Not ChkCol2.Value
End Sub

Un gros Merci pour tout aide
Avatar
JB
Bonjour,

Masque/Affiche colonnes:

http://cjoint.com/?cshZq32jbx

Dim n
Dim Chk(1 To 100) As New ClasseSaisie
Private Sub UserForm_Initialize()
n = 30
For b = 1 To n
retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & b, True)
Me("CheckBox" & b).Top = 60
Me("CheckBox" & b).Left = 10 + (b - 1) * 15

retour = Me.Controls.Add("Forms.Label.1", "Label" & b, True)
Me("Label" & b).Caption = Split(Cells(1, b).Address, "$")(1)
Me("Label" & b).Top = 40
Me("Label" & b).Left = 10 + (b - 1) * 15
Next
'--
For b = 1 To n: Set Chk(b).GrSaisie = Me("Checkbox" & b): Next b
End Sub

Public WithEvents GrSaisie As MSForms.CheckBox
Private Sub GrSaisie_Change()
nomcheck = GrSaisie.Name
col = Val(Mid(GrSaisie.Name, 9))
Columns(col).Hidden = UserForm1.Controls(nomcheck).Value
End Sub

JB

On 17 fév, 23:41, "Gregory Hilaire" wrote:
Bien le bonjour,

Je voulais avoir des Checkbox qui se créaient à l'execution (Run-Time) et
les associer à un tableau afin de les utiliser dans une boucle
Grace à JB cela fonctionne et très bien même ( Encore merci ). Maint enant je
me heurte à un nouvel écueil comment recupérer les
valeurs de ces checkboxs, et comment inter agir avec les méthodes de ces
CheckBox....

Illustrons pour plus de clareté.
Mon module de classe [ qui ne fonctionne pas comme il faut :( ]

Public WithEvents GrSaisie As MSForms.CheckBox

Private Sub GrSaisie_Change()
  'Columns("A").EntireColumn.Hidden = Not CheckBox1.Value
  MsgBox GrSaisie.Name
End Sub
'======================== ========================= ========================= ­==================
' Mon module  normal qui droit créer des CheckBox à l'execution, et quand on
clique sur un Checkbox il doit chacher la colonne qu'il
' représente (non coché) ou afficher la colonne (coché). Pour le mom ent à
l'initialisation il me dit les colonnes caché mais le hic c'est quand
' je veux cliquer pour cacher ou afficher :)
'======================== ========================= ========================= ­==================
Dim n As Integer
'Déclarons 63 Case à cocher du type que nous avions défini dans le m odule de
Classe
Dim Chk(1 To 63) As New ClasseMesCasesACocher
Private Sub UserForm_Initialize()
Dim Retour  'Valeur retournée par l'ajout de Controls sur la
Dim NbrCol As Byte 'Nombre de Colonnes désirées
Dim NbrLig As Byte 'Nombre de Lignes désirées
Dim QteMax As Byte 'Quantité de valeurs désirées
Dim IndCnt As Byte 'Indice de chaque Control
Dim TabTit As Variant ' Liste des titres à cacher ou afficher (variant
obligatoire)

QteMax = 63
NbrCol = 4
NbrLig = QteMax NbrCol
TabTit = Array( _
               "A", "B", "C", "D", "E", "F", "G", "H", "I" , "J" _
             , "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T" _
             , "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC ", "AD" _
             , "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM ", "AN", "AO" _
             , "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW ", "AX", "AY" _
             , "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG ", "BH", "BI" _
             , "BJ", "BK", "BL" _
             )

  'Initialisation des paramètres pour 63 cases à cocher
  For IndCnt = 1 To QteMax
    Retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & IndCnt , True)
    Me("CheckBox" & IndCnt).Top = 20 + ((IndCnt - 1) NbrCol) * 20 'Lignes
distants de 20 Pts
    Me("CheckBox" & IndCnt).Left = 20 + ((IndCnt - 1) Mod NbrCol) * 60
'Colonne distant de 60 points
    Me("CheckBox" & IndCnt).Caption = TabTit(IndCnt - 1)
  Next
  ' Création de n instances (n Objets Chk de type ClasseMesCasesACoche r)
  For IndCnt = 1 To QteMax
   Set Chk(IndCnt).GrSaisie = Me("Checkbox" & IndCnt)
  Next IndCnt

  Dim X As Byte 'variable pour les colonnes
    X = 1
    'Nous assumons ici que dans le cadre (Frame) nous n'avons que des case à
cocher
    For Each ctrl In Me.Controls
    ctrl.Value = Not Columns(X).EntireColumn.Hidden
    X = X + 1
    Next
End Sub

======================== ========================= ========================= =­==============
Avant je mettait le code suivant à l'évènement de chaque case à co cher (at
design time) maintenant qu'elle sont crées dynamiquement
je suis un peu perdu.
======================== ========================= ========================= =­==============

Private Sub ChkCol1_Click()
Columns("A").EntireColumn.Hidden = Not ChkCol1.Value
End Sub

Private Sub ChkCol2_Click()
Columns("B").EntireColumn.Hidden = Not ChkCol2.Value
End Sub

Un gros Merci pour tout aide


Avatar
MichDenis
Voici le code du module formulaire revue à partir du classeur proposé par JP
'--------------------------------------------
Dim N
Dim Chk(1 To 30) As New ClasseSaisie
Private Sub UserForm_Initialize()
N = 30
For b = 1 To N
retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox_" & b, True)
Me("CheckBox_" & b).Top = 60
Me("CheckBox_" & b).Left = 10 + (b - 1) * 15

retour = Me.Controls.Add("Forms.Label.1", "Label" & b, True)
Me("Label" & b).Caption = Split(Cells(1, b).Address, "$")(1)
Me("Label" & b).Top = 40
Me("Label" & b).Left = 10 + (b - 1) * 15
Next
'--
For b = 1 To N: Set Chk(b).GrSaisie = Me("Checkbox_" & b): Next b
N = 0
'Attribue à chaque checkbox, la valeur de l'état de la
'colonne(hidden ou non) dès l'initialisation du formulaire
'Important si tu as des colonnes de masquer au lancement du formulaire
For Each element In Chk
N = N + 1
element.GrSaisie.Value = Columns(N).EntireColumn.Hidden
Next

End Sub
Private Sub b_result_Click()
For Each element In Chk
If element.GrSaisie.Value Then
X = element.GrSaisie.Name
MsgBox "Colonne " & _
Mid(X, Application.Find("_", X) + 1, 2) & " est masquée"
End If
Next
End Sub
Private Sub B_sup_Click()
For Each element In Chk
MsgBox element.GrSaisie.Name
Next
End Sub
'--------------------------------------------

Voici le code du module de classe :
'---------------------------------------------
Public WithEvents GrSaisie As MSForms.CheckBox

Private Sub GrSaisie_Change()
Dim X As String ' Recevoir le nom du checkbox cliqué
Dim C As Integer ' représente le numéro du checkbox
'qui est en même temps le numéro de la colonne associée
X = GrSaisie.Name
C = Split(X, "_")(UBound(Split(X, "_")))
Columns(C).EntireColumn.Hidden = GrSaisie.Value
End Sub
'---------------------------------------------




"MichDenis" a écrit dans le message de news:

Explication donnée mais sans aucun test ...!

Quand tu baptises tes contrôles "checkbox" de ton tableau
je te suggère fortement d'utiliser le symbole "underscore _"
entre "Checkbox et son numéro index pour obtenir ceci : Checkbox_1
ceci facilitera le traitement ultérieur. La nouvelle ligne de code
se lira comme suit :

| Set Chk(IndCnt).GrSaisie = Me("Checkbox_" & IndCnt)
Cette ligne de code crée un tableau d'objet de CheckBox
Chaque objet de ce tableau est indépendant et il représente
L'instance du checkbox que ta procédure à créer

*********************************************
Dans la procédure d'initialisation de ton formulaire
*********************************************

IL s'agit simplement de modifier cette section de ta procédure
'----------------------------------
For Each ctrl In Me.Controls
ctrl.Value = Not Columns(X).EntireColumn.Hidden
X = X + 1
Next
'----------------------------------

Par :n'oublie pas que tu dois boucler sur ton tableau "Chk"
qui représente les objets chechbox

'-----------------------------------
'pour chaque élément du tableau d'objets -> attribution
'de son état en fonction
X = 0
For Element in Chk
X = X + 1
Element.Value = Not Columns(X).EntireColumn.Hidden
Next
'-----------------------------------


************************************************
MODIFICATION DU MODULE DE CLASSE
************************************************
Cette procédure de ton module de classe pourrait être modifé
'------------------------------------
Private Sub GrSaisie_Change()
'Columns("A").EntireColumn.Hidden = Not CheckBox1.Value
MsgBox GrSaisie.Name
End Sub
'------------------------------------
de cette manière :

'------------------------------------
Private Sub GrSaisie_Change()
Dim X As String ' Recevoir le nom du checkbox cliqué
Dim C As Integer ' représente le numéro du checkbox
'qui est en même temps le numéro de la colonne associée
X = GrSaisie.Name
C = Split(X, "_")(UBound(Split(X, "_")))
Columns(C).EntireColumn.Hidden = GrSaisie.Value
End Sub









"Gregory Hilaire" a écrit dans le message de news:
Oz%
Bien le bonjour,

Je voulais avoir des Checkbox qui se créaient à l'execution (Run-Time) et
les associer à un tableau afin de les utiliser dans une boucle
Grace à JB cela fonctionne et très bien même ( Encore merci ). Maintenant je
me heurte à un nouvel écueil comment recupérer les
valeurs de ces checkboxs, et comment inter agir avec les méthodes de ces
CheckBox....

Illustrons pour plus de clareté.
Mon module de classe [ qui ne fonctionne pas comme il faut :( ]

Public WithEvents GrSaisie As MSForms.CheckBox

Private Sub GrSaisie_Change()
'Columns("A").EntireColumn.Hidden = Not CheckBox1.Value
MsgBox GrSaisie.Name
End Sub
'=========================================================================================== ' Mon module normal qui droit créer des CheckBox à l'execution, et quand on
clique sur un Checkbox il doit chacher la colonne qu'il
' représente (non coché) ou afficher la colonne (coché). Pour le moment à
l'initialisation il me dit les colonnes caché mais le hic c'est quand
' je veux cliquer pour cacher ou afficher :)
'=========================================================================================== Dim n As Integer
'Déclarons 63 Case à cocher du type que nous avions défini dans le module de
Classe
Dim Chk(1 To 63) As New ClasseMesCasesACocher
Private Sub UserForm_Initialize()
Dim Retour 'Valeur retournée par l'ajout de Controls sur la
Dim NbrCol As Byte 'Nombre de Colonnes désirées
Dim NbrLig As Byte 'Nombre de Lignes désirées
Dim QteMax As Byte 'Quantité de valeurs désirées
Dim IndCnt As Byte 'Indice de chaque Control
Dim TabTit As Variant ' Liste des titres à cacher ou afficher (variant
obligatoire)

QteMax = 63
NbrCol = 4
NbrLig = QteMax NbrCol
TabTit = Array( _
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J" _
, "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T" _
, "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD" _
, "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO" _
, "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY" _
, "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI" _
, "BJ", "BK", "BL" _
)

'Initialisation des paramètres pour 63 cases à cocher
For IndCnt = 1 To QteMax
Retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & IndCnt, True)
Me("CheckBox" & IndCnt).Top = 20 + ((IndCnt - 1) NbrCol) * 20 'Lignes
distants de 20 Pts
Me("CheckBox" & IndCnt).Left = 20 + ((IndCnt - 1) Mod NbrCol) * 60
'Colonne distant de 60 points
Me("CheckBox" & IndCnt).Caption = TabTit(IndCnt - 1)
Next
' Création de n instances (n Objets Chk de type ClasseMesCasesACocher)
For IndCnt = 1 To QteMax
Set Chk(IndCnt).GrSaisie = Me("Checkbox" & IndCnt)
Next IndCnt

Dim X As Byte 'variable pour les colonnes
X = 1
'Nous assumons ici que dans le cadre (Frame) nous n'avons que des case à
cocher
For Each ctrl In Me.Controls
ctrl.Value = Not Columns(X).EntireColumn.Hidden
X = X + 1
Next
End Sub

======================================================================================== Avant je mettait le code suivant à l'évènement de chaque case à cocher (at
design time) maintenant qu'elle sont crées dynamiquement
je suis un peu perdu.
========================================================================================
Private Sub ChkCol1_Click()
Columns("A").EntireColumn.Hidden = Not ChkCol1.Value
End Sub

Private Sub ChkCol2_Click()
Columns("B").EntireColumn.Hidden = Not ChkCol2.Value
End Sub

Un gros Merci pour tout aide
Avatar
Gregory Hilaire
Un grand Merci à MichDenis et à JB avec vos explications je vais encore
raffiner le code.
J'y étais presque: J'avais trouvé ceci

Public WithEvents GrSaisie As MSForms.CheckBox
Private Sub GrSaisie_Click()
Dim numero as byte
numero =
val(iif(val(right(GrSaisie.name,2))=0,right(GrSaisie.name,1),right(GrSaisie.name,2)))
Columns(numero).Hidden = not GrSaisie.Value
End Sub

Un peu alambiqué pour rien :)

Maintenant ceci me porte à poser la question suivante est-il possible
d'avoir un code vba qui va ajouter des
procédures ou fonction à un "Control" que l'on a créé Dynamiquement. Du Vba
qui modifie le Vba :) ?
Si oui un petit bout de code pour me mettre sur la piste et ensuite tout ira
tout seul.

Par exemple je crée un bouton et lorsque l'on clique sur le bouton une ligne
est caché par exemple !

UN GROS MERCI ENCORE UNE FOIS GRACE A VOUS TOUS JE ME SENS PROGRESSER











"JB" a écrit dans le message de news:

Bonjour,

Masque/Affiche colonnes:

http://cjoint.com/?cshZq32jbx

Dim n
Dim Chk(1 To 100) As New ClasseSaisie
Private Sub UserForm_Initialize()
n = 30
For b = 1 To n
retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & b, True)
Me("CheckBox" & b).Top = 60
Me("CheckBox" & b).Left = 10 + (b - 1) * 15

retour = Me.Controls.Add("Forms.Label.1", "Label" & b, True)
Me("Label" & b).Caption = Split(Cells(1, b).Address, "$")(1)
Me("Label" & b).Top = 40
Me("Label" & b).Left = 10 + (b - 1) * 15
Next
'--
For b = 1 To n: Set Chk(b).GrSaisie = Me("Checkbox" & b): Next b
End Sub

Public WithEvents GrSaisie As MSForms.CheckBox
Private Sub GrSaisie_Change()
nomcheck = GrSaisie.Name
col = Val(Mid(GrSaisie.Name, 9))
Columns(col).Hidden = UserForm1.Controls(nomcheck).Value
End Sub

JB

On 17 fév, 23:41, "Gregory Hilaire" wrote:
Bien le bonjour,

Je voulais avoir des Checkbox qui se créaient à l'execution (Run-Time) et
les associer à un tableau afin de les utiliser dans une boucle
Grace à JB cela fonctionne et très bien même ( Encore merci ). Maintenant
je
me heurte à un nouvel écueil comment recupérer les
valeurs de ces checkboxs, et comment inter agir avec les méthodes de ces
CheckBox....

Illustrons pour plus de clareté.
Mon module de classe [ qui ne fonctionne pas comme il faut :( ]

Public WithEvents GrSaisie As MSForms.CheckBox

Private Sub GrSaisie_Change()
'Columns("A").EntireColumn.Hidden = Not CheckBox1.Value
MsgBox GrSaisie.Name
End Sub
'==========================================================================­================= > ' Mon module normal qui droit créer des CheckBox à l'execution, et quand
on
clique sur un Checkbox il doit chacher la colonne qu'il
' représente (non coché) ou afficher la colonne (coché). Pour le moment à
l'initialisation il me dit les colonnes caché mais le hic c'est quand
' je veux cliquer pour cacher ou afficher :)
'==========================================================================­================= > Dim n As Integer
'Déclarons 63 Case à cocher du type que nous avions défini dans le module
de
Classe
Dim Chk(1 To 63) As New ClasseMesCasesACocher
Private Sub UserForm_Initialize()
Dim Retour 'Valeur retournée par l'ajout de Controls sur la
Dim NbrCol As Byte 'Nombre de Colonnes désirées
Dim NbrLig As Byte 'Nombre de Lignes désirées
Dim QteMax As Byte 'Quantité de valeurs désirées
Dim IndCnt As Byte 'Indice de chaque Control
Dim TabTit As Variant ' Liste des titres à cacher ou afficher (variant
obligatoire)

QteMax = 63
NbrCol = 4
NbrLig = QteMax NbrCol
TabTit = Array( _
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J" _
, "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T" _
, "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD" _
, "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO" _
, "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY" _
, "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI" _
, "BJ", "BK", "BL" _
)

'Initialisation des paramètres pour 63 cases à cocher
For IndCnt = 1 To QteMax
Retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & IndCnt, True)
Me("CheckBox" & IndCnt).Top = 20 + ((IndCnt - 1) NbrCol) * 20 'Lignes
distants de 20 Pts
Me("CheckBox" & IndCnt).Left = 20 + ((IndCnt - 1) Mod NbrCol) * 60
'Colonne distant de 60 points
Me("CheckBox" & IndCnt).Caption = TabTit(IndCnt - 1)
Next
' Création de n instances (n Objets Chk de type ClasseMesCasesACocher)
For IndCnt = 1 To QteMax
Set Chk(IndCnt).GrSaisie = Me("Checkbox" & IndCnt)
Next IndCnt

Dim X As Byte 'variable pour les colonnes
X = 1
'Nous assumons ici que dans le cadre (Frame) nous n'avons que des case à
cocher
For Each ctrl In Me.Controls
ctrl.Value = Not Columns(X).EntireColumn.Hidden
X = X + 1
Next
End Sub

===========================================================================­============= > Avant je mettait le code suivant à l'évènement de chaque case à cocher (at
design time) maintenant qu'elle sont crées dynamiquement
je suis un peu perdu.
===========================================================================­============= >
Private Sub ChkCol1_Click()
Columns("A").EntireColumn.Hidden = Not ChkCol1.Value
End Sub

Private Sub ChkCol2_Click()
Columns("B").EntireColumn.Hidden = Not ChkCol2.Value
End Sub

Un gros Merci pour tout aide


Avatar
MichDenis
Un bout de code de Frédéric Sigonneau.. je crois !

Ajoute un commandbutton à un userform existant
'(avec le code de son événement Click)

Sub AddBouton()
Dim Usf As Object, btn As Object
Set Usf = ThisWorkbook.VBProject.VBComponents("Userform1")
Set btn = Usf.Designer.Controls.Add("forms.commandbutton.1")
With btn
.Caption = "Cliquer ici !..."
.Left = 60: .Top = 50
End With
With Usf.CodeModule
X = .CountOfLines
.insertlines X + 1, "Sub CommandButton1_Click()"
.insertlines X + 2, " MsgBox ""coucou"""
.insertlines X + 3, " unload Me"
.insertlines X + 4, "End Sub"
End With
VBA.UserForms.Add (Usf.Name)
UserForms(UserForms.Count - 1).Show
End Sub



"Gregory Hilaire" a écrit dans le message de news:
ufAdf%
Un grand Merci à MichDenis et à JB avec vos explications je vais encore
raffiner le code.
J'y étais presque: J'avais trouvé ceci

Public WithEvents GrSaisie As MSForms.CheckBox
Private Sub GrSaisie_Click()
Dim numero as byte
numero val(iif(val(right(GrSaisie.name,2))=0,right(GrSaisie.name,1),right(GrSaisie.name,2)))
Columns(numero).Hidden = not GrSaisie.Value
End Sub

Un peu alambiqué pour rien :)

Maintenant ceci me porte à poser la question suivante est-il possible
d'avoir un code vba qui va ajouter des
procédures ou fonction à un "Control" que l'on a créé Dynamiquement. Du Vba
qui modifie le Vba :) ?
Si oui un petit bout de code pour me mettre sur la piste et ensuite tout ira
tout seul.

Par exemple je crée un bouton et lorsque l'on clique sur le bouton une ligne
est caché par exemple !

UN GROS MERCI ENCORE UNE FOIS GRACE A VOUS TOUS JE ME SENS PROGRESSER











"JB" a écrit dans le message de news:

Bonjour,

Masque/Affiche colonnes:

http://cjoint.com/?cshZq32jbx

Dim n
Dim Chk(1 To 100) As New ClasseSaisie
Private Sub UserForm_Initialize()
n = 30
For b = 1 To n
retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & b, True)
Me("CheckBox" & b).Top = 60
Me("CheckBox" & b).Left = 10 + (b - 1) * 15

retour = Me.Controls.Add("Forms.Label.1", "Label" & b, True)
Me("Label" & b).Caption = Split(Cells(1, b).Address, "$")(1)
Me("Label" & b).Top = 40
Me("Label" & b).Left = 10 + (b - 1) * 15
Next
'--
For b = 1 To n: Set Chk(b).GrSaisie = Me("Checkbox" & b): Next b
End Sub

Public WithEvents GrSaisie As MSForms.CheckBox
Private Sub GrSaisie_Change()
nomcheck = GrSaisie.Name
col = Val(Mid(GrSaisie.Name, 9))
Columns(col).Hidden = UserForm1.Controls(nomcheck).Value
End Sub

JB

On 17 fév, 23:41, "Gregory Hilaire" wrote:
Bien le bonjour,

Je voulais avoir des Checkbox qui se créaient à l'execution (Run-Time) et
les associer à un tableau afin de les utiliser dans une boucle
Grace à JB cela fonctionne et très bien même ( Encore merci ). Maintenant
je
me heurte à un nouvel écueil comment recupérer les
valeurs de ces checkboxs, et comment inter agir avec les méthodes de ces
CheckBox....

Illustrons pour plus de clareté.
Mon module de classe [ qui ne fonctionne pas comme il faut :( ]

Public WithEvents GrSaisie As MSForms.CheckBox

Private Sub GrSaisie_Change()
'Columns("A").EntireColumn.Hidden = Not CheckBox1.Value
MsgBox GrSaisie.Name
End Sub
'==========================================================================­================= > ' Mon module normal qui droit créer des CheckBox à l'execution, et quand
on
clique sur un Checkbox il doit chacher la colonne qu'il
' représente (non coché) ou afficher la colonne (coché). Pour le moment à
l'initialisation il me dit les colonnes caché mais le hic c'est quand
' je veux cliquer pour cacher ou afficher :)
'==========================================================================­================= > Dim n As Integer
'Déclarons 63 Case à cocher du type que nous avions défini dans le module
de
Classe
Dim Chk(1 To 63) As New ClasseMesCasesACocher
Private Sub UserForm_Initialize()
Dim Retour 'Valeur retournée par l'ajout de Controls sur la
Dim NbrCol As Byte 'Nombre de Colonnes désirées
Dim NbrLig As Byte 'Nombre de Lignes désirées
Dim QteMax As Byte 'Quantité de valeurs désirées
Dim IndCnt As Byte 'Indice de chaque Control
Dim TabTit As Variant ' Liste des titres à cacher ou afficher (variant
obligatoire)

QteMax = 63
NbrCol = 4
NbrLig = QteMax NbrCol
TabTit = Array( _
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J" _
, "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T" _
, "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD" _
, "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO" _
, "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY" _
, "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI" _
, "BJ", "BK", "BL" _
)

'Initialisation des paramètres pour 63 cases à cocher
For IndCnt = 1 To QteMax
Retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & IndCnt, True)
Me("CheckBox" & IndCnt).Top = 20 + ((IndCnt - 1) NbrCol) * 20 'Lignes
distants de 20 Pts
Me("CheckBox" & IndCnt).Left = 20 + ((IndCnt - 1) Mod NbrCol) * 60
'Colonne distant de 60 points
Me("CheckBox" & IndCnt).Caption = TabTit(IndCnt - 1)
Next
' Création de n instances (n Objets Chk de type ClasseMesCasesACocher)
For IndCnt = 1 To QteMax
Set Chk(IndCnt).GrSaisie = Me("Checkbox" & IndCnt)
Next IndCnt

Dim X As Byte 'variable pour les colonnes
X = 1
'Nous assumons ici que dans le cadre (Frame) nous n'avons que des case à
cocher
For Each ctrl In Me.Controls
ctrl.Value = Not Columns(X).EntireColumn.Hidden
X = X + 1
Next
End Sub

===========================================================================­============= > Avant je mettait le code suivant à l'évènement de chaque case à cocher (at
design time) maintenant qu'elle sont crées dynamiquement
je suis un peu perdu.
===========================================================================­============= >
Private Sub ChkCol1_Click()
Columns("A").EntireColumn.Hidden = Not ChkCol1.Value
End Sub

Private Sub ChkCol2_Click()
Columns("B").EntireColumn.Hidden = Not ChkCol2.Value
End Sub

Un gros Merci pour tout aide


Avatar
Gregory Hilaire
Un gros gros Merci MichDenis Cela fonctionne super bien c'est exactement ce
que je voulais.
Là je suis entrain de voir comment empêcher la création d'un évènement quand
il existe déjà

Encore Merci


"MichDenis" a écrit dans le message de news:

Un bout de code de Frédéric Sigonneau.. je crois !

Ajoute un commandbutton à un userform existant
'(avec le code de son événement Click)

Sub AddBouton()
Dim Usf As Object, btn As Object
Set Usf = ThisWorkbook.VBProject.VBComponents("Userform1")
Set btn = Usf.Designer.Controls.Add("forms.commandbutton.1")
With btn
.Caption = "Cliquer ici !..."
.Left = 60: .Top = 50
End With
With Usf.CodeModule
X = .CountOfLines
.insertlines X + 1, "Sub CommandButton1_Click()"
.insertlines X + 2, " MsgBox ""coucou"""
.insertlines X + 3, " unload Me"
.insertlines X + 4, "End Sub"
End With
VBA.UserForms.Add (Usf.Name)
UserForms(UserForms.Count - 1).Show
End Sub



"Gregory Hilaire" a écrit dans le message de news:
ufAdf%
Un grand Merci à MichDenis et à JB avec vos explications je vais encore
raffiner le code.
J'y étais presque: J'avais trouvé ceci

Public WithEvents GrSaisie As MSForms.CheckBox
Private Sub GrSaisie_Click()
Dim numero as byte
numero > val(iif(val(right(GrSaisie.name,2))=0,right(GrSaisie.name,1),right(GrSaisie.name,2)))
Columns(numero).Hidden = not GrSaisie.Value
End Sub

Un peu alambiqué pour rien :)

Maintenant ceci me porte à poser la question suivante est-il possible
d'avoir un code vba qui va ajouter des
procédures ou fonction à un "Control" que l'on a créé Dynamiquement. Du
Vba
qui modifie le Vba :) ?
Si oui un petit bout de code pour me mettre sur la piste et ensuite tout
ira
tout seul.

Par exemple je crée un bouton et lorsque l'on clique sur le bouton une
ligne
est caché par exemple !

UN GROS MERCI ENCORE UNE FOIS GRACE A VOUS TOUS JE ME SENS PROGRESSER











"JB" a écrit dans le message de news:

Bonjour,

Masque/Affiche colonnes:

http://cjoint.com/?cshZq32jbx

Dim n
Dim Chk(1 To 100) As New ClasseSaisie
Private Sub UserForm_Initialize()
n = 30
For b = 1 To n
retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & b, True)
Me("CheckBox" & b).Top = 60
Me("CheckBox" & b).Left = 10 + (b - 1) * 15

retour = Me.Controls.Add("Forms.Label.1", "Label" & b, True)
Me("Label" & b).Caption = Split(Cells(1, b).Address, "$")(1)
Me("Label" & b).Top = 40
Me("Label" & b).Left = 10 + (b - 1) * 15
Next
'--
For b = 1 To n: Set Chk(b).GrSaisie = Me("Checkbox" & b): Next b
End Sub

Public WithEvents GrSaisie As MSForms.CheckBox
Private Sub GrSaisie_Change()
nomcheck = GrSaisie.Name
col = Val(Mid(GrSaisie.Name, 9))
Columns(col).Hidden = UserForm1.Controls(nomcheck).Value
End Sub

JB

On 17 fév, 23:41, "Gregory Hilaire" wrote:
Bien le bonjour,

Je voulais avoir des Checkbox qui se créaient à l'execution (Run-Time) et
les associer à un tableau afin de les utiliser dans une boucle
Grace à JB cela fonctionne et très bien même ( Encore merci ). Maintenant
je
me heurte à un nouvel écueil comment recupérer les
valeurs de ces checkboxs, et comment inter agir avec les méthodes de ces
CheckBox....

Illustrons pour plus de clareté.
Mon module de classe [ qui ne fonctionne pas comme il faut :( ]

Public WithEvents GrSaisie As MSForms.CheckBox

Private Sub GrSaisie_Change()
'Columns("A").EntireColumn.Hidden = Not CheckBox1.Value
MsgBox GrSaisie.Name
End Sub
'==========================================================================­================= >> ' Mon module normal qui droit créer des CheckBox à l'execution, et quand
on
clique sur un Checkbox il doit chacher la colonne qu'il
' représente (non coché) ou afficher la colonne (coché). Pour le moment à
l'initialisation il me dit les colonnes caché mais le hic c'est quand
' je veux cliquer pour cacher ou afficher :)
'==========================================================================­================= >> Dim n As Integer
'Déclarons 63 Case à cocher du type que nous avions défini dans le module
de
Classe
Dim Chk(1 To 63) As New ClasseMesCasesACocher
Private Sub UserForm_Initialize()
Dim Retour 'Valeur retournée par l'ajout de Controls sur la
Dim NbrCol As Byte 'Nombre de Colonnes désirées
Dim NbrLig As Byte 'Nombre de Lignes désirées
Dim QteMax As Byte 'Quantité de valeurs désirées
Dim IndCnt As Byte 'Indice de chaque Control
Dim TabTit As Variant ' Liste des titres à cacher ou afficher (variant
obligatoire)

QteMax = 63
NbrCol = 4
NbrLig = QteMax NbrCol
TabTit = Array( _
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J" _
, "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T" _
, "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD" _
, "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO" _
, "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY" _
, "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI" _
, "BJ", "BK", "BL" _
)

'Initialisation des paramètres pour 63 cases à cocher
For IndCnt = 1 To QteMax
Retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & IndCnt, True)
Me("CheckBox" & IndCnt).Top = 20 + ((IndCnt - 1) NbrCol) * 20 'Lignes
distants de 20 Pts
Me("CheckBox" & IndCnt).Left = 20 + ((IndCnt - 1) Mod NbrCol) * 60
'Colonne distant de 60 points
Me("CheckBox" & IndCnt).Caption = TabTit(IndCnt - 1)
Next
' Création de n instances (n Objets Chk de type ClasseMesCasesACocher)
For IndCnt = 1 To QteMax
Set Chk(IndCnt).GrSaisie = Me("Checkbox" & IndCnt)
Next IndCnt

Dim X As Byte 'variable pour les colonnes
X = 1
'Nous assumons ici que dans le cadre (Frame) nous n'avons que des case à
cocher
For Each ctrl In Me.Controls
ctrl.Value = Not Columns(X).EntireColumn.Hidden
X = X + 1
Next
End Sub

===========================================================================­============= >> Avant je mettait le code suivant à l'évènement de chaque case à cocher
(at
design time) maintenant qu'elle sont crées dynamiquement
je suis un peu perdu.
===========================================================================­============= >>
Private Sub ChkCol1_Click()
Columns("A").EntireColumn.Hidden = Not ChkCol1.Value
End Sub

Private Sub ChkCol2_Click()
Columns("B").EntireColumn.Hidden = Not ChkCol2.Value
End Sub

Un gros Merci pour tout aide







Avatar
MichDenis
Si tu veux déceler la présente d'une procédure : CommandButton_Click dans un formulaire

Tu adaptes ceci à ton projet.
'---------------------------------
Sub Afficher_procédure()

Dim LineStart As Integer
Dim VbComp As Object
Dim NomProcedure As String
NomProcedure = "CommandButton1_click"

On Error Resume Next
Set VbComp = ThisWorkbook.VBProject.VBComponents("Userform1")
LineStart = VbComp.CodeModule.ProcBodyLine(NomProcedure, 0)
If Err = 35 Then
Err.Clear
MsgBox "Cette procédure ou fonction est absente " & vbCrLf & _
"déjà dans le module " & VbComp.Name
Else
MsgBox "Cette procédure est existe déjà."
End If

End Sub
'---------------------------------




"Gregory Hilaire" a écrit dans le message de news:

Un gros gros Merci MichDenis Cela fonctionne super bien c'est exactement ce
que je voulais.
Là je suis entrain de voir comment empêcher la création d'un évènement quand
il existe déjà

Encore Merci


"MichDenis" a écrit dans le message de news:

Un bout de code de Frédéric Sigonneau.. je crois !

Ajoute un commandbutton à un userform existant
'(avec le code de son événement Click)

Sub AddBouton()
Dim Usf As Object, btn As Object
Set Usf = ThisWorkbook.VBProject.VBComponents("Userform1")
Set btn = Usf.Designer.Controls.Add("forms.commandbutton.1")
With btn
.Caption = "Cliquer ici !..."
.Left = 60: .Top = 50
End With
With Usf.CodeModule
X = .CountOfLines
.insertlines X + 1, "Sub CommandButton1_Click()"
.insertlines X + 2, " MsgBox ""coucou"""
.insertlines X + 3, " unload Me"
.insertlines X + 4, "End Sub"
End With
VBA.UserForms.Add (Usf.Name)
UserForms(UserForms.Count - 1).Show
End Sub



"Gregory Hilaire" a écrit dans le message de news:
ufAdf%
Un grand Merci à MichDenis et à JB avec vos explications je vais encore
raffiner le code.
J'y étais presque: J'avais trouvé ceci

Public WithEvents GrSaisie As MSForms.CheckBox
Private Sub GrSaisie_Click()
Dim numero as byte
numero > val(iif(val(right(GrSaisie.name,2))=0,right(GrSaisie.name,1),right(GrSaisie.name,2)))
Columns(numero).Hidden = not GrSaisie.Value
End Sub

Un peu alambiqué pour rien :)

Maintenant ceci me porte à poser la question suivante est-il possible
d'avoir un code vba qui va ajouter des
procédures ou fonction à un "Control" que l'on a créé Dynamiquement. Du
Vba
qui modifie le Vba :) ?
Si oui un petit bout de code pour me mettre sur la piste et ensuite tout
ira
tout seul.

Par exemple je crée un bouton et lorsque l'on clique sur le bouton une
ligne
est caché par exemple !

UN GROS MERCI ENCORE UNE FOIS GRACE A VOUS TOUS JE ME SENS PROGRESSER











"JB" a écrit dans le message de news:

Bonjour,

Masque/Affiche colonnes:

http://cjoint.com/?cshZq32jbx

Dim n
Dim Chk(1 To 100) As New ClasseSaisie
Private Sub UserForm_Initialize()
n = 30
For b = 1 To n
retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & b, True)
Me("CheckBox" & b).Top = 60
Me("CheckBox" & b).Left = 10 + (b - 1) * 15

retour = Me.Controls.Add("Forms.Label.1", "Label" & b, True)
Me("Label" & b).Caption = Split(Cells(1, b).Address, "$")(1)
Me("Label" & b).Top = 40
Me("Label" & b).Left = 10 + (b - 1) * 15
Next
'--
For b = 1 To n: Set Chk(b).GrSaisie = Me("Checkbox" & b): Next b
End Sub

Public WithEvents GrSaisie As MSForms.CheckBox
Private Sub GrSaisie_Change()
nomcheck = GrSaisie.Name
col = Val(Mid(GrSaisie.Name, 9))
Columns(col).Hidden = UserForm1.Controls(nomcheck).Value
End Sub

JB

On 17 fév, 23:41, "Gregory Hilaire" wrote:
Bien le bonjour,

Je voulais avoir des Checkbox qui se créaient à l'execution (Run-Time) et
les associer à un tableau afin de les utiliser dans une boucle
Grace à JB cela fonctionne et très bien même ( Encore merci ). Maintenant
je
me heurte à un nouvel écueil comment recupérer les
valeurs de ces checkboxs, et comment inter agir avec les méthodes de ces
CheckBox....

Illustrons pour plus de clareté.
Mon module de classe [ qui ne fonctionne pas comme il faut :( ]

Public WithEvents GrSaisie As MSForms.CheckBox

Private Sub GrSaisie_Change()
'Columns("A").EntireColumn.Hidden = Not CheckBox1.Value
MsgBox GrSaisie.Name
End Sub
'==========================================================================­================= >> ' Mon module normal qui droit créer des CheckBox à l'execution, et quand
on
clique sur un Checkbox il doit chacher la colonne qu'il
' représente (non coché) ou afficher la colonne (coché). Pour le moment à
l'initialisation il me dit les colonnes caché mais le hic c'est quand
' je veux cliquer pour cacher ou afficher :)
'==========================================================================­================= >> Dim n As Integer
'Déclarons 63 Case à cocher du type que nous avions défini dans le module
de
Classe
Dim Chk(1 To 63) As New ClasseMesCasesACocher
Private Sub UserForm_Initialize()
Dim Retour 'Valeur retournée par l'ajout de Controls sur la
Dim NbrCol As Byte 'Nombre de Colonnes désirées
Dim NbrLig As Byte 'Nombre de Lignes désirées
Dim QteMax As Byte 'Quantité de valeurs désirées
Dim IndCnt As Byte 'Indice de chaque Control
Dim TabTit As Variant ' Liste des titres à cacher ou afficher (variant
obligatoire)

QteMax = 63
NbrCol = 4
NbrLig = QteMax NbrCol
TabTit = Array( _
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J" _
, "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T" _
, "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD" _
, "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO" _
, "AP", "AQ", "AR", "AS", "AT", "AU", "AV", "AW", "AX", "AY" _
, "AZ", "BA", "BB", "BC", "BD", "BE", "BF", "BG", "BH", "BI" _
, "BJ", "BK", "BL" _
)

'Initialisation des paramètres pour 63 cases à cocher
For IndCnt = 1 To QteMax
Retour = Me.Controls.Add("Forms.Checkbox.1", "CheckBox" & IndCnt, True)
Me("CheckBox" & IndCnt).Top = 20 + ((IndCnt - 1) NbrCol) * 20 'Lignes
distants de 20 Pts
Me("CheckBox" & IndCnt).Left = 20 + ((IndCnt - 1) Mod NbrCol) * 60
'Colonne distant de 60 points
Me("CheckBox" & IndCnt).Caption = TabTit(IndCnt - 1)
Next
' Création de n instances (n Objets Chk de type ClasseMesCasesACocher)
For IndCnt = 1 To QteMax
Set Chk(IndCnt).GrSaisie = Me("Checkbox" & IndCnt)
Next IndCnt

Dim X As Byte 'variable pour les colonnes
X = 1
'Nous assumons ici que dans le cadre (Frame) nous n'avons que des case à
cocher
For Each ctrl In Me.Controls
ctrl.Value = Not Columns(X).EntireColumn.Hidden
X = X + 1
Next
End Sub

===========================================================================­============= >> Avant je mettait le code suivant à l'évènement de chaque case à cocher
(at
design time) maintenant qu'elle sont crées dynamiquement
je suis un peu perdu.
===========================================================================­============= >>
Private Sub ChkCol1_Click()
Columns("A").EntireColumn.Hidden = Not ChkCol1.Value
End Sub

Private Sub ChkCol2_Click()
Columns("B").EntireColumn.Hidden = Not ChkCol2.Value
End Sub

Un gros Merci pour tout aide