création dynamique de procédures

  • Initiateur de la discussion amand81
  • Date de début
A

amand81

Guest
Bonjour,

je souhaiterais savoir si il est possible de créer des procédures dynamiquement. Je m'explique:
J'ai un nombre de checkbox qui varient en fonction du nombre de colonnes non vides. Et je souhaiterais savoir s'il est possible de créer une procèdure du style :

For i=1 to nb_colonnes
'creer la procédure Sub CheckBox de i
next i


Je ne sais pas si c'est compréhensible, mais si vous souhaitez plus de renseignements, je peux essayer d'être plus explicite.

Merci d'avance de vous pencher sur mon problème.
 
A

amand81

Guest
Bonjour et merci de m'avoir répondu
Mais mes checkbox ne se trouve pas sur une UserForm mais sur une feuille, et je les créé ainsi :

Sub AjoutCheckBox()

Dim c As Range, myRange As Range
calcul_nb_colonnes nb_colonnes, tot_def, valor, code

'calcul d'indices particuliers
Set myRange = Range(Cells(33, 2), Cells(33, (valor - tot_def + 1))) 'je sélectionne là où je veux que mes cases apparaissent
i = 1
For Each c In myRange.Cells
ActiveSheet.CheckBoxes.Add((c.Left + 10), (c.Top - 1.5), c.Width, c.Height).Select
With Selection
.LinkedCell = c.Address
.Characters.Text = ''
.Name = c.Address
.Display3DShading = True
.Value = xlOn
End With
c.Select
With Selection
.FormatConditions.Delete
.FormatConditions.Add Type:=xlExpression, _
Formula1:='=' & c.Address & '=TRUE'
.FormatConditions(1).Font.ColorIndex = 6 'change for other color when ticked
.FormatConditions(1).Interior.ColorIndex = 6 'change for other color when ticked
.Font.ColorIndex = 2 'cell background color = White
End With
i = i + 1
Next
myRange.Select
End Sub


cette macro me permet de créer mes checkbox dynamiquement et j'aimerais savoir s'il est possible de créer mes Sub CheckBox_click() pareillement.
Merci
 
A

amand81

Guest
Rebonjour,

suite à vos réponses, j'ai donc introduit ces lignes dans ma macro
après
ActiveSheet.CheckBoxes.Add((c.Left + 10), (c.Top - 1.5), c.Width, c.Height).Select
With Selection
.LinkedCell = c.Address
.Characters.Text = ''
.Name = c.Address
.Display3DShading = True
.Value = xlOn
End With

Code = 'Sub ' & Selection.Name & '_Clic()' & vbCrLf
Code = Code & 'if Selection.Value= True Then' & vbCrLf
Code = Code & 'msgbox ''bonjour'' ' & vbCrLf
Code = Code & 'end if' & vbCrLf
Code = Code & 'end sub' & vbCrLf

With ActiveWorkbook.VBProject.vbcomponents(ActiveSheet.Name).codemodule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

Mais j'ai à nouveau un souci, dans ma feuille active, il m'inscrit

Sub ChkBox_1_Clic()
If Selection.Value = True Then
MsgBox 'bonjour'
End If
End Sub
et lorsque je le fais tourner, le problème suivant survient:
'erreur d'éxécution '13':
incompabilité de type'
Je ne sais pas comment résoudre ce problème, je vois bien qu'il ne devrait pas m'afficher 'Selection.Value = True ' mais je ne sais pas comment le transformer.
Merci d'avance pour vos réponses
 
A

amand81

Guest
Rebonjour,

J'ai réussit à modifier mon code pour qu'il fonctionne : à la place de
Code = Code & 'if Selection.Value= True Then' & vbCrLf

j'ai mis:
code = code & 'if Me.shapes.Item(' & i & ').OLEFormat.Object.Value= 1 Then ' & vbCrLf

et alors là ça fonctionne en faisant F5 mais lorsque je clique simplement sur la feuille, rien ne se passe alors que je devrais avoir mon MsgBox.

Quelqu'un aurait-il une solution à me proposer?
 
A

amand81

Guest
ca y est!!!
j'ai réussit àrésoudre une grosse partie de mon problème, il suffisait juste de rajouter ca

Selection.OnAction = 'Feuil2.' & Selection.Name & '_Click'

après ca

Code = 'Sub ' & Selection.Name & '_Clic()' & vbCrLf
Code = Code & 'if Selection.Value= True Then' & vbCrLf
Code = Code & 'msgbox ''bonjour'' ' & vbCrLf
Code = Code & 'end if' & vbCrLf
Code = Code & 'end sub' & vbCrLf


Merci à ceux qui ont réfléchit à mon pb.

et bonne fin de journée!
 

Discussions similaires

Réponses
35
Affichages
1 K
Réponses
2
Affichages
338

Statistiques des forums

Discussions
312 474
Messages
2 088 725
Membres
103 935
dernier inscrit
GGV