Blocage sur CheckboxChange
Bonjour à tous
Programmeur très occasionnel, je rends service à un ami pour une interface de suivi de commandes
Chaque ligne du tableur contient 4 Checkbox pour réaliser le suivi des différentes étapes (Devis, Commandé, Reçu, Payé)
Je me retrouve avec 240 Checkbox, du coup j'ai optimisé tout ça avec une petite macro qui créer, renseigne et positionne correctement toutes les checkbox.
Function AjoutCheckBox(Colonne As String, j As Integer, i As Integer, k As Integer)
Dim cell As Range
'4 Colonnes à équiper, 1 indicateur de début j, et un indicateur de fin i
'j = 9 ' ma première ligne à considérer est la 9éme
' k est utilisé pour nommé les Checkbox dans l'ordre
For Each cell In Range(Colonne & j & ":" & Colonne & i)
With ActiveSheet.CheckBoxes.Add(cell.Left, _
cell.Top, cell.Width, cell.Height)
.LinkedCell = ("$" & Colonne & "$" & j)
.Name = "CheckBox_" & k
.Caption = ""
.Display3DShading = True
.OnAction = "CheckboxChange"
End With
j = j + 1
k = k + 1
Next
End FunctionAfin d'optimiser encore, et éviter de créer manuellement une macro derrière chaque Checkbox (240), je détecte le changement d'état de n'importe quelle CheckBox grâce à l'option .OnAction = "CheckboxChange". Le code que j'ai trouvé permet d'afficher un MsgBox, quelle que soit la CheckBox cochée, et ça marche nickel
Sub CheckboxChange()
MsgBox "Change"
End SubEt c'est là que je coince, parce que je ne trouve pas, avec ce CheckBoxChange() comment récupérer le .LinkedCell ou le .Name de la CheckBox que je viens de cocher.
Parce que du coup, c'est là que je dois traiter la Checkbox cochée et lancer un bout de code
Une aide éclairée serait la bienvenue, merci de vos suggestions
Ok, résolu
A la modification de l'état de la CheckBox, quelle qu'elle soit, le .OnAction va chercher une macro
Function AjoutCheckBox(Colonne As String, j As Integer, i As Integer, k As Integer)
Dim cell As Range
'4 Colonnes à équiper, 1 indicateur de début j, et un indicateur de fin i
'j = 9 ' ma première ligne à considérer est la 9éme
' k est utilisé pour nommé les Checkbox dans l'ordre
For Each cell In Range(Colonne & j & ":" & Colonne & i)
With ActiveSheet.CheckBoxes.Add(cell.Left, _
cell.Top, cell.Width, cell.Height)
.LinkedCell = ("$" & Colonne & "$" & j)
.Name = "CheckBox_" & k
.Caption = ""
.Display3DShading = True
.OnAction = "macro"
End With
j = j + 1
k = k + 1
Next
End FunctionEt la macro récupère le .Name et le et le .LinkedCell
Sub macro()
nom = Application.Caller
MsgBox nom
MsgBox ActiveSheet.Shapes(nom).TopLeftCell.Address
End Subbonjour,
essaie ceci
MsgBox "Change " & Application.Calleredit : je vois que tu avais déjà trouvé par toi-même