Coche automatique - Option

Bonjour,

Je m'adresse à vous car je suis confronté à un problème concernant un fichier que je suis en train de créer.

J'ai créé un fichier excel sur lequel je souhaite cocher une option (2 sont disponibles). Si l'une d'entre elles est cochée, l'autre se décoche automatiquement.

J'ai réussi à l'adapter en dur en trouvant quelques trucs sur le net, et vu que j'ai commencé il n'y a pas longtemps, je sèche un peu pour le résultat final. Mon code "en dur" est le suivant :

   
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

    If Intersect(Range("B2"), Target) Is Nothing And _
        Intersect(Range("B10"), Target) Is Nothing Then
        Exit Sub
    End If

    If Target.MergeCells = True Then

    Else

        If ActiveCell.Value = "" Then
            ActiveCell.Value = "X"
        Else
            ActiveCell.Value = ""
        End If

    End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range, Cel As Range
Set Plage = Intersect(Target, Range("B2", "B10"))

If Plage Is Nothing Then Exit Sub

    For Each Cel In Plage
        If Cel[/quote] <> "" Then

            Select Case Cel.Row

                Case 2
                    Cel.Offset(8, 0).ClearContents
                Case 10
                    Cel.Offset(-8, 0).ClearContents

            End Select

        End If
    Next Cel
End Sub

Ce que j'aimerais faire maintenant, c'est faire que cette macro soit plus flexible, notamment en pouvant ajouter des lignes/colonnes sans impacter la macro (ce qui est le cas actuellement).

Un collègue a eu l'idée de créer un tableau et de m'en servir.

J'ai préalablement nommé mes cellules pour plus de facilité.

Mais je bloque complètement, et je n'arrive pas à adapter mon cas à cette macro.

   
   Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

       Dim TabSelect(2)

            If Intersect(Range("Case1"), Target) Is Nothing And _
                Intersect(Range("Case2"), Target) Is Nothing Then
                Exit Sub

                If Target.MergeCells = True Then
                    Else

                    TabSelect(0) = "Case1"
                    TabSelect(1) = "Case2"

                        For i = 0 To UBound(TabSelect)

                            If TabSelect(i) = "" Then
                                TabSelect(i) = "X"
                                Else: TabSelect(i) = ""

                                            Case1 = TabSelect(0)
                                            Case2 = TabSelect(1)

                            End If

                    Next

                 End If

            End If

    End Sub

La structure est différente, mais bon j'ai essayé. Je vous met le fichier Excel avec les exemples.

En feuille 1 : La macro que je souhaite faire fonctionner.

En feuille 2 : La macro en dur qui fonctionne.

Si l'un d'entre vous a une idée pour m'aider, ou peut m'indiquer si je suis sur la mauvaise voie, ça serait super !

Je vous en remercie par avance.

5casecoche.xlsm (17.99 Ko)

Bonjour,

Je suggère une autre approche.

Toute case à basculer se nommera selon le format "CaseX.Y", X étant son identifiant, et Y un chiffre entre 1 et 2 (puisqu'elles sont liées deux à deux)

Ensuite ce code à tester dans la feuille TAB :

   
   Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
         T = Left(Target.Name.Name, 4)
            If T = "Case" Then
            NomCase = Right(Target.Name.Name, Len(Target.Name.Name) - 4)
            NumCase = InStr(1, NomCase, ".")
                If Range("Case" & Left(NomCase, NumCase - 1) & ".1").Cells.Value = "X" Then
                  Range("Case" & Left(NomCase, NumCase - 1) & ".1").Cells.Value = ""
                  Range("Case" & Left(NomCase, NumCase - 1) & ".2").Cells.Value = "X"
                Else
                  Range("Case" & Left(NomCase, NumCase - 1) & ".1").Cells.Value = "X"
                  Range("Case" & Left(NomCase, NumCase - 1) & ".2").Cells.Value = ""
                End If
            End If
    Cancel = True
    End Sub

Comme ceci ou cela :

3casecoche.xlsm (23.72 Ko)

Ou cela (mieux) :

6casecoche.xlsm (26.66 Ko)

Bonjour Oxydum,

Merci pour votre réponse, ça fonctionne super bien !

C'est exactement ce que je recherchais (au niveau de la flexibilité).

J'ai utilisé mon cas avec 2 cellules, et cette macro fonctionne par paires seulement non ?

Dans le cas de choix multiples (3, 4 cases) je ne serais pas bridé ?

Non, le cas de choix multiples n'est pas prévu.

Admettons 4 cases...

La première est cochée, il faudrait basculer les 3 autres, ou les inverser, c'est ça ?

Voilà c'est ça.

Si je coche la première case, les 3 autres doivent être vides.

C'est pour ça que j'étais parti sur un tableau (dim) pour pouvoir gérer des cases multiples.

J'ai donné l'exemple avec 2 cellules mais ce n'était pas représentatif de mon besoin final, désolé.

Voici donc un classeur qui devrait prendre en compte tous ces cas.

4casecoche.xlsm (28.87 Ko)

Je poste une dernière réponse à mon sujet, un collègue m'a montré un solution avec la solution tableau sur laquelle j'étais parti.

J'ajoute le fichier si ça peut servir à d'autres personnes qui lisent ce sujet

On peut ajouter une boucle pour rendre le tout 100% flexible avec le tableau.

Encore merci pour votre aide, j'ai tout ce qu'il me faut maintenant

10casecoche-v2.xlsm (18.12 Ko)
Rechercher des sujets similaires à "coche automatique option"