Double validation de données

Bonjour,

Je me permets d'ouvrir ce sujet car malgré des heures de recherches sur internet je n'arrive pas à trouver mon bonheur et je commence à craquer... J'ai peut être mal cherché et n'étant pas très opérationnel en VBA je n'ai pas utilisé cette solution.

Je m'explique :

J'ai deux onglets. Le premier avec une cellule comportant une liste déroulante ("Liste1") avec les choix Oui et Non. Le deuxième avec plusieurs cellules comportant également cette même liste déroulante et les choix Oui et Non. Dans ce deuxième onglet, toutes les cellules sont protégées et seules celles avec liste déroulante sont accessibles.

J'aimerai, lorsque je choisis le choix "Non" dans mon premier onglet, que les listes déroulante de choix du deuxième onglet soient inaccessibles et accessible lorsque le choix du premier onglet est "Oui".

J'ai déjà essayé de faire une "double validation de données" dans les cellules à verrouiller mais cela ne marche pas et supprime la liste déroulante de la cellule.

J'espère me faire comprendre et merci d'avance.

Cordialement.

Bonsoir et bienvenue

De ce que je comprends de ton explication, pourquoi mettre des listes déroulantes en Feuil2 ?

Il suffit que les cellules reprennent la valeur OUI ou NON choisie dans ta cellule source en Feuil1

Exemple :

12naeqh.xlsx (13.44 Ko)

Amicalement

Nad

Bonjour,

Merci pour cette réponse. Les listes déroulantes dans Feuil2 serviront à autre chose par la suite et doivent être indépendantes du choix Oui ou Non de la Feuil1.

Si je reprend ton exemple, je veux lorsqu'en Feuil1 cellule A1 = Oui, pouvoir choisir en Feuil2 cellule A1 Oui ou Non à l'aide d'une liste déroulante. Et lorsqu'en Feuil1 cellule A1 = Non, que la cellule A1 de la Feuil2 soit vérouillée ou du moins qu'on ne puisse plus choisir oui ou non. Tout ceci en sachant que les autres cellules de la Feuil2 seront protégées par mot de passe.

Re

Regarde si c'est cela que tu attends

38naeqh.xlsx (14.11 Ko)

Nad

Re,

Oui c'est tout à fait ça. Si j'ai bien compris, tu as définis la cellule A1 en tant que CelluleSource dans Formules>Définir un nom, puis dans la cellule de la feuille 2 tu as fait une validation de données avec une liste et en source : =SI(CelluleSource="Oui";Liste) ?

Sur mon classeur, je fais les mêmes étapes mais j'ai le message d'erreur suivant : La liste Source doit être délimitée ou faire référence à une seule ligne ou colonne.

Re

As-tu défini le nom LISTE ?

Nad

Re,

Oui normalement.

Je te laisse regarder par toi même sur mon fichier.

Si j'ai le choix "Non" pour la disponibilité du Gaz, je ne veux pas que les listes de choix sur la ligne "Tube rayonnant gaz" soit accessible comme tu as fait sur ton fichier.

Re

1 - Met la cellule source à OUI

2 - Formule de validation

=SI(CelluleSource1="OUI";Liste1)

Nad

Re

Super ça marche merci beaucoup d'avoir pris le temps de m'aider.

Donc à priori j'avais un message d'erreur car ma cellule source était sur "Non" c'est ça ?

Une autre question au passage, si jamais tu peux me répondre. J'aimerai aussi en fonction d'un choix d'une liste déroulante, masquer ou afficher un onglet du classeur.

Prenons ton classeur teste d'exemple : Si en Feuil1 A1=Oui, Feuil3 est affichée et peut être accessible, si A1=Non alors Feuil3 est masquée.

Merci d'avance.

Naeqh.

Re

Code à placer dans Feuil1

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Application.Intersect(Target, [CelluleSource]) Is Nothing Then
If Target.Value = "NON" Then Worksheets("Feuil3").Visible = False
If Target.Value = "OUI" Then Worksheets("Feuil3").Visible = True
End If
End Sub

Edit

Autre façon d'écrire le code

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
    With [CelluleSource]
        If Target.Value = "NON" Then
        Sheets("Feuil3").Visible = False
        Else
        Sheets("Feuil3").Visible = True
        End If
    End With
End Sub

Nad

Salut,

Merci pour ta solution, je l'ai adapté à mon cas et ça marche très bien.

Au plaisir et bonne journée.

Bonjour,

Je fais suite à mes précédentes demandes

N'ayant pas un niveau très poussé en VBA, j'ai le code suivant sur mon classeur, constitué à l'aide des réponses et de ce que j'ai pu trouvé :

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
    With [TypeOpération]
        If Target.Value = "Habitation / Hébergement" Then
        Sheets("Choix Solutions 2").Visible = False
        Sheets("EFAE 2").Visible = False
        Sheets("Choix Solutions 3").Visible = False
        Sheets("EFAE 3").Visible = False
        Sheets("Choix Solutions 4").Visible = False
        Sheets("EFAE 4").Visible = False
        Sheets("Choix Solutions 5").Visible = False
        Sheets("EFAE 5").Visible = False
        Sheets("Choix Solutions 6").Visible = False
        Sheets("EFAE 6").Visible = False
        Sheets("Choix Solutions 7").Visible = False
        Sheets("EFAE 7").Visible = False
        Sheets("Choix Solutions 8").Visible = False
        Sheets("EFAE 8").Visible = False
        Sheets("Choix Solutions 9").Visible = False
        Sheets("EFAE 9").Visible = False
        Sheets("Choix Solutions 10").Visible = False
        Sheets("EFAE 10").Visible = False
        Else
        Sheets("Choix Solutions 2").Visible = True
        Sheets("EFAE 2").Visible = True
        Sheets("Choix Solutions 3").Visible = True
        Sheets("EFAE 3").Visible = True
        Sheets("Choix Solutions 4").Visible = True
        Sheets("EFAE 4").Visible = True
        Sheets("Choix Solutions 5").Visible = True
        Sheets("EFAE 5").Visible = True
        Sheets("Choix Solutions 6").Visible = True
        Sheets("EFAE 6").Visible = True
        Sheets("Choix Solutions 7").Visible = True
        Sheets("EFAE 7").Visible = True
        Sheets("Choix Solutions 8").Visible = True
        Sheets("EFAE 8").Visible = True
        Sheets("Choix Solutions 9").Visible = True
        Sheets("EFAE 9").Visible = True
        Sheets("Choix Solutions 10").Visible = True
        Sheets("EFAE 10").Visible = True
        End If
    End With
Application.ScreenUpdating = False
     With [TypeOpération]
        If Target.Value = "Bureaux" Then
        Sheets("Choix Solutions 1").Visible = False
        Sheets("EFAE 1").Visible = False
        Sheets("Choix Solutions 3").Visible = False
        Sheets("EFAE 3").Visible = False
        Sheets("Choix Solutions 4").Visible = False
        Sheets("EFAE 4").Visible = False
        Sheets("Choix Solutions 5").Visible = False
        Sheets("EFAE 5").Visible = False
        Sheets("Choix Solutions 6").Visible = False
        Sheets("EFAE 6").Visible = False
        Sheets("Choix Solutions 7").Visible = False
        Sheets("EFAE 7").Visible = False
        Sheets("Choix Solutions 8").Visible = False
        Sheets("EFAE 8").Visible = False
        Sheets("Choix Solutions 9").Visible = False
        Sheets("EFAE 9").Visible = False
        Sheets("Choix Solutions 10").Visible = False
        Sheets("EFAE 10").Visible = False
        Else
        Sheets("Choix Solutions 1").Visible = True
        Sheets("EFAE 1").Visible = True
        Sheets("Choix Solutions 3").Visible = True
        Sheets("EFAE 3").Visible = True
        Sheets("Choix Solutions 4").Visible = True
        Sheets("EFAE 4").Visible = True
        Sheets("Choix Solutions 5").Visible = True
        Sheets("EFAE 5").Visible = True
        Sheets("Choix Solutions 6").Visible = True
        Sheets("EFAE 6").Visible = True
        Sheets("Choix Solutions 7").Visible = True
        Sheets("EFAE 7").Visible = True
        Sheets("Choix Solutions 8").Visible = True
        Sheets("EFAE 8").Visible = True
        Sheets("Choix Solutions 9").Visible = True
        Sheets("EFAE 9").Visible = True
        Sheets("Choix Solutions 10").Visible = True
        Sheets("EFAE 10").Visible = True
        End If
    End With
    If Target.Count > 1 Then End
    If Not Application.Intersect(Target, Range("C8,C10,C11,C13,C14,C16,C17,C19,D21,D22,D23,D24,D25")) Is Nothing Then
        If Not IsEmpty(Target) Then
            Application.EnableEvents = False
            Target.Value = UCase(Target.Value)
            Application.EnableEvents = True
        End If
    Else
    End If
End Sub

Est-il possible de le raccourcir car j'ai 10 onglets "Choix Solutions" et "EFAE".

De plus, avec ce code, le deuxième "With" marche avec le choix "Bureau" et empêche le premier "With" de fonctionner avec le choix "Habitation / Hébergement". Je suppose que si je continue et fais ça pour les 10 onglets j'aurais le même problème.

Je sollicite donc votre aide.

Merci d'avance.

Naeqh.

Bonsoir

Regarde si ça te convient

3naeqh-v02.xlsm (28.51 Ko)

Pour info, le code fait appel à la place des feuilles dans le classeur ; rien à voir avec, par exemple, Feuil10 qui peut se trouver en 3ème position ; dans le code, il s'agirait donc de Sheets(3) et non pas Sheets(10)

Amicalement

Nad

Bonsoir Nad,

J'ai l'apparition de l'erreur suivante : '40036' Erreur définie par l'application ou par l'objet. Et lorsque je fais "déblocage" j'ai la ligne suivante en jaune : Sheets(i).Visible = True.

D'ailleurs je n'ai pas compris ton code "Sub AfficheTout()".

Cordialement.

Naeqh.

Re

Le code affiche toutes les feuilles.

De cette façon,comme on l'appelle avant de les masquer selon TypeOperation, pas besoin de la seconde partie du 1er code que je t'avais donné

L'erreur que tu as est due au fait que tu as tes feuilles protégées (je l'avais oublié)

Remplace le code suivant :

Sub AfficheTout()
Dim i As Integer
Application.ScreenUpdating = False

For i = 2 To Sheets.Count
With Sheets(i)
.Unprotect
.Visible = True
.Protect

End With
Next i

End Sub

Teste et dis-moi

Nad

Re,

A priori ça ne marche pas. Dès que je change de choix dans la liste déroulante "Habitation, bureaux, etc." une fenêtre pour Ôter la protection apparaît. Elle ne disparaît pas, peu importe le mot de passe rentré.

Edit : A ce que je comprends, à chaque choix de "Type d'Opération", pour pouvoir masquer ou afficher les onglets ciblés par le choix, le fichier me demande d'ôter la protection.

Et effectivement les onglets qui seront masqués/affichés seront protégés par mot de passe avec seuls les cellules à remplir, accessibles.

Naeqh.

Mon code ne tenait pas compte d'un mot de passe.

En espérant qu'il soit le même pour toutes les feuilles

Sub AfficheTout()
Dim i As Integer
Application.ScreenUpdating = False

For i = 2 To Sheets.Count
With Sheets(i)
.Unprotect Password:="TonMotDePasse"
.Visible = True
.Protect Password:="TonMotDePasse"
End With
Next i

End Sub

Re,

Je ne comprends pas pourquoi cela ne fonctionne pas. Je te transmets mon fichier pour que tu puisses m'éclairer.

Pour info, certains onglets sont déjà masqués mais n'entrent pas dans le jeu du "masquer/afficher".

Les onglets qui sont affichés à l'ouverture du fichier joint seront quand à eux protégé par mot de passe (142222).

J'ai volontairement supprimé certains onglets car le fichier pesait plus de 300ko.

Re

Renvoie le fichier avec la feuille dans laquelle se trouve ListeTypes

Par contre, vu l'heure, je ne te promet pas une réponse ce soir.

Nad

Re,

Désolé je n'avais pas fait gaffe.

3naeqh-outil.xlsm (284.24 Ko)
Rechercher des sujets similaires à "double validation donnees"