Empêcher la saisie dans certaines cases selon le choix dans un menu déroulant.

Processus

XLDnaute Nouveau
Bonjour,

Je fais un formulaire dans excel et j'aimerais griser et empêcher la saisie dans certaines cases lorsqu'une case avec un menu déroulant indique un certain choix. Comment faire? Je connais les mises en forme conditionnelle, mais à ce que je sache, ça ne permet pas d'inactiver les cellules.

Information pertinente: Je ne sais pas comment fonctionne Visual Basic.

Merci à l'avance!

Audrey
 

Tibo

XLDnaute Barbatruc
Re : Empêcher la saisie dans certaines cases selon le choix dans un menu déroulant.

Bonjour Processus, alias Audrey et bienvenue sur XLD,

Sans passer par nue macro, on peut combiner une Mise en Forme Conditionnelle et une Validation (menu Données).

Cela dit, il faudrait que tu nous en dises plus sur les conditions qui t'amènent à vouloir empêcher toute saisie.

Un petit bout de fichier exemple serait donc le bienvenu.

A te (re)lire

@+
 

eriiiic

XLDnaute Barbatruc
Re : Empêcher la saisie dans certaines cases selon le choix dans un menu déroulant.

Bonjour tout le monde,

Avec ta liste déroulante en A1, et "non" devant être bloquant,tu peux interdire la saisie dans une autre cellule en y mettant une validation.

Sur 2003:
menu 'données / validation...', Autoriser: Personnalisé, Formule: =$A$1<>"non"

eric
 

Processus

XLDnaute Nouveau
Re : Empêcher la saisie dans certaines cases selon le choix dans un menu déroulant.

Bonjour,

Je vous joint un petit exemple. Donc, si je choisis NON dans B1, j'aimerais que A2:B3 soit grisé et qu'on ne puisse rien y saisir.

Comme vous pouvez le voir, j'ai aussi des menus déroulants dans les cases qui doivent être inactivées, donc je ne peux pas mettre de validation (à ma connaissance bien sûre).

Donc, s'il est essentiel de faire une macro, je suis bien ouverte à apprendre!

Merci,

Audrey
 
Dernière édition:

eriiiic

XLDnaute Barbatruc
Re : Empêcher la saisie dans certaines cases selon le choix dans un menu déroulant.

Re,

Vu qu'on ne peut avoir qu'une seule validation par cellule je pense que le vba est obligatoire.

L'option que j'ai choisi est d'empêcher la sélection de B2 ou B3 si B1="OUI", en sélectionnant d'office B1 dans ce cas. Ca permet d'éviter la protection de la feuille qui implique des restrictions, et on est prêt à changer le contenu de cette cellule si besoin de modif.
Par contre ne met pas d'espaces dans tes listes autour des ; c'est trompeur pour les tests ;-)

Clic-droit sur le nom d'onglet de ta feuille, 'visualiser le code', coller le code ci-dessous
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [B1]) Is Nothing Then
        If [B1] = "NON" Then
            Range("B2:B3").Interior.ColorIndex = xlNone
        Else
            Range("B2:B3").Interior.ColorIndex = 15
        End If
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("B2:B3")) Is Nothing Then
        If [B1] = "OUI" Then [B1].Select
    End If
End Sub
Exemple joint
eric
 

Fichiers joints

mstauch

XLDnaute Nouveau
Re : Empêcher la saisie dans certaines cases selon le choix dans un menu déroulant.

Bonjour tout le monde,

Je suis désolé de relancer une discussion ouverte il y a longtemps, mais j'aurais besoin de votre aide. Je tente de me replonger dans le VBA (Ôh joie!) et je dois avouer que ça pique un peu.

Alors voici mon problème. J'essaye de me ré-approprier le bout de code envoyé par Eric mais en y ajoutant un tout petit plus. J'aimerai pouvoir "griser" et "bloquer" plusieurs champs sur ma feuille excel quand je sélectionne OUI ou NON. En gros et pour essayer d’être plus claire, je veux faire exactement la même chose que proposé par Eric dans son code mais sur différente parties de ma feuille excel simultanément.

Voila le code adapté a mon problème mais incomplet, parce que je n'arrive pas a "bloqué" la deuxième série de case ("F59:G63"). A noter que les mots "OUI", NON" sont remplacés par "Stud bolts fixation" et "Autolock Analysis" (ça va sans dire mais c'est mieux quand c'est dis! :) )

-----------------------------------------------------------
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [F33]) Is Nothing Then
If [F33] = "Stud bolts fixation" Then
Range("F49:G55").Interior.ColorIndex = xlNone
Range("F59:G63").Interior.ColorIndex = xlNone
Else
Range("F49:G55").Interior.ColorIndex = 15
Range("F59:G63").Interior.ColorIndex = 15
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("F49:G55")) Is Nothing Then
If [F33] = "Autolock Analysis" Then [F33].Select
End If
End Sub

Private Sub Worksheet_SelectionChange1(ByVal Target As Range)
If Not Intersect(Target, Range("F59:G63")) Is Nothing Then
If [F33] = "Autolock Analysis" Then [F33].Select
End If
End Sub
-------------------------------------------------------------

Merci d'avance et félicitation pour votre Forum! Il envoie du fat!!

A plus plus
 

Legolas

XLDnaute Occasionnel
Re : Empêcher la saisie dans certaines cases selon le choix dans un menu déroulant.

Bonjour,

Je pense qu'il faut regrouper les conditions en une seule.

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("F49:G55")) Is Nothing Then
        If [F33] = "Autolock Analysis" Then [F33].Select
    Else
        If Not Intersect(Target, Range("F59:G63")) Is Nothing Then
            If [F33] = "Autolock Analysis" Then [F33].Select
        End If
    End If
End Sub
Ca devrait marcher.

A+
 

mstauch

XLDnaute Nouveau
Re : Empêcher la saisie dans certaines cases selon le choix dans un menu déroulant.

Merci beaucoup de la réponse!

Effectivement ça marche Nickel-Chrome.

Il me reste juste une dernière fonctionnalité à ajouter (je pensais pouvoir y arriver tout seul, mais visiblement non!). Est ce qu'il est possible de bloquer certaines cellule quand un des choix est sélectionné dans le menu déroulant (déjà possible avec le code précédent) ET D'EN BLOQUER D'AUTRES dès qu'on sélectionne un autre choix ("Autolock Analysis" par exemple).

J'ai écris ce bout de code (c'est toujours plus constructif de se faire corriger! :) )

--------------------------------------------------------------------------

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [F34]) Is Nothing Then
If [F34] = "Stud bolts fixation" Then
Range("F74:J83").Interior.ColorIndex = xlNone
Range("F84:J88").Interior.ColorIndex = 15
Range("F93:J93").Interior.ColorIndex = xlNone
Range("F95:J95").Interior.ColorIndex = xlNone
Range("F118:H122").Interior.ColorIndex = xlNone
Range("F125:H128").Interior.ColorIndex = 15
Range("F138:J142").Interior.ColorIndex = xlNone
Range("F143:J146").Interior.ColorIndex = 15
Range("F165:J168").Interior.ColorIndex = xlNone
Range("F169:J172").Interior.ColorIndex = 15
Range("F196:J208").Interior.ColorIndex = xlNone
Else
Range("F74:J83").Interior.ColorIndex = 15
Range("F84:J88").Interior.ColorIndex = xlNone
Range("F93:J93").Interior.ColorIndex = 15
Range("F95:J95").Interior.ColorIndex = 15
Range("F118:H122").Interior.ColorIndex = 15
Range("F125:H128").Interior.ColorIndex = xlNone
Range("F138:J142").Interior.ColorIndex = 15
Range("F143:J146").Interior.ColorIndex = xlNone
Range("F165:J168").Interior.ColorIndex = 15
Range("F169:J172").Interior.ColorIndex = xlNone
Range("F196:J208").Interior.ColorIndex = 15
End If
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("H74:J83")) Is Nothing Then
If [F34] = "Autolock Analysis" Then [F34].Select
Else
If Not Intersect(Target, Range("H93:J93")) Is Nothing Then
If [F34] = "Autolock Analysis" Then [F34].Select
Else
If Not Intersect(Target, Range("H95:J95")) Is Nothing Then
If [F34] = "Autolock Analysis" Then [F34].Select
Else
If Not Intersect(Target, Range("H118:H122")) Is Nothing Then
If [F34] = "Autolock Analysis" Then [F34].Select
Else
If Not Intersect(Target, Range("H138:J142")) Is Nothing Then
If [F34] = "Autolock Analysis" Then [F34].Select
Else
If Not Intersect(Target, Range("H165:J168")) Is Nothing Then
If [F34] = "Autolock Analysis" Then [F34].Select
Else
If Not Intersect(Target, Range("H196:J208")) Is Nothing Then
If [F34] = "Autolock Analysis" Then [F34].Select
End If
End If
End If
End If
End If
End If
End If
End Sub

Private Sub Worksheet_SelectionBlock(ByVal Target As Range)
If Not Intersect(Target, Range("H84:J88")) Is Nothing Then
If [F34] = "Stud bolts fixation" Then [F34].Select
Else
If Not Intersect(Target, Range("H125:H128")) Is Nothing Then
If [F34] = "Stud bolts fixation" Then [F34].Select
Else
If Not Intersect(Target, Range("H143:J146")) Is Nothing Then
If [F34] = "Stud bolts fixation" Then [F34].Select
Else
If Not Intersect(Target, Range("H169:J172")) Is Nothing Then
If [F34] = "Stud bolts fixation" Then [F34].Select
End If
End If
End If
End If
End Sub

---------------------------------------------------------------------------

Merci beaucoup en tout cas!

A+

Mathieu
 

Legolas

XLDnaute Occasionnel
Re : Empêcher la saisie dans certaines cases selon le choix dans un menu déroulant.

Re,

Pour être plus lisible, j'ai nommé les plages "interdites".

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Worksheets("Feuil1").Activate
Dim Plage_Stud, Plage_Autolock

Set Plage_Autolock = Range("F84:J88,F125:H128,F143:J146,F169:J172")
Set Plage_Stud = Range("F74:J83,F93:J93,F95:J95,F118:H122,F138:J142,F165:J168,F196:J208")


If [F34] = "Autolock Analysis" Then
    If Not Intersect(Target, Plage_Stud) Is Nothing Then [F34].Select
Else
    If Not Intersect(Target, Plage_Autolock) Is Nothing Then [F34].Select
End If

End Sub
Ce code permet de bloquer la sélection de différentes plages de cellules en fonction de la valeur de F34.

Je joins le fichier afin que tu puisses comparer.

A+
 

Fichiers joints

xldl_laulau

XLDnaute Nouveau
Re : Empêcher la saisie dans certaines cases selon le choix dans un menu déroulant.

Bonjour,

Je me permets de relancer ce sujet car je suis exactement dans la même situation que Processus alias Audrey en 2010.

J'ai 3 colonnes avec validation des données "OUI" "NON" A1 A2 A3 et celle d'après A4 avec une liste déroulante.
Je souhaiterais que si dans une des 3 colonnes (A1 ou A2 ou A3) il y a un "NON", on mette automatiquement "FD", si tous est "OUI" on laisse le choix du menu déroulant.

En essayant la macro (même que sur 1 seule des 3 colonnes) il ne se passe rien.
J'ai des toutes petites bases en VBA

Pourriez-vous me dire où je me plante.

D'avance merci

Pj un exemple de mon fichier
 

Fichiers joints

Discussions similaires


Haut Bas