Ne doit y avoir qu'un "1" dans une ligne

Bonjour à tous.

Je me souviens que le sujet à déjà été traité ici mais je ne le retrouve pas.

Voici mon problème:

J'ai une macro qui me place un "1" lorsque je double-clique dans une cellule. Mais je souhaiterai que s'il y en a déjà un dans une autre cellule de la même ligne, il s'efface.

Je ne sais pas comment faire pour spécifier de quelle ligne il s'agit étant donné que mon code se fait avec "activecell"

et est donc variable. (pas sur d'être clair)

Auriez-vous une petite aide à m'offrir?

Je vous joint le fichier pour plus de clarté.

13test.zip (20.81 Ko)

Bonsoir,

Uniquement avec H16 et G16 ??

Amicalement

Edit : s'il y a déjà un 1 en G16 et un 1 en H16, tu veux quoi en G16 ?

Bonsoir Dan.

Non, il faut que ce soit pour toutes les cellules en jaune.

Je dois mettre un "1" dans chaque ligne de ces cellules en jaune. Par contre, il ne doit jamais y avoir deux "1" dans une même ligne de ces cellules en jaune.

En gros, si je veux mettre "1" en ligne 16, il faut avant effacer les données de la plage G16:J16

En ligne 17, on effacera la plage G17:J17 avant de placer le "1"

Etc...

Pour l'instant, mon code est celui-ci

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("G16:J22,G26:J33,G37:J43,H73:H86")) Is Nothing Then
    Cancel = True
    If ActiveCell = "1" Then
    ActiveCell = ""
    Else
    ActiveCell = "1"
    End If
    End If
End Sub

Merci.

Bonjour pass-pass,

J'ai modifié un peu ton code pour m'occuper des colonnes G à J à part de la colonne H, ça a l'air de fonctionner.

J'efface les cellules de G à J sur la ligne active puis j'écris 1 sur la cellule active :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Application.Intersect(Target, Range("G16:J22,G26:J33,G37:J43")) Is Nothing Then
        Cancel = True
        If ActiveCell = "1" Then
            ActiveCell = ""
        Else
            Range(Cells(ActiveCell.Row, 7), Cells(ActiveCell.Row, 10)).Value = ""
            ActiveCell = "1"
        End If
    End If

    If Not Application.Intersect(Target, Range("H73:H86")) Is Nothing Then
        Cancel = True
        If ActiveCell = "1" Then
                ActiveCell = ""
        Else
            ActiveCell = "1"
        End If
    End If

End Sub

A+

Bonsoir Dachevid.

Je n'ai pas réussi à faire fonctionner ton code.

En revanche, tu as tout de même répondu dans le bon sens car j'ai pu adapter ta ligne qui me posais problème:

J'ai rajouter au code que j'avais cette que tu as envoyé:

 Range(Cells(ActiveCell.Row, 7), Cells(ActiveCell.Row, 10)).Value = ""

mais remplacée par celle-ci

Range(Cells(ActiveCell.Row, 7), Cells(ActiveCell.Row, 10)).ClearContents

En constatant la simplicité de cette ligne (ce n'est pas du tout péjoratif), je m'aperçois de tout ce qu'il peut me rester à apprendre en VBA.

Dans tous les cas merci.

Edit: Au temps pour moi. j'avais du faire une fausse manip en recopiant ton code car après avoir recommencé, ça marche très bien. Donc parfais ton code Dachevid

Rechercher des sujets similaires à "doit ligne"