Complément Macro

Résolu
Bonjour à toutes et à tous,

Je souhaiterais rajouter dans la macro ci-dessous qu'il ne peut y avoir qu'une seule croix de la cellule A2 à 25. Quelqu'un peut-il m'aider :-)

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("B5:B8, A2:A25")) Is Nothing And Target.Count = 1 Then
If Target.Value = "" Then
Target.Value = "X"
Else
Target.Value = Empty
End If
End If
End Sub

Je vous remercie :D

Configuration: Windows / Chrome 97.0.4692.71

4 réponses

  1. Contributeur
    Dans ce cas ça simplifie :
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Dim coche As Boolean
        If Not Intersect(Target, Range("B5:B8, A2:A25")) Is Nothing And Target.Count = 1 Then
            Cancel = True
            coche = Target.Value <> ""
            Range("B5:B8, A2:A25").ClearContents
            If Not coche Then Target.Value = "X"
        End If
    End Sub 

    j'ai ajouté pour ôter la coche avec le double-clic
    eric
    1. Superbe, c'est exactement ce que je voulais. Merci infiniment :-)
    2. Contributeur
      @ZeniTrès bien.
      Au passage tu peux enlever
      And Target.Count = 1 
      auquel je n'avais pas prêté attention.
      Sur double-clic ça ne peut être autre chose que 1
    3. Bonjour Eriiic,

      J'avais testé de A2:A25 (colonne où il ne doit pas y avoir la possibilité de mettre plusieurs croix.

      Mais du coup de B5 à B8 je n'arrive pas à mettre plusieurs croix et à double cliquer pour enlever :-. ?
    4. Contributeur
      @ZeniBonjour,

      comment le deviner ?
      Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
          Dim coche As Boolean
          If Not Intersect(Target, Range("B5:B8, A2:A25")) Is Nothing And Target.Count = 1 Then
              Cancel = True
              coche = Target.Value <> ""
              If Target.Column = 1 Then Range("A2:A25").ClearContents
              Target.ClearContents
              If Not coche Then Target.Value = "X"
          End If
      End Sub

      eric
    5. @eriiicOui navrée :-) Merci infiniment pour ton aide, ça fonctionne parfaitement.

      Belle journée.
  2. Bonjour Zeni

    Comme au moment d'entrer une X la plage A2:A25 doit être vide on peut tester ce vide avec NBVAL
    Tu n'as alors qu'une ligne à modifier :
    If Target.Value = "" And WorksheetFunction.CountA(Range("A2:A25")) = 0 Then

    Cdlmnt
    Via
    1. Bonjour Via55,

      Merci beaucoup pour ta solution, ça fonctionne très bien. :-D Par contre est-il possible que si je me trompe en double cliquant je puisse enlever la croix pour la réinsérer au bonne endroit :-) Car du moment que je mets la croix, si je double clique pour l'enlever, ça ne fonctionne plus.
  3. Contributeur
    Bonjour,

    il manque le fonctionnement voulu. Bloquer ou remplacer ???
    Si un nouveau X doit remplacer l'ancien, le plus simple est de vider la plage avant d'ajouter le nouveau.
    eric
    1. Oui si la personne se trompe, il faut pouvoir enlever la croix pour la mettre dans un autre cellule. J'espère que c'est plus clair :-)
  4. Bonjour eric

    D'après la macro originelle fournie par le demandeur un double-clic sur une cellule vide y inscrit un X, un double-clic sur une cellule remplie la vide, je ne modifie rien à cela
    1. Contributeur
      Certes, mais 'une seule croix' peut se traiter de 2 façons.
      Et difficile de dire laquelle depuis son code.
      D'ou ma demande de compléments.