Case à cocher

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #18665671
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


GGAL
Le #18665751
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





michdenis
Le #18667061
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"
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
GGAL
Le #18681521
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"
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



michdenis
Le #18681481
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"
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" :

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



GGAL
Le #18681341
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"
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" > :
>
> 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
>


Publicité
Poster une réponse
Anonyme