Lancement macro par checkbox(es)

NeMoS

XLDnaute Junior
Bonjour à tous,

J'ai trouvé beaucoup de discussions sur le forum sur les checkbox ou sur le lancement des macros, malheureusement je n'ai pas trouvé de réponses à mon problème.

Voilà, j'ai un classeur composé de plusieurs onglets.
Sur chaque onglet il y plusieurs checkbox (nombre différent suivant les feuilles).

La macro créee permet de modifier le format de certaines cellules en fonction de l'état des checkbox (TRUE/FALSE), quelque soit la feuille sur laquelle on se trouve.

Ce que je souhaiterai faire c'est déclencher la macro sur le changement de l'état d'une checkbox (checked/unchecked) mais ceci quelque soit la feuille et quelquesoit la checkbox sur la feuille.

Croyez-vous que c'est possible ?

Ci-joint la macro, mais je ne l'ai pas encore testée ce qui signifie qu'il doit y avoir certainement quelques erreurs :)

Je vous remercie par avance pour votre aide

NeMoS

Code:
Private Sub box_change()
Dim i, j, k As Integer
Dim fintab As Integer
Dim ws As Worksheets
Dim cb As CheckBox


i = 7
For Each ws In Workbook
fintab = Range("A" & Rows.Count).End(xlUp).Row
    For i = 7 To fintab
        If Range(i, 11).Value = "x" Then
            For Each cb In Range(Cells(i, 5), Cells(i, 9))
                If cb.Value = True Then
                    For j = 5 To 9
                    Cells(i, j).Interior.ColorIndex = xlNone
                                    Else
                    Cells(i, j).Interior.ColorIndex = 6
                End If
            Next
          End If
                 
    
    Next
    
Next

End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Lancement macro par checkbox(es)

Bonsoir à tous

NeMos
D'après ce que je lis dans ton message, tu sembles utliser des CheckBox "formulaires"
Si c'est le cas, remplace les par des CheckBox "ActiveX"
01CheckBox.png
Ensuite clic-droit dessus et Visualiser le code
Et collles-là ce code de test
Code:
Private Sub CheckBox1_Change()
MsgBox "Case " & IIf(CheckBox1, "cochée", "décochée"), vbInformation, CheckBox1.Name
End Sub

Maintenant il te reste plus qu'à remplacer ce code de test par un code utile ;)

Ce que je souhaiterai faire c'est déclencher la macro sur le changement de l'état d'une checkbox (checked/unchecked) mais ceci quelque soit la feuille et quelque soit la checkbox sur la feuille.
Ici il serait pratique d'utiliser un module de classe
(voir exemple dans les archives du forum)
 
Dernière édition:

NeMoS

XLDnaute Junior
Re : Lancement macro par checkbox(es)

Bonjour,

Un grand merci pour ta réponse.

Les checkbox sont bien des ActiveX.
Si je prends ton petit code test, il ne s'applique qu'à une checkbox précise (en l'occurence, checkbox1 dans ton code test).

Le code que j'ai (essayé) d'écrire s'applique pour toutes les feuilles du classeur, et ce que je voulais faire, c'est que quand je clique sur une checkbox, n'importe laquelle dans le classeur, le code se déclenche.

Je vais regarder les modules de classe comme tu me l'as conseillé.

NeMoS
 

Staple1600

XLDnaute Barbatruc
Re : Lancement macro par checkbox(es)

Bonsoir à tous

Nemos
Dans un module de classe nommé Classe1

Mettre le code ci-dessous
Code VB:
Option Explicit
Public WithEvents CheckCs As MSForms.CheckBox

Private Sub CheckCs_Click()
Dim a$, b$
a = CheckCs.Name
b = Sheets(CheckCs.Parent.Name).Name
MsgBox "Vous avec cliqué " & a & vbCrLf & " dans la feuille : " & b, vbInformation, "TEST"
End Sub




Dans un module standard, mettre le code ci-dessous
Code VB:
Option Explicit
Public Coll As Collection
Public Sub InitCls()
Dim ws As Worksheet, obj As OLEObject, clsCB As Classe1
Set clsCB = Nothing
Set Coll = New Collection
For Each ws In Worksheets
For Each obj In ws.OLEObjects
If TypeOf obj.Object Is MSForms.CheckBox Then
Set clsCB = New Classe1
Set clsCB.CheckCs = obj.Object
Coll.Add clsCB
End If
Next obj
Next ws
End Sub




Dans ThisWorkBook_Open(), (ou dans un module si tu lances manuellement InitCls)
Code VB:
Private Sub Workbook_Open()
Call InitCls
End Sub




Pour tester, dans un classuer avec 3 feuilles (ou plus), insères N CheckBoxs, et aprés avoir copié les codes ci-dessus aux endroits ou il faut et avoir lancer InitCls, cliques sur les CheckBoxs, de chaque feuille

(Test OK sur mon PC)
 

Si...

XLDnaute Barbatruc
Re : Lancement macro par checkbox(es)

salut

Un exemple d’utilisation de caractères spéciaux pour éviter une prolifération de boutons (actifs ou pas).
Dans ThisWorBook
Code:
Option Explicit
Private Sub Workbook_SheetSelectionChange(ByVal O As Object, ByVal R As Range)
  Dim Dl As Long, C As Range
  If R.Count > 1 Then Exit Sub
  Dl = [A65000].End(xlUp).Row
  If Intersect(R, Range("E5:I" & Dl)) Is Nothing Then Exit Sub
  If R <> "¨" And R <> "þ" Then Exit Sub
  R.Interior.ColorIndex = xlNone
  R = IIf(R = "¨", "þ", "¨")
  For Each C In Range("K11:K" & Dl)
    If R = "þ" And C = "x" Then R.Interior.ColorIndex = 6
  Next
  Range("A" & Dl).Select
End Sub
 

Pièces jointes

  • Cases à cocher (WingDings).xls
    46 KB · Affichages: 51

NeMoS

XLDnaute Junior
Re : Lancement macro par checkbox(es)

Bonjour à tous,

Et merci pour vos réponses.

Staple1600 :
Chapeau bas :)...ça marche super bien. J'ai fait un test tel quel et cela fonctionne parfaitement bien. Il ne me reste plus qu'à remplacer le code test par un code "utile" comme tu disais ;).
Donc en plus de pouvoir faire exactement ce que je voulais, j'ai appris plein de trucs alors encore une fois un grand merci

Si...
J'ai testé aussi et pareil, cela fonctionne bien. En revanche tu utilises des checkbox formulaire, je vais essayer avec des ActiveX (j'avoue que l'idée de changer toutes les checkbox me freine un peu...:p ).
Mais dans tous les cas, je garde tes infos pour la prochaine fois !

Merci encore à tous les deux pour votre aide

Excellente journée

NeMoS
 

Si...

XLDnaute Barbatruc
Re : Lancement macro par checkbox(es)

Re

petite mise au point
Si...
J'ai testé aussi et pareil, cela fonctionne bien. En revanche tu utilises des checkbox formulaire...
Non et...

c'est justement l'intérêt de la chose : il n'y aura plus de cases à cocher.

Une petite macro peut te permettre de les supprimer d'un coup. Il suffit alors de copier le caractère spécial dans toutes les cellules concernées.
Regarde la pièce jointe 918876
 

Pièces jointes

  • Cases WingDings.jpg
    Cases WingDings.jpg
    69.1 KB · Affichages: 62

Discussions similaires

Réponses
11
Affichages
297

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87