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

case à cocher couplée à dénombrer

5 réponses
Avatar
DragonflyB
Bonjour,

Sous excel, j'ai un fichier concernant un suivi d'activité.

- dans une colonne (B) j'ai le type d'activité : 7 possibilités, dont une :
"LDP"
- dans une autre colonne (J) , j'ai une case à cocher si un critère est
présent quelle que soit l'activité

J'aimerais, dans la colonne L, afficher "1" si l'activité en colonne B est
LDP ET si la case de la colonne J est cochée, rien sinon, afin de dénombrer
le nombre de lignes qui couplent ces deux critères.


J'ai pensé à deux choses :
- dans la colonne L :
SI(ET(Caseàcocher2=vrai;B3="LDP");1;"")

- une macro associée à la case à cocher :
Sub Caseàcocher2_QuandClic()
If Caseàcocher2 = True And [b3] = "LDP" Then [l3] = 1 Else [l3] = ""
End Sub

Les deux solutions me donnent des erreurs de nom.

Pourriez-vous m'aider s'il vous plait ?
Merci d'avance !

5 réponses

Avatar
MichDenis
Bonjour,

En supposant que tu as utilisé un contrôle ("case à cocher") émanant
de la barre d'outils "Formulaire"

Un clic droit sur le contrôle / commande "format de contrôle" / onglet "Contrôle"
et tu définis la cellule liée.

En supposant que la cellule liée choisie est : A1
tu peux utiliser une formule comme ceci :
SI(ET(A1=vrai;B3="LDP");1;"")






"DragonflyB" a écrit dans le message de groupe de
discussion :
Bonjour,

Sous excel, j'ai un fichier concernant un suivi d'activité.

- dans une colonne (B) j'ai le type d'activité : 7 possibilités, dont une :
"LDP"
- dans une autre colonne (J) , j'ai une case à cocher si un critère est
présent quelle que soit l'activité

J'aimerais, dans la colonne L, afficher "1" si l'activité en colonne B est
LDP ET si la case de la colonne J est cochée, rien sinon, afin de dénombrer
le nombre de lignes qui couplent ces deux critères.

Par macro, tu pourrais utiliser quelque chose comme ceci en adaptant
le nom de la feuille et le nom du contrôle.

'------------------------------------------
Sub Caseàcocher2_Clic()
Dim X As Integer
With Worksheets("Feuil1")
X = .Shapes("Case à cocher 2").OLEFormat.Object.Value
If X = 1 And .Range("B3") = "LDP" Then
.Range("l3") = 1
Else
.Range("l3") = ""
End If
End With
'------------------------------------------





J'ai pensé à deux choses :
- dans la colonne L :
SI(ET(Caseàcocher2=vrai;B3="LDP");1;"")

- une macro associée à la case à cocher :
Sub Caseàcocher2_QuandClic()
If Caseàcocher2 = True And [b3] = "LDP" Then [l3] = 1 Else [l3] = ""
End Sub

Les deux solutions me donnent des erreurs de nom.

Pourriez-vous m'aider s'il vous plait ?
Merci d'avance !
Avatar
DragonflyB
Bonjour, merci beaucoup pour cette réponse rapide !

J'ai adopté la première solution, en liant la case en question
(effectivement, ça parait logique quand on le fait... je me sens stupide !)
Ca fonctionne parfaitement !

Par contre, comme j'aimerais que cela soit valable pour environ 1000-1500
lignes de mon classeur, comment procéder ? (j'abuse de vos connaissances...)

En effet, lorsque je copie / colle la ligne en question (avec la cellule
A$1$ liée par exemple), toutes les cases à cocher des lignes collées se
réfèrent à cette cellule A1 !

J'ai alors essayé en liant la cellule "A1" sans les "$", mais c'est la même
chose... et je me vois mal reprendre toutes les cases à cocher de ma feuille
(1000-1500 cases à cocher !), pour les lier aux bonnes cellules (genre A2,
puis A3, etc.)

Avez vous une solution ? Peut être avec un collage spécial ?

Merci d'avance pour votre aide !




"MichDenis" a écrit :

Bonjour,

En supposant que tu as utilisé un contrôle ("case à cocher") émanant
de la barre d'outils "Formulaire"

Un clic droit sur le contrôle / commande "format de contrôle" / onglet "Contrôle"
et tu définis la cellule liée.

En supposant que la cellule liée choisie est : A1
tu peux utiliser une formule comme ceci :
SI(ET(A1=vrai;B3="LDP");1;"")






"DragonflyB" a écrit dans le message de groupe de
discussion :
Bonjour,

Sous excel, j'ai un fichier concernant un suivi d'activité.

- dans une colonne (B) j'ai le type d'activité : 7 possibilités, dont une :
"LDP"
- dans une autre colonne (J) , j'ai une case à cocher si un critère est
présent quelle que soit l'activité

J'aimerais, dans la colonne L, afficher "1" si l'activité en colonne B est
LDP ET si la case de la colonne J est cochée, rien sinon, afin de dénombrer
le nombre de lignes qui couplent ces deux critères.

Par macro, tu pourrais utiliser quelque chose comme ceci en adaptant
le nom de la feuille et le nom du contrôle.

'------------------------------------------
Sub Caseàcocher2_Clic()
Dim X As Integer
With Worksheets("Feuil1")
X = .Shapes("Case à cocher 2").OLEFormat.Object.Value
If X = 1 And .Range("B3") = "LDP" Then
.Range("l3") = 1
Else
.Range("l3") = ""
End If
End With
'------------------------------------------





J'ai pensé à deux choses :
- dans la colonne L :
SI(ET(Caseàcocher2=vrai;B3="LDP");1;"")

- une macro associée à la case à cocher :
Sub Caseàcocher2_QuandClic()
If Caseàcocher2 = True And [b3] = "LDP" Then [l3] = 1 Else [l3] = ""
End Sub

Les deux solutions me donnent des erreurs de nom.

Pourriez-vous m'aider s'il vous plait ?
Merci d'avance !




Avatar
MichDenis
Voici une procédure qui pourrait t'inspirer :

Sur des contrôles "CheckBox" émanant de la barre d'outils "Formulaire"

J'ai supposé :
A ) que le travail se faisait dans la "Feuil1"
B ) que tous les CheckBox étaient situés en colonne B:B
C ) que les cellules liées étaient les cellules de la colonne A:A
sur la même ligne où les checkbox étaient situés.

À toi d'adapter !

'---------------------------------------
Sub test()
Dim Sh As Shape, Adr As String

With Worksheets("Feuil1")
For Each Sh In .Shapes
If TypeName(Sh.OLEFormat.Object) = "CheckBox" Then
Adr = Sh.TopLeftCell.Address
If Not Intersect(Range(Adr), _
.Range("B:B")) Is Nothing Then
Sh.OLEFormat.Object.LinkedCell = _
.Range(Adr).Offset(, -1).Address
End If
End If
Next
End With

End Sub
'---------------------------------------




"DragonflyB" a écrit dans le message de groupe de
discussion :
Bonjour, merci beaucoup pour cette réponse rapide !

J'ai adopté la première solution, en liant la case en question
(effectivement, ça parait logique quand on le fait... je me sens stupide !)
Ca fonctionne parfaitement !

Par contre, comme j'aimerais que cela soit valable pour environ 1000-1500
lignes de mon classeur, comment procéder ? (j'abuse de vos connaissances...)

En effet, lorsque je copie / colle la ligne en question (avec la cellule
A$1$ liée par exemple), toutes les cases à cocher des lignes collées se
réfèrent à cette cellule A1 !

J'ai alors essayé en liant la cellule "A1" sans les "$", mais c'est la même
chose... et je me vois mal reprendre toutes les cases à cocher de ma feuille
(1000-1500 cases à cocher !), pour les lier aux bonnes cellules (genre A2,
puis A3, etc.)

Avez vous une solution ? Peut être avec un collage spécial ?

Merci d'avance pour votre aide !




"MichDenis" a écrit :

Bonjour,

En supposant que tu as utilisé un contrôle ("case à cocher") émanant
de la barre d'outils "Formulaire"

Un clic droit sur le contrôle / commande "format de contrôle" / onglet "Contrôle"
et tu définis la cellule liée.

En supposant que la cellule liée choisie est : A1
tu peux utiliser une formule comme ceci :
SI(ET(A1=vrai;B3="LDP");1;"")






"DragonflyB" a écrit dans le message de groupe de
discussion :
Bonjour,

Sous excel, j'ai un fichier concernant un suivi d'activité.

- dans une colonne (B) j'ai le type d'activité : 7 possibilités, dont une :
"LDP"
- dans une autre colonne (J) , j'ai une case à cocher si un critère est
présent quelle que soit l'activité

J'aimerais, dans la colonne L, afficher "1" si l'activité en colonne B est
LDP ET si la case de la colonne J est cochée, rien sinon, afin de dénombrer
le nombre de lignes qui couplent ces deux critères.

Par macro, tu pourrais utiliser quelque chose comme ceci en adaptant
le nom de la feuille et le nom du contrôle.

'------------------------------------------
Sub Caseàcocher2_Clic()
Dim X As Integer
With Worksheets("Feuil1")
X = .Shapes("Case à cocher 2").OLEFormat.Object.Value
If X = 1 And .Range("B3") = "LDP" Then
.Range("l3") = 1
Else
.Range("l3") = ""
End If
End With
'------------------------------------------





J'ai pensé à deux choses :
- dans la colonne L :
SI(ET(Caseàcocher2=vrai;B3="LDP");1;"")

- une macro associée à la case à cocher :
Sub Caseàcocher2_QuandClic()
If Caseàcocher2 = True And [b3] = "LDP" Then [l3] = 1 Else [l3] = ""
End Sub

Les deux solutions me donnent des erreurs de nom.

Pourriez-vous m'aider s'il vous plait ?
Merci d'avance !




Avatar
DragonflyB
Bonjour,

wouaou !!! Jamais j'aurais fait ça ! Ca fonctionne pas mal à la chose près
que ça me lie la cellule de la ligne précédente... Je m'explique, mes cases à
cocher se trouvent en colonne J, et je veux justement lier les cellules de la
colonne J.
Précision : ma feuille comporte 2 lignes d'en tête.

Par exemple, la cellule J3 doit être liée à la case à coher située sur cette
cellule J3, or, par la macro suivante, la case à cocher située en cellule J3
est liée à la cellule J2... J'espère me faire bien comprendre ! Et comme je
ne comprends absolument rien à cette macro, je ne sais que modifier...
Voyez-vous ce qui cloche ?

Sub test()
Dim Sh As Shape, Adr As String

With Worksheets("Activité des salariés Juill 09")
For Each Sh In .Shapes
If TypeName(Sh.OLEFormat.Object) = "CheckBox" Then
Adr = Sh.TopLeftCell.Address
If Not Intersect(Range(Adr), _
.Range("J:J")) Is Nothing Then
Sh.OLEFormat.Object.LinkedCell = _
.Range(Adr).Offset(, 0).Address
End If
End If
Next
End With

End Sub


"MichDenis" a écrit :

Voici une procédure qui pourrait t'inspirer :

Sur des contrôles "CheckBox" émanant de la barre d'outils "Formulaire"

J'ai supposé :
A ) que le travail se faisait dans la "Feuil1"
B ) que tous les CheckBox étaient situés en colonne B:B
C ) que les cellules liées étaient les cellules de la colonne A:A
sur la même ligne où les checkbox étaient situés.

À toi d'adapter !

'---------------------------------------
Sub test()
Dim Sh As Shape, Adr As String

With Worksheets("Feuil1")
For Each Sh In .Shapes
If TypeName(Sh.OLEFormat.Object) = "CheckBox" Then
Adr = Sh.TopLeftCell.Address
If Not Intersect(Range(Adr), _
.Range("B:B")) Is Nothing Then
Sh.OLEFormat.Object.LinkedCell = _
.Range(Adr).Offset(, -1).Address
End If
End If
Next
End With

End Sub
'---------------------------------------




"DragonflyB" a écrit dans le message de groupe de
discussion :
Bonjour, merci beaucoup pour cette réponse rapide !

J'ai adopté la première solution, en liant la case en question
(effectivement, ça parait logique quand on le fait... je me sens stupide !)
Ca fonctionne parfaitement !

Par contre, comme j'aimerais que cela soit valable pour environ 1000-1500
lignes de mon classeur, comment procéder ? (j'abuse de vos connaissances...)

En effet, lorsque je copie / colle la ligne en question (avec la cellule
A$1$ liée par exemple), toutes les cases à cocher des lignes collées se
réfèrent à cette cellule A1 !

J'ai alors essayé en liant la cellule "A1" sans les "$", mais c'est la même
chose... et je me vois mal reprendre toutes les cases à cocher de ma feuille
(1000-1500 cases à cocher !), pour les lier aux bonnes cellules (genre A2,
puis A3, etc.)

Avez vous une solution ? Peut être avec un collage spécial ?

Merci d'avance pour votre aide !




"MichDenis" a écrit :

> Bonjour,
>
> En supposant que tu as utilisé un contrôle ("case à cocher") émanant
> de la barre d'outils "Formulaire"
>
> Un clic droit sur le contrôle / commande "format de contrôle" / onglet "Contrôle"
> et tu définis la cellule liée.
>
> En supposant que la cellule liée choisie est : A1
> tu peux utiliser une formule comme ceci :
> SI(ET(A1=vrai;B3="LDP");1;"")
>
>
>
>
>
>
> "DragonflyB" a écrit dans le message de groupe de
> discussion :
> Bonjour,
>
> Sous excel, j'ai un fichier concernant un suivi d'activité.
>
> - dans une colonne (B) j'ai le type d'activité : 7 possibilités, dont une :
> "LDP"
> - dans une autre colonne (J) , j'ai une case à cocher si un critère est
> présent quelle que soit l'activité
>
> J'aimerais, dans la colonne L, afficher "1" si l'activité en colonne B est
> LDP ET si la case de la colonne J est cochée, rien sinon, afin de dénombrer
> le nombre de lignes qui couplent ces deux critères.
>
> Par macro, tu pourrais utiliser quelque chose comme ceci en adaptant
> le nom de la feuille et le nom du contrôle.
>
> '------------------------------------------
> Sub Caseàcocher2_Clic()
> Dim X As Integer
> With Worksheets("Feuil1")
> X = .Shapes("Case à cocher 2").OLEFormat.Object.Value
> If X = 1 And .Range("B3") = "LDP" Then
> .Range("l3") = 1
> Else
> .Range("l3") = ""
> End If
> End With
> '------------------------------------------
>
>
>
>
>
> J'ai pensé à deux choses :
> - dans la colonne L :
> SI(ET(Caseàcocher2=vrai;B3="LDP");1;"")
>
> - une macro associée à la case à cocher :
> Sub Caseàcocher2_QuandClic()
> If Caseàcocher2 = True And [b3] = "LDP" Then [l3] = 1 Else [l3] = ""
> End Sub
>
> Les deux solutions me donnent des erreurs de nom.
>
> Pourriez-vous m'aider s'il vous plait ?
> Merci d'avance !
>
>



Avatar
DragonflyB
En fait, après quelques minutes de réflexion, j'ai aboutit à l'idée que votre

.Range(Adr).Offset(, -1).Address

se référait à des coordonnées de type (ligne de la cellule à lier par
rapport à la case à coher, colonne de la cellule à lier par rapport à la case
à cocher), j'ai donc modifié :

Sub test()
Dim Sh As Shape, Adr As String

With Worksheets("Activité des salariés Juill 09")
For Each Sh In .Shapes
If TypeName(Sh.OLEFormat.Object) = "CheckBox" Then
Adr = Sh.TopLeftCell.Address
If Not Intersect(Range(Adr), _
.Range("J:J")) Is Nothing Then
Sh.OLEFormat.Object.LinkedCell = _
.Range(Adr).Offset(1, 0).Address
End If
End If
Next
End With

End Sub

Par rapport à mon problème, et j'obtiens exactement ce que je veux !!! Merci
beaucoup beaucoup pour votre aide précieuse !!!


"DragonflyB" a écrit :

Bonjour,

wouaou !!! Jamais j'aurais fait ça ! Ca fonctionne pas mal à la chose près
que ça me lie la cellule de la ligne précédente... Je m'explique, mes cases à
cocher se trouvent en colonne J, et je veux justement lier les cellules de la
colonne J.
Précision : ma feuille comporte 2 lignes d'en tête.

Par exemple, la cellule J3 doit être liée à la case à coher située sur cette
cellule J3, or, par la macro suivante, la case à cocher située en cellule J3
est liée à la cellule J2... J'espère me faire bien comprendre ! Et comme je
ne comprends absolument rien à cette macro, je ne sais que modifier...
Voyez-vous ce qui cloche ?

Sub test()
Dim Sh As Shape, Adr As String

With Worksheets("Activité des salariés Juill 09")
For Each Sh In .Shapes
If TypeName(Sh.OLEFormat.Object) = "CheckBox" Then
Adr = Sh.TopLeftCell.Address
If Not Intersect(Range(Adr), _
.Range("J:J")) Is Nothing Then
Sh.OLEFormat.Object.LinkedCell = _
.Range(Adr).Offset(, 0).Address
End If
End If
Next
End With

End Sub


"MichDenis" a écrit :

> Voici une procédure qui pourrait t'inspirer :
>
> Sur des contrôles "CheckBox" émanant de la barre d'outils "Formulaire"
>
> J'ai supposé :
> A ) que le travail se faisait dans la "Feuil1"
> B ) que tous les CheckBox étaient situés en colonne B:B
> C ) que les cellules liées étaient les cellules de la colonne A:A
> sur la même ligne où les checkbox étaient situés.
>
> À toi d'adapter !
>
> '---------------------------------------
> Sub test()
> Dim Sh As Shape, Adr As String
>
> With Worksheets("Feuil1")
> For Each Sh In .Shapes
> If TypeName(Sh.OLEFormat.Object) = "CheckBox" Then
> Adr = Sh.TopLeftCell.Address
> If Not Intersect(Range(Adr), _
> .Range("B:B")) Is Nothing Then
> Sh.OLEFormat.Object.LinkedCell = _
> .Range(Adr).Offset(, -1).Address
> End If
> End If
> Next
> End With
>
> End Sub
> '---------------------------------------
>
>
>
>
> "DragonflyB" a écrit dans le message de groupe de
> discussion :
> Bonjour, merci beaucoup pour cette réponse rapide !
>
> J'ai adopté la première solution, en liant la case en question
> (effectivement, ça parait logique quand on le fait... je me sens stupide !)
> Ca fonctionne parfaitement !
>
> Par contre, comme j'aimerais que cela soit valable pour environ 1000-1500
> lignes de mon classeur, comment procéder ? (j'abuse de vos connaissances...)
>
> En effet, lorsque je copie / colle la ligne en question (avec la cellule
> A$1$ liée par exemple), toutes les cases à cocher des lignes collées se
> réfèrent à cette cellule A1 !
>
> J'ai alors essayé en liant la cellule "A1" sans les "$", mais c'est la même
> chose... et je me vois mal reprendre toutes les cases à cocher de ma feuille
> (1000-1500 cases à cocher !), pour les lier aux bonnes cellules (genre A2,
> puis A3, etc.)
>
> Avez vous une solution ? Peut être avec un collage spécial ?
>
> Merci d'avance pour votre aide !
>
>
>
>
> "MichDenis" a écrit :
>
> > Bonjour,
> >
> > En supposant que tu as utilisé un contrôle ("case à cocher") émanant
> > de la barre d'outils "Formulaire"
> >
> > Un clic droit sur le contrôle / commande "format de contrôle" / onglet "Contrôle"
> > et tu définis la cellule liée.
> >
> > En supposant que la cellule liée choisie est : A1
> > tu peux utiliser une formule comme ceci :
> > SI(ET(A1=vrai;B3="LDP");1;"")
> >
> >
> >
> >
> >
> >
> > "DragonflyB" a écrit dans le message de groupe de
> > discussion :
> > Bonjour,
> >
> > Sous excel, j'ai un fichier concernant un suivi d'activité.
> >
> > - dans une colonne (B) j'ai le type d'activité : 7 possibilités, dont une :
> > "LDP"
> > - dans une autre colonne (J) , j'ai une case à cocher si un critère est
> > présent quelle que soit l'activité
> >
> > J'aimerais, dans la colonne L, afficher "1" si l'activité en colonne B est
> > LDP ET si la case de la colonne J est cochée, rien sinon, afin de dénombrer
> > le nombre de lignes qui couplent ces deux critères.
> >
> > Par macro, tu pourrais utiliser quelque chose comme ceci en adaptant
> > le nom de la feuille et le nom du contrôle.
> >
> > '------------------------------------------
> > Sub Caseàcocher2_Clic()
> > Dim X As Integer
> > With Worksheets("Feuil1")
> > X = .Shapes("Case à cocher 2").OLEFormat.Object.Value
> > If X = 1 And .Range("B3") = "LDP" Then
> > .Range("l3") = 1
> > Else
> > .Range("l3") = ""
> > End If
> > End With
> > '------------------------------------------
> >
> >
> >
> >
> >
> > J'ai pensé à deux choses :
> > - dans la colonne L :
> > SI(ET(Caseàcocher2=vrai;B3="LDP");1;"")
> >
> > - une macro associée à la case à cocher :
> > Sub Caseàcocher2_QuandClic()
> > If Caseàcocher2 = True And [b3] = "LDP" Then [l3] = 1 Else [l3] = ""
> > End Sub
> >
> > Les deux solutions me donnent des erreurs de nom.
> >
> > Pourriez-vous m'aider s'il vous plait ?
> > Merci d'avance !
> >
> >
>