Vider cellules par choix dans menu déroulant

Bonjour,

Dans un tableau Excel, j'ai besoin que le choix d'un menu déroulant aboutisse à l'effacement de 2 cellules contenant des sommes entrées manuellement.
J'ai utilisé le code suivant:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Union([A26], [A26], Range("A26:A26"))) Is Nothing Then Exit Sub
ActiveSheet.Unprotect
Range("D26:E26").Select
Selection.ClearContents
ActiveSheet.Protect
End Sub

L'effacement fonctionne mais le pb c'est que je ne suis plus autorisé ensuite en changeant de choix dans le menu de la cellule qui le pilote à entrer une valeur numérique dans les 2 cellules cibles.
L'erreur: "Un utilisateur a restreint les valeurs que peut accepter cette cellule".

Une idée? Je bloque là.
Merci!

3 réponses

  1. Bonjour,

    Le message que tu indiques doit provenir de la validation de données appliquée à la plage D26:E26.
    Regarde dans l'onglet DONNEES > Outils de données > Validation des données.

    A+
    0
    1. Contributeur
      Bonjour,

      Union([A26], [A26], Range("A26:A26")) 

      A quoi ça sert de faire l'union de 3 fois la même cellule ?
      eric
      0
      1. Salut Eriiic,

        Parce qu'il a pompé un code ici et inadapté à sa demande, qu'il a d'ailleurs reformulé à la fin de la discussion sans répondre à ma demande de renseignement
        Cordialement
        0
    2. Bonjour,

      L'union de 3 fois la même cellule, c'est mon petit plaisir... Non à rien, c'est juste que étant une bille j'ai compilé plusieurs scripts et je ne sais pas faire autrement en l'état ;))

      Donc maintenant ça marche! Merci, merci Gyrus! Cependant, nouveau petit soucis:

      Evidement je cherche à exécuter ce script sur plusieurs cellules et là VBA me jette.
      Faut-il ouvrir un code VBA pour chaque cellule?
      L'idée initiale qui malheureusement ne marche pas:

      Private Sub Worksheet_Change(ByVal Target As Range)
      If Intersect(Target, Union([A26], [A26], Range("A26:A26"))) Is Nothing Then Exit Sub
      ActiveSheet.Unprotect
      Range("D26:E26").Select
      Selection.ClearContents
      ActiveSheet.Protect

      Private Sub Worksheet_Change(ByVal Target As Range)
      If Intersect(Target, Union([A27], [A27], Range("A27:A27"))) Is Nothing Then Exit Sub
      ActiveSheet.Unprotect
      Range("D27:E27").Select
      Selection.ClearContents
      ActiveSheet.Protect

      Private Sub Worksheet_Change(ByVal Target As Range)
      If Intersect(Target, Union([A28], [A28], Range("A28:A28"))) Is Nothing Then Exit Sub
      ActiveSheet.Unprotect
      Range("D28:E28").Select
      Selection.ClearContents
      ActiveSheet.Protect
      End Sub

      Merci si quelqu'un sait me faire avancer...;)

      Antoine
      0
      1. Contributeur
        Comme tu ne décris pas ce que tu veux exactement à tout hasard je dirais :
        Private Sub Worksheet_Change(ByVal Target As Range)
            Dim pl As Range
            Set pl = Intersect(Target, Range("A26:A28"))
            If pl Is Nothing Then Exit Sub
            ActiveSheet.Unprotect
            Application.EnableEvents = False
            pl.Offset(, 3).Resize(, 2).ClearContents
            Application.EnableEvents = True
            ActiveSheet.Protect
        End Sub

        eric
        0