Ligne de code non fonctionnelle pour un choix de cellule

Bonjour,

j'ai un problème avec la ligne de commande que je veux envoyer à excel. Je suis très débutant alors l'aide serait très apprécié.

Voici mon code:

Sub Workbook()

If Range("M9") = "x" Then

Range("M10,M12,M13") = ""

End If

If Range("M10") = "x" Then

Range("M9,M12,M13") = ""

End If

If Range("M12") = "x" Then

Range("M9,M10,M13") = ""

End If

If Range("M13") = "x" Then

Range("M9,M10,M12") = ""

End If

End Sub

En gros, je veux que lorsqu'on tape la lettre "x" dans une cellule (ou afficher un "x" dans la cellule avec un clic si possible), les autres cellules s'effacent ne laissant le choix que d'un emplacement pouvant avoir un "x".

Ex. Si j'entre un "x" dans M9, --> M10,M12,M13 s'effacent.

Ensuite, le "x" étant dans M9, si je met par la suite un "x" dans M10(par exemple) j'aimerais que M9 s'efface.

Mon code fonctionne plus ou moins, mais M9 est toujours priorisé (ce que je ne veux pas) puisqu'il est en haut de la ligne de code et aussi, le code ne s'active pas automatiquement : je dois toujours relancer avec le bouton play dans VBA.

Merci de votre aide.

Bonjour,

Regarde un petit exemple sur la plage M9:M13

Cordialement


Place toi sur la croix que tu veux garder et appuis sur le bouton croix

20efface-croix.xlsm (15.36 Ko)

Ton code fonctionne bien pour ce qui est de la priorité d'opération, mais j'aimerais que l'action se produise automatiquement lorsque j'inscrit un "x" dans la cellule et ne pas avoir à cliqué sur la croix à chaque fois. J'aimerais que lorsque j'inscrit un "x" dans la cellule et que je valide, les autres cellules s'effacent suite à la validation (enter par exemple), donc un seul `"x" à la fois pour les 4 cellules.

Ex. Si j'inscrit un "x" dans M9 puis que, par la suite j'inscrit un "x" dans M10, j'aimerais que M9 s'efface.

Bonjour,

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tmp
    If Not Intersect(Target, [M9:M13]) Is Nothing Then
        tmp = Target.Value
        Application.EnableEvents = False
        Range("M9:M13").ClearContents
        Target = tmp
        Application.EnableEvents = True
    End If
End Sub

eric

Bonjour Éric,

je ne suis pas sure de comprendre ton code ni comment le faire fonctionner (je suis très débutant en excel).

Pourrait tu me donner une marche à suivre pour que ton code fonctionne??

Merci et bonne journée

Il suffit de le copier-coller dans le module de la feuille.

Alt+F11 pour éditer le code.

Dans l'exemple je t'ai mis une procédure en plus pour mettre le "x" avec un double-clic.

eric

21classeur2.zip (6.96 Ko)

Omg!!!! merci tellement, sa fonctionne a merveille. Seul problème: dans mon document, quand j'inscrit le code et que je double-clic sur une cellule, il ne m'apparait pas un "x" mais la barre de texte.... J'ai essayé de verrouiller les cellules et le document mais aucun résultat. J'ai ensuite réessayer sur un nouveau classeur et c'est la même chose. Je n'arrive qu'a faire fonctionner le code dans ton document. Y a t-il une protection supplémentaire à ajouter aux cellules??

Merci encore énormément de ton aide, j'y suis presque

J'ai trouvé, c'est parce que mes cellules sont fusionné (M9,N9 - M10,N10 - etc). Maintenant, comment autoriser la modification d'une cellule fusionné. Je vais essayé de chercher.

Pose-toi plutôt la question comment te passer de ces fusions. C'est une vraie plaie qui n'aurait jamais due être mise en l'état.

eric

Malheureusement, je ne peut pas changer le format de ma feuille (c'est une feuille de contrat nécessitant cette mise en forme.....). Je continue à chercher pour me permettre de modifié une cellule fusionné.

Merci encore

Finalement, j'ai trouvé:

Option Explicit

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

If Not Intersect(Target, [M9:N9,M10:N10,M12:N12,M13:N13]) Is Nothing Then

Cancel = True

Target = "x"

End If

End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

Dim tmp

If Not Intersect(Target, [M9:N9,M10:N10,M12:N12,M13:N13]) Is Nothing Then

tmp = Target.Value

Application.EnableEvents = False

Range("M9:N9,M10:N10,M12:N12,M13:N13").ClearContents

Target = tmp

Application.EnableEvents = True

End If

End Sub

Merci encore énormément Éric

Passe une bonne journée

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tmp
    If Not Intersect(Target, [M9:M13]) Is Nothing Then
        tmp = Target.Value
        Application.EnableEvents = False
        Range("M9:N13").ClearContents
        Target = tmp
        Application.EnableEvents = True
    End If
End Sub

eric

Rechercher des sujets similaires à "ligne code fonctionnelle choix"