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

Case à cocher

6 réponses
Avatar
GGAL
Bonjour,


Sur une feuille j'ai une case à cocher et la cellule liée A1, j'associe une
macro qui fait par exemple :

Sub Action()
If Range("A1") = True Then
Range("C1") = Range("B1") * 2
Else
Range("A1") = False
Range("C1") = 0
End If
End Sub

Je voudrais appliquer la même procédure pour 30 cases à cocher de A1:A30,
mais comment faire l'indexation ?

Merci d'avance,


GGAL

6 réponses

Avatar
Daniel.C
Bonjour.

Sub Action()
For Each c In [A1:A30]
If c = True Then
c.Offset(, 2).Value = c.Offset(, 1).Value * 2
Else
c.Value = False
c.Offset(, 2).Value = 0
End If
Next c
End Sub

Cordialement.
Daniel

Bonjour,


Sur une feuille j'ai une case à cocher et la cellule liée A1, j'associe une
macro qui fait par exemple :

Sub Action()
If Range("A1") = True Then
Range("C1") = Range("B1") * 2
Else
Range("A1") = False
Range("C1") = 0
End If
End Sub

Je voudrais appliquer la même procédure pour 30 cases à cocher de A1:A30,
mais comment faire l'indexation ?

Merci d'avance,


GGAL


Avatar
GGAL
Merci beaucoup,

GGAL

"Daniel.C" a écrit :

Bonjour.

Sub Action()
For Each c In [A1:A30]
If c = True Then
c.Offset(, 2).Value = c.Offset(, 1).Value * 2
Else
c.Value = False
c.Offset(, 2).Value = 0
End If
Next c
End Sub

Cordialement.
Daniel

> Bonjour,
>
>
> Sur une feuille j'ai une case à cocher et la cellule liée A1, j'associe une
> macro qui fait par exemple :
>
> Sub Action()
> If Range("A1") = True Then
> Range("C1") = Range("B1") * 2
> Else
> Range("A1") = False
> Range("C1") = 0
> End If
> End Sub
>
> Je voudrais appliquer la même procédure pour 30 cases à cocher de A1:A30,
> mais comment faire l'indexation ?
>
> Merci d'avance,
>
>
> GGAL





Avatar
michdenis
Juste pour le plaisir, en utilisant les CheckBox
plutôt que leur cellule liée...
J'ai supposé que tu n'avais que ces 30 checkbox
dans ta feuille :
Ce code est dans la feuille module où l'action se déroule.
'--------------------------------
Sub test()
Dim Sh As Shape,`x As Object
For Each Sh In Shapes
Set x = Sh.OLEFormat.Object
Select Case TypeName(x)
Case Is = "CheckBox"
With x
If .Value = 1 Then
Range(.LinkedCell).Offset(, 2) = _
Range(.LinkedCell).Offset(, 2) * 2
Else
.Value = False
Range(.LinkedCell).Offset(, 2).Value = 0
End If
End With
End Select
Next
End Sub
'--------------------------------

Et si on voulait profiter des "vieilles affaires" qui trainent
pour des raisons de compatibilité on pourrait écrire la macro
de cette manière :
Ce code est dans la feuille module où l'action se déroule.
'--------------------------------
Sub test1()
Dim X As CheckBox
For Each X In CheckBoxes
With X
If .Value = 1 Then
Range(.LinkedCell).Offset(, 2) = _
Range(.LinkedCell).Offset(, 2) * 2
Else
.Value = False
Range(.LinkedCell).Offset(, 2).Value = 0
End If
End With
Next
End Sub
'--------------------------------



"GGAL" a écrit dans le message de groupe de discussion :

Bonjour,


Sur une feuille j'ai une case à cocher et la cellule liée A1, j'associe une
macro qui fait par exemple :

Sub Action()
If Range("A1") = True Then
Range("C1") = Range("B1") * 2
Else
Range("A1") = False
Range("C1") = 0
End If
End Sub

Je voudrais appliquer la même procédure pour 30 cases à cocher de A1:A30,
mais comment faire l'indexation ?

Merci d'avance,


GGAL
Avatar
GGAL
OK pour ces réponses.
Dans les deux cas on balaie l'ensemble des cellules ou des Checkbox. Et
quand les objets sont nombreux, on sent que ça mouline !
Effectivement, j'ai d'autres Checkbox dans la feuille, ce qui complique le
problème avec les méthodes de michdenis.
Pourrait-on agir directement sur le nom des Checkbox ? Celles-ci étant
renommées et indicées :
Checkbox1
...
Checkbox30


GGAL


"michdenis" a écrit :

Juste pour le plaisir, en utilisant les CheckBox
plutôt que leur cellule liée...
J'ai supposé que tu n'avais que ces 30 checkbox
dans ta feuille :
Ce code est dans la feuille module où l'action se déroule.
'--------------------------------
Sub test()
Dim Sh As Shape,`x As Object
For Each Sh In Shapes
Set x = Sh.OLEFormat.Object
Select Case TypeName(x)
Case Is = "CheckBox"
With x
If .Value = 1 Then
Range(.LinkedCell).Offset(, 2) = _
Range(.LinkedCell).Offset(, 2) * 2
Else
.Value = False
Range(.LinkedCell).Offset(, 2).Value = 0
End If
End With
End Select
Next
End Sub
'--------------------------------

Et si on voulait profiter des "vieilles affaires" qui trainent
pour des raisons de compatibilité on pourrait écrire la macro
de cette manière :
Ce code est dans la feuille module où l'action se déroule.
'--------------------------------
Sub test1()
Dim X As CheckBox
For Each X In CheckBoxes
With X
If .Value = 1 Then
Range(.LinkedCell).Offset(, 2) = _
Range(.LinkedCell).Offset(, 2) * 2
Else
.Value = False
Range(.LinkedCell).Offset(, 2).Value = 0
End If
End With
Next
End Sub
'--------------------------------



"GGAL" a écrit dans le message de groupe de discussion :

Bonjour,


Sur une feuille j'ai une case à cocher et la cellule liée A1, j'associe une
macro qui fait par exemple :

Sub Action()
If Range("A1") = True Then
Range("C1") = Range("B1") * 2
Else
Range("A1") = False
Range("C1") = 0
End If
End Sub

Je voudrais appliquer la même procédure pour 30 cases à cocher de A1:A30,
mais comment faire l'indexation ?

Merci d'avance,


GGAL



Avatar
michdenis
Choisis l'une ou l'autre
Dans les exemples suivants, j'ai supposé que
la racine des noms des checkbox débutait par "denis"

'----------------------------
Sub test()
Dim Sh As Shape, x As Object
Application.EnableEvents = False
For Each Sh In Shapes
Set x = Sh.OLEFormat.Object
If LCase(Left(x.Name, 5)) = "denis" Then
Select Case TypeName(x)
Case Is = "CheckBox"
With x
If .Value = 1 Then
Range(.LinkedCell).Offset(, 2) = _
Range(.LinkedCell).Offset(, 1) * 2
Else
.Value = False
Range(.LinkedCell).Offset(, 2).Value = 0
End If
End With
End Select
End If
Next
Application.EnableEvents = True
End Sub
'----------------------------
Sub test1()
Dim x As CheckBox
Application.EnableEvents = False
For Each x In CheckBoxes
If LCase(Left(x.Name, 5)) = "denis" Then
With x
If .Value = 1 Then
Range(.LinkedCell).Offset(, 2) = _
Range(.LinkedCell).Offset(, 1) * 2
Else
.Value = False
Range(.LinkedCell).Offset(, 2).Value = 0
End If
End With
End If
Next
Application.EnableEvents = True
End Sub
'----------------------------


"GGAL" a écrit dans le message de groupe de discussion :

OK pour ces réponses.
Dans les deux cas on balaie l'ensemble des cellules ou des Checkbox. Et
quand les objets sont nombreux, on sent que ça mouline !
Effectivement, j'ai d'autres Checkbox dans la feuille, ce qui complique le
problème avec les méthodes de michdenis.
Pourrait-on agir directement sur le nom des Checkbox ? Celles-ci étant
renommées et indicées :
Checkbox1
...
Checkbox30


GGAL


"michdenis" a écrit :

Juste pour le plaisir, en utilisant les CheckBox
plutôt que leur cellule liée...
J'ai supposé que tu n'avais que ces 30 checkbox
dans ta feuille :
Ce code est dans la feuille module où l'action se déroule.
'--------------------------------
Sub test()
Dim Sh As Shape,`x As Object
For Each Sh In Shapes
Set x = Sh.OLEFormat.Object
Select Case TypeName(x)
Case Is = "CheckBox"
With x
If .Value = 1 Then
Range(.LinkedCell).Offset(, 2) = _
Range(.LinkedCell).Offset(, 2) * 2
Else
.Value = False
Range(.LinkedCell).Offset(, 2).Value = 0
End If
End With
End Select
Next
End Sub
'--------------------------------

Et si on voulait profiter des "vieilles affaires" qui trainent
pour des raisons de compatibilité on pourrait écrire la macro
de cette manière :
Ce code est dans la feuille module où l'action se déroule.
'--------------------------------
Sub test1()
Dim X As CheckBox
For Each X In CheckBoxes
With X
If .Value = 1 Then
Range(.LinkedCell).Offset(, 2) = _
Range(.LinkedCell).Offset(, 2) * 2
Else
.Value = False
Range(.LinkedCell).Offset(, 2).Value = 0
End If
End With
Next
End Sub
'--------------------------------



"GGAL" a écrit dans le message de groupe de discussion
:

Bonjour,


Sur une feuille j'ai une case à cocher et la cellule liée A1, j'associe une
macro qui fait par exemple :

Sub Action()
If Range("A1") = True Then
Range("C1") = Range("B1") * 2
Else
Range("A1") = False
Range("C1") = 0
End If
End Sub

Je voudrais appliquer la même procédure pour 30 cases à cocher de A1:A30,
mais comment faire l'indexation ?

Merci d'avance,


GGAL



Avatar
GGAL
Extra,

Merci beaucoup.


GGAL

"michdenis" a écrit :

Choisis l'une ou l'autre
Dans les exemples suivants, j'ai supposé que
la racine des noms des checkbox débutait par "denis"

'----------------------------
Sub test()
Dim Sh As Shape, x As Object
Application.EnableEvents = False
For Each Sh In Shapes
Set x = Sh.OLEFormat.Object
If LCase(Left(x.Name, 5)) = "denis" Then
Select Case TypeName(x)
Case Is = "CheckBox"
With x
If .Value = 1 Then
Range(.LinkedCell).Offset(, 2) = _
Range(.LinkedCell).Offset(, 1) * 2
Else
.Value = False
Range(.LinkedCell).Offset(, 2).Value = 0
End If
End With
End Select
End If
Next
Application.EnableEvents = True
End Sub
'----------------------------
Sub test1()
Dim x As CheckBox
Application.EnableEvents = False
For Each x In CheckBoxes
If LCase(Left(x.Name, 5)) = "denis" Then
With x
If .Value = 1 Then
Range(.LinkedCell).Offset(, 2) = _
Range(.LinkedCell).Offset(, 1) * 2
Else
.Value = False
Range(.LinkedCell).Offset(, 2).Value = 0
End If
End With
End If
Next
Application.EnableEvents = True
End Sub
'----------------------------


"GGAL" a écrit dans le message de groupe de discussion :

OK pour ces réponses.
Dans les deux cas on balaie l'ensemble des cellules ou des Checkbox. Et
quand les objets sont nombreux, on sent que ça mouline !
Effectivement, j'ai d'autres Checkbox dans la feuille, ce qui complique le
problème avec les méthodes de michdenis.
Pourrait-on agir directement sur le nom des Checkbox ? Celles-ci étant
renommées et indicées :
Checkbox1
...
Checkbox30


GGAL


"michdenis" a écrit :

> Juste pour le plaisir, en utilisant les CheckBox
> plutôt que leur cellule liée...
> J'ai supposé que tu n'avais que ces 30 checkbox
> dans ta feuille :
> Ce code est dans la feuille module où l'action se déroule.
> '--------------------------------
> Sub test()
> Dim Sh As Shape,`x As Object
> For Each Sh In Shapes
> Set x = Sh.OLEFormat.Object
> Select Case TypeName(x)
> Case Is = "CheckBox"
> With x
> If .Value = 1 Then
> Range(.LinkedCell).Offset(, 2) = _
> Range(.LinkedCell).Offset(, 2) * 2
> Else
> .Value = False
> Range(.LinkedCell).Offset(, 2).Value = 0
> End If
> End With
> End Select
> Next
> End Sub
> '--------------------------------
>
> Et si on voulait profiter des "vieilles affaires" qui trainent
> pour des raisons de compatibilité on pourrait écrire la macro
> de cette manière :
> Ce code est dans la feuille module où l'action se déroule.
> '--------------------------------
> Sub test1()
> Dim X As CheckBox
> For Each X In CheckBoxes
> With X
> If .Value = 1 Then
> Range(.LinkedCell).Offset(, 2) = _
> Range(.LinkedCell).Offset(, 2) * 2
> Else
> .Value = False
> Range(.LinkedCell).Offset(, 2).Value = 0
> End If
> End With
> Next
> End Sub
> '--------------------------------
>
>
>
> "GGAL" a écrit dans le message de groupe de discussion
> :
>
> Bonjour,
>
>
> Sur une feuille j'ai une case à cocher et la cellule liée A1, j'associe une
> macro qui fait par exemple :
>
> Sub Action()
> If Range("A1") = True Then
> Range("C1") = Range("B1") * 2
> Else
> Range("A1") = False
> Range("C1") = 0
> End If
> End Sub
>
> Je voudrais appliquer la même procédure pour 30 cases à cocher de A1:A30,
> mais comment faire l'indexation ?
>
> Merci d'avance,
>
>
> GGAL
>