Bonjour à tous ! Je suis nouveau sur le forum et je me lance dans vba sur le développement d'une application pour mon stage.
L'appli fait plein de trucs et est assez complexe, mais l'objet ici, c'est les checkbox:
J'aimerais que lorsque je clique sur une checkbox, que j'ai créée à l'aide d'une boucle qui active la macro qui suit...
... le code affecte cette fonction au bouton, qui s'active à chaque fois que le bouton est cliqué avec le linkedcell comme argument :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 Sub Inserer_Cases_A_Cocher_Liees(Zoneboutons As Range) Dim ChkBx As CheckBox For Each rngCel In Zoneboutons With rngCel.MergeArea.Cells If .Resize(1, 1).Address = rngCel.Address Then 'Pour ne pas afficher la valeur de la cellule liée, enlevez l'apostrophe en début de ligne suivante : .NumberFormat = ";;;" Set ChkBx = ActiveSheet.CheckBoxes.Add(.Left, .Top, .Width, .Height) With ChkBx 'valeur par défaut : .Value = xlOff 'pourrait être True ou False 'cellule liée .LinkedCell = rngCel.MergeArea.Cells.Address 'Texte de remplacement .Characters.Text = "Exclure" 'texte '.Text = "Toto" ' ou : .Caption = "Toto" 'bordure : With .Border 'Style de ligne '.LineStyle = xlLineStyleNone 'ou xlContinuous 'ou xlDashDot ou xlDashDotDot ou xlDot 'couleur '.ColorIndex = 3 '3 = rouge 'épaisseur du trait '.Weight = 4 End With 'accessibles aussi les propriétés .Locked, .Name, .Enabled etc... End With End If End With Next rngCel End Sub
Pour plus de clareté : les checkboxes sont situés au bout de chaque ligne des données utilisées pour afficher un nuage de points abscisse et ordonnée). Cocher le case sur une ligne doit avoir pour effet de sortir les données de la zone prise en compte pour l'affichage. La décocher fait le chemin inverse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Sub CocherPourExclureLesValeurs(Location As Range) Worksheets("Template paramétrique").Location.Activate If ActiveCell.Value = True Then ActiveCell.Offset(0, -2).Cut ActiveCell.Offset(0, 1).PasteSpecial (xlPasteValues) ActiveCell.Offset(0, -1).Cut ActiveCell.Offset(0, 2).PasteSpecial (xlPasteValues) ElseIf ActiveCell.Value = False Then ActiveCell.Offset(0, 1).Cut ActiveCell.Offset(0, -2).PasteSpecial (xlPasteValues) ActiveCell.Offset(0, 2).Cut ActiveCell.Offset(0, -1).PasteSpecial (xlPasteValues) End If End Sub
Le truc c'est que je ne suis meme pas sûr que ce soit possible ; il ne me semble qu'on ne peut affecter à des cases à cocher que des procédures qui n'ont pas d'arguments, mais peut etre que je me trompe ou bien qu'il y a une manière détournée d'aborder le problème ?
J'espère que c'est clair, et je suis désolé de ne pas pouvoir fournir de fichier, c'est juste qu'il y a des dizaines de macros, qui sont un peu appelées toutes les unes par les autres, donc ça reviendrait à vous faire reprendre tout le projet
Merci d'avance pour votre aide !
Partager