Interdire de cocher une cellule si une autre est cochée

Résolu/Fermé
logas - 11 août 2014 à 11:20
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 - 11 août 2014 à 16:00
Bonjour à tous,

Besoin d'un petit coup de main afin d'arranger cette macro que j'ai trouvé fort intéressante.



Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
temp = Array(" X", "")
If Not Application.Intersect(Target, Range("D4:D1048576, E4:E1048576 , F4:F1048576 , G4:G1048576 ")) Is Nothing Then
With Target
p = Application.Match(Target, temp, 0)
If Not IsError(p) Then
If p = UBound(temp) + 1 Then p = 0
Else
p = 0
End If
Target = temp(p)
Cancel = True
End With
End If
End Sub

Lorsque je double clic sur une cellule, cela me rajoute un X dans celle-ci.
J'ai donc défini les plages de valeurs ou je souhaite cocher les cellules.
Cependant je voudrais que lorsque la cellule F4 est cochée, la G4 ne puisse pas l'être et inversement..

Merci d'avance pour l'aide que vous pourrez m'apporter.

7 réponses

ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
Modifié par ccm81 le 11/08/2014 à 11:51
Bonjour

Un exemple (les constantes sont à adapter)

Const codeb = 4
Const cofin = 7
Const plage = "D4:G10"

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim ligne As Range, li As Long, co As Long
If Not Intersect(Target, Range(plage)) Is Nothing Then
li = Target.Row
co = Target.Column
Set ligne = ActiveSheet.Range(Cells(li, codeb + 2), Cells(li, cofin))
If co = codeb Or co = codeb + 1 Then
Target.Value = "X"
Else
If Application.WorksheetFunction.CountIf(ligne, "X") = 0 Then
Target.Value = "X"
End If
End If
Target.Offset(1, 0).Select
End If
End Sub

Cdlmnt
0
RE,

Merci pour la rapidité, cependant à quoi correspondent :

Const codeb = 4
et
Const cofin = 7

sachant que je veux l'interdiction de cocher D4 si E4 est coché et inversement sur toute la colonne ( de D4 à D1048576 et de E4 à E1048576) , et l'interdiction de cocher F4 si G4 est coché et inversement sur toute la colonne ( de F4 à F1048576 et de G4 à G1048576).

Pour Const plage j'ai renseigné ceci afin d'encadrer toute les plages:
Const plage = "D4:G1048576"

Egalement lorsque la case est coché lorsque l'on double clic dessus le "X" ne s'efface plus.

Merci de votre aide.
0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
Modifié par ccm81 le 11/08/2014 à 14:40
1. sachant que je veux l'interdiction de cocher D4 si E4 est coché et inversement sur toute la colonne
tu ne l'avais pas dit!
2. codeb et cofin sont la première et la dernière colonne de la plage
3. Egalement lorsque la case est coché lorsque l'on double clic dessus le "X" ne s'efface plus.
ça n'était pas le cas?
4. Pour Const plage j'ai renseigné ceci afin d'encadrer toute les plages:
Const plage = "D4:G1048576"

c'est ce qu'il fallait faire

5. cofin n'est plus d'actualité dans la version ci-dessous (la variable codeb est toujours la première colonne de la plage)

Const plage = "D4:G10"

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim ligne As Range, li As Long, co As Long, codeb As Long
If Not Intersect(Target, Range(plage)) Is Nothing Then
  li = Target.Row
  co = Target.Column
  codeb = Range(plage).Cells(1, 1).Column
  If co = codeb Or co = codeb + 1 Then
    Set ligne = ActiveSheet.Range(Cells(li, codeb), Cells(li, codeb + 1))
    If Application.WorksheetFunction.CountIf(ligne, "X") = 0 Then Target.Value = "X"
  Else
    Set ligne = ActiveSheet.Range(Cells(li, codeb + 2), Cells(li, codeb + 3))
    If Application.WorksheetFunction.CountIf(ligne, "X") = 0 Then Target.Value = "X"
  End If
  Target.Offset(1, 0).Select
End If
End Sub


Cdlmnt
0
En tapant ton code, cela fonctionne très bien.

Cependant, oui avant lorsqu'on double cliqué sur la cellule, le "X" disparaissait. Est-il possible de le faire fonctionner?

De plus comment faire pour centrer le "X" au milieu de la cellule, lorsque je tape plusieurs fois espace puis "X", la macros ne fonctionne plus...

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
11 août 2014 à 15:42
Comme ceci?
https://www.cjoint.com/?3HlpPBwtslw

Cordialement
0
Parfait c'est génial , ça fonctionne !!!

Merci. A++
0
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
11 août 2014 à 16:00
Parfait

Peux tu mettre le sujet à Résolu (en haut à droite de ton premier message)

Bonne fin de journée
0