Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Arnold35

XLDnaute Junior
Bonsoir le Forum,

J'ai créé un fichier de validation d'étapes de facturation (commande/réception/facture) avec plusieurs mots de passe car plusieurs personnes ont accès au fichier. A savoir 3 acheteurs, 1 comptable, 2 signataires.

J'ai créé des mots de passes différents en fonctions des colonnes de validation => 1 mot de passe pour la colonne Réception, 1 mot de passe pour la colonne Compta et 1 mot de passe pour la colonne Signature facture.

Je souhaiterai aller plus loin en créant 3 mots de passe différents (1 par personne pour la colonne Réception) en fonction du nom de la personne dans la colonne A.

Savez vous si cela est faisable? Avez vous des idées de Macro (ou peut-être n'y en a t-il pas besoin?)?

Pour info
- Le mot de passe de la déprotection de la feuille est "citedia"
- Le mot de passe pour les colonnes "A:H" est "ACH"
- Le mot de passe pour la colonne I est "CPT"
- Le mot de passe pour la colonne J est "SIG"


Je vous joins le fichier, ce sera certainement plus parlant.

Merci de votre aide,

Arnold
 

Pièces jointes

  • MODELE_validation des commandes V7 - Forum.xlsm
    196.4 KB · Affichages: 47

Yaloo

XLDnaute Barbatruc
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Re,

C'est corrigé, j'avais verrouillé la cellule liée aux cases d'option.

A+

Martial
 

Pièces jointes

  • MODELE_validation des commandes V10.xlsm
    251.8 KB · Affichages: 39
  • MODELE_validation des commandes V10.xlsm
    251.8 KB · Affichages: 40
  • MODELE_validation des commandes V10.xlsm
    251.8 KB · Affichages: 40

Arnold35

XLDnaute Junior
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Yaloo,

Je souhaite que tout le monde ait accès aux feuilles "Suivi Cdes MDA" et également à la feuille "Modèle bon de commande".

J'ai donc essayé de modifié ton code mais cela ne fonctionne pas:

For Each Ws In Worksheets
If Ws.Name <> "suivi des cdes MDA V2" Or "MODELE_validation des commandes" Then Sheets(Ws.Name).Visible = 2
Next

As-tu une idée? Je pense que je ne sais pas appliquer le Or.

Merci
 
Dernière édition:

Arnold35

XLDnaute Junior
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

J'ai essayé de le placer mais il bloque dès que l'on ouvre le fichier.

For Each Ws In Worksheets
If Ws.Name <> "suivi des cdes MDA V2" Or Ws.Name <> "Modèle BDC V1" Then Sheets(Ws.Name).Visible = 2
Next

EDIT: J'ai trouvé, il faut mettre "And" au lieu de "Or".
 

Pièces jointes

  • MODELE_validation des commandes V10g.xlsm
    263.4 KB · Affichages: 34
  • MODELE_validation des commandes V10g.xlsm
    263.4 KB · Affichages: 47
  • MODELE_validation des commandes V10g.xlsm
    263.4 KB · Affichages: 47
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Il ne faut pas mettre Or mais And, c'est différent dans l'un ET différent de l'autre.

For Each Ws In Worksheets
If Ws.Name <> "suivi des cdes MDA V2" And Ws.Name <> "Modèle BDC V1" Then Sheets(Ws.Name).Visible = 2
Next
A+
 

Arnold35

XLDnaute Junior
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

J'ai essayé de modifier le mot de passe de F. DEMAY avec le bouton modifier mot de passe, mais il plante car je crois qu'il ne trouve pas la feuille employé.

Est ce que vous pensez que c'est cela?

Est ce que le code pour afficher la feuille employés ce serait ça:
Sheets("Employés").Visible = -1

?

Merci
 

Arnold35

XLDnaute Junior
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Je viens d'essayer mais il bloque là dessus:

Private Sub CommandButton4_Click() 'Validation du nouveau mot de passe

Sheets("Employés").Visible = -1
If ComboBox1 = "" Or TextBox2 = "" Then
MsgBox "Merci de rentrer vos nom et mot de passe"
Exit Sub
End If
If TextBox2 = ComboBox1.Column(1) Then
If TextBox3 = TextBox4 Then
If TextBox3 <> "" Then
Sheets("Employés").Cells(ComboBox1.ListIndex + 2, 2) = TextBox4
Unload Me
MsgBox "Mot de passe modifié, vous pouvez vous reconnecter."
Else
MsgBox "Merci de rentrer un nouveau mot de passe"
Valid = Valid + 1
End If
Else
MsgBox "Le nouveau mot de passe n'est pas correct"
Valid = Valid + 1
End If
Else
MsgBox "Le mot de passe n'est pas correct"
Valid = Valid + 1
End If
If Valid = 3 Then Unload Me
Sheets("Employés").Visible = 2
 

Yaloo

XLDnaute Barbatruc
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

C'est normal, tu as protégé ta feuille Employés, ce n'est pas nécessaire puisqu'elle est cachée ou alors il faut la déprotéger puis la reprotéger après modification.
 

Arnold35

XLDnaute Junior
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Cela fonctionne super!!

Je continue mes tests.

Merci de m'accorder de votre temps c'est vraiment sympa!
 
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Normalement, il ne faut pas être sur la feuille Employés pour modifier le mot de passe.
Dans un premier temps, tu déprotèges ta feuille Employés.
Tu dois te trouver sur la première feuille lorsque tu cliques sur le bouton (ou que tu arrives sur le classeur). Ensuite tu peux changer le mot de passe.
 

Yaloo

XLDnaute Barbatruc
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Voici ton dernier fichier modifié, chez moi ça fonctionne

Bonne nuit
 

Pièces jointes

  • MODELE_validation des commandes V10g.xlsm
    240.7 KB · Affichages: 33
  • MODELE_validation des commandes V10g.xlsm
    240.7 KB · Affichages: 36
  • MODELE_validation des commandes V10g.xlsm
    240.7 KB · Affichages: 33

Arnold35

XLDnaute Junior
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Effectivement, le changement de mot de passe fonctionne désormais. Merci

En revanche lorsque je créé une commande sous l'utilisateur F. DEMAY (Acheteur), une fois que la ligne s'est insérée, je re-rentre le mot de passe, mais je ne peux pas modifier la colonne H de la ligne que je viens de créer.

Pourtant je suis bien avec F. DEMAY (Acheteur) sur la ligne qui comporte F. DEMAY en colonne A.
 

Pièces jointes

  • MODELE_validation des commandes V10g.xlsm
    289.9 KB · Affichages: 35
  • MODELE_validation des commandes V10g.xlsm
    289.9 KB · Affichages: 32
  • MODELE_validation des commandes V10g.xlsm
    289.9 KB · Affichages: 40

Arnold35

XLDnaute Junior
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Laissez tomber Yaloo, j'ai compris mon erreur. J'ai renommé la colonne A de la feuille "Employés", hors elle sert de recherche dans la base.
 

Arnold35

XLDnaute Junior
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Bonjour,

En continuant mes tests, je rencontre un problème.

Lorsque je sélectionne une case d'option et qu'ensuite j'en selectionne une autre, la macro plante car ma cellule D6 est verrouillé.

J'ai donc essayé de la dévérouiller en cliquant dessus, format, protection, "dévérouille". => ça ne fonctionne pas, elle se vérouille quand même.

J'ai donc essayé de mettre un code juste avant la reprotection de la feuille:

'macro permettant les filtres avec les cases d'option
Private Sub Worksheet_Calculate()

'Les cellules "D6" et "D7" sont en police blanches, "D6" doit toujours être dévérouillées

Dim colonne, critere
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
Me.Unprotect "citedia"
Me.AutoFilterMode = False 'affiche tout
If [D6] < 9 Then
colonne = Array(11, 11, 8, 8, 9, 9, 10, 10)
critere = Array("A valider/B. BUDET", 0, "A contrôler*", 0, _
"A contrôler/Compta", 0, "A signer/F. DEMAY", 0)
[A16:L1004].AutoFilter colonne([D6] - 1), critere([D6] - 1)
End If

Range("D6").Select 'Dévérouille D6
Selection.Locked = False
Selection.FormulaHidden = False

Me.Protect "citedia"

Application.EnableEvents = True 'réactive les évènements
End Sub


Cela fonctionne lorsque je change de case d'option, par contre si j'ai une case d'option cochée qui est autre que "Afficher toutes" les commandes" (donc base complètement défiltrée), L'ajout d'une nouvelle commande plante. La macro s'arrête sur sur "Range("D6").select du code ci-dessus


Je ne comprends pas vraiment pourquoi??
 

Pièces jointes

  • MODELE_validation des commandes V10g.xlsm
    290.2 KB · Affichages: 58
  • MODELE_validation des commandes V10g.xlsm
    290.2 KB · Affichages: 41
  • MODELE_validation des commandes V10g.xlsm
    290.2 KB · Affichages: 34
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mettre un mot de passe sur une plage en fonction de la valeur d'une cellule

Bonjour Arnold35, Yaloo, le forum,

Une solution plus élaborée dans ce fichier (3).

Le déverrouillage des cellules se fait maintenant à chaque sélection :

Code:
Public mdp$ 'variable mémorisée

Sub Déverrouille()
If mdp = "" Then Exit Sub
Dim x$
Sheets("suivi des cdes MDA V2").Activate
Select Case mdp
  Case "ACH1", "ACH2", "ACH3"
    x = Switch(mdp = "ACH1", "D. PROD'HOMME", mdp = "ACH2", "F. DEMAY", mdp = "ACH3", "S. WEHRLE")
    Autorise x, "B:H"
  Case "CPT"
    Autorise "*", "I"
  Case "SIG"
    Autorise "*", "J"
  Case "DAF"
    Autorise "*", "K"
End Select
End Sub

Sub Autorise(critere$, colonne$)
Dim r As Range
Set r = Intersect(Selection, Rows("17:" & Rows.Count), ActiveSheet.UsedRange)
If r Is Nothing Then Exit Sub
ActiveSheet.Unprotect "citedia"
For Each r In r
  If Cells(r.Row, 1) <> "" And Cells(r.Row, 1) Like critere Then _
    Intersect(r.EntireRow, Columns(colonne)).Locked = False
Next
ActiveSheet.Protect "citedia"
End Sub
Le code est dans Module4.

La variable mdp est renseignée dans la Workbook_Open.

A+
 

Pièces jointes

  • MODELE(3).zip
    143.4 KB · Affichages: 34
  • MODELE(3).zip
    143.4 KB · Affichages: 33
  • MODELE(3).zip
    143.4 KB · Affichages: 33

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…