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

Arnold35

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

Bonjour job75, Yaloo, le forum,

J'ai un peu plus de mal à comprendre ton code job75. Ce n'est pas du tout péjoratif, mais je suis vraiment débutant en VBA.


J'ai essayé de modifié le code de Yaloo pour apporter une autre condition aux signataires.

Je souhaiterai que S. WERHLE (signataire) ne puisse modifier que les cellules de la colonne J où il est écrit "A signer/S. WEHRLE". De même pour F. DEMAY (signataire) qui ne doit avoir accès qu'aux cellules où est renseigné A signer/F. DEMAY" de la colonne J.

Pour cela j'ai essayé d'adapter le code, mais plus aucune autorisation ne fonctionne, la feuille est complètement verrouillée quelque soit l'utilisateur.

Private Sub CommandButton1_Click() 'Valider
Dim Ws As Worksheet, i&
Application.ScreenUpdating = 0
If ComboBox1 = "" Or TextBox2 = "" Then
MsgBox "Merci de rentrer vos noms et mot de passe"
Exit Sub
End If
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
If TextBox2 = ComboBox1.Column(1) Then
ActiveSheet.Unprotect "citedia"
If ComboBox1.Column(2) = "Acheteur" Then
For i = 17 To [A65536].End(3).Row
If Cells(i, 1) = ComboBox1.Column(0) Then Cells(i, 7).Resize(, 8).Locked = 0
Next
If ComboBox1.Column(2) = "A signer/F. DEMAY" Then
For i = 17 To [A65536].End(3).Row
If Cells(i, 10) = ComboBox1.Column(2) Then Cells(i, 10).Locked = 0
Next
If ComboBox1.Column(2) = "A signer/S. WEHRLE" Then
For i = 17 To [A65536].End(3).Row
If Cells(i, 10) = ComboBox1.Column(2) Then Cells(i, 10).Locked = 0
Next
ElseIf ComboBox1.Column(2) = "Comptable" Then
Range("I17:I" & [A65536].End(3).Row).Locked = 0
' ElseIf ComboBox1.Column(2) = "Signataire" Then
' Range("J17:J" & [A65536].End(3).Row).Locked = 0
ElseIf ComboBox1.Column(2) = "DAF" Then
Range("K17:K" & [A65536].End(3).Row).Locked = 0
ElseIf ComboBox1.Column(2) = "Admin" Then
Call Affiche_tt_Feuilles
ActiveSheet.Unprotect "citedia"
GoTo Suite


' If ComboBox1.Column(2) = "Comptable" Then
' For i = 17 To [A65536].End(3).Row
' If Cells(i, 9) = ComboBox1.Column(2) Then Cells(i, 9).Locked = 0
' Next
' If ComboBox1.Column(2) = "DAF" Then
' For i = 17 To [A65536].End(3).Row
' If Cells(i, 11) = ComboBox1.Column(2) Then Cells(i, 11).Locked = 0
' Next
' If ComboBox1.Column(2) = "Admin" Then
' Call Affiche_tt_Feuilles

End If
End If
End If
End If


Merci à vous.
 

Pièces jointes

  • MODELE_validation des commandes V10g.xlsm
    291.7 KB · Affichages: 31
  • MODELE_validation des commandes V10g.xlsm
    291.7 KB · Affichages: 33
  • MODELE_validation des commandes V10g.xlsm
    291.7 KB · Affichages: 37

Arnold35

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

J'ai remplacé les 2 "If" par "Elseif" et ça fonctionne!!

En tout cas c'est vraiment bien car en 3 jours j'ai pas mal progressé grace à vous!

Je continue de tester le fichier.

Merci
 

job75

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

Re,

Je me suis rendu compte que mes fichiers .xls sont vérolés (illisibles en .xlsm), sans doute à cause de mon convertisseur sur Excel 2003.

J'ai donc mis mes codes dans votre fichier .xlsm du post #29, voir pièce jointe.

Apparemment pas de problème avec la cellule D6 une fois déverrouillée manuellement.

A+
 

Pièces jointes

  • MODELE_validation des commandes V10g(1).xlsm
    287.1 KB · Affichages: 41

job75

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

Re,

Si l'on veut des astérisques * quand on tape le mot de passe il faut un UserForm.

Il est chargé par la Workbook_Open.

Fichier (2).

A+
 

Pièces jointes

  • MODELE_validation des commandes V10g(2).xlsm
    284.6 KB · Affichages: 33
Dernière édition:

Yaloo

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

Bonjour à tous,

@ Job :D, ton premier fichier fonctionnait correctement, ton code est beaucoup plus concis que le mien. Par contre, en l'état, il faut mettre les utilisateurs et leurs mots de passe en dur dans la macro :(

Pour le verrouillage de la cellule D6, c'est que j'utilisais
Cells.Locked = -1
, alors qu'il vaut mieux prendre
Range("A17:I" & [A65536].End(3).Row).Locked = -1
Cela ne touche que les cellules sous la barre d'entête.

Pourquoi séparer S. WERHLE et S. WEHRLE (Signataire) dans l'onglet "Employés", c'est bien la même personne ?
Quand l'utilisateur va se connecter, choisir entre les 2 risque d'être pénible pour lui.

A te relire

Martial
 

Arnold35

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

Pourquoi séparer S. WERHLE et S. WEHRLE (Signataire) dans l'onglet "Employés", c'est bien la même personne ?
Quand l'utilisateur va se connecter, choisir entre les 2 risque d'être pénible pour lui.

A te relire

Martial


En fait j'ai différencié les 2 car je ne savais pas comment faire pour que S. WEHRLE ai le même profil pour pouvoir à la fois modifier la colonne H des commandes où son nom figure dans la colonne A, et en même temps qu'il puisse modifier la colonne J uniquement dans les cellules où figurent "A signer/S. WEHRLE".

J'ai donc bricolé à ma façon en tant que néophyte. :D

Je vous joins le dernier fichier à jour.

Merci
 

Arnold35

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

Re,



A priori ce n'est pas du tout gênant puisque c'est l'administrateur du fichier qui les modifiera si nécessaire.

Et normalement les modifications seront rares non ?

A+

Oui les modifications seront normalement rares je pense.

En pensant à cela, Y a t-il un code pour que l'administrateur et uniquement l'administrateur puisse avoir accès au VBA?

Merci
 

Arnold35

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

job75,

J'ai rajouté quelques infos dans mon formulaire, notamment une combobox avec les différents taux de TVA.

Seulement ces taux s'affichent dans la combobox en 0,2 ou 0,1 ou 0,055.

Comment puis-je faire pour modifier le format en 20%, 10% et 5,5%?

Voici mon code de base qui remplit ma combobox:

For i = 17 To 20
ComboBox_TVA1.AddItem Sheets("Table").Cells(i, 1)
Next



Autrement, j'ai également rajouté des PT TTC par ligne pour les 12 lignes dans le formulaire. Et j'ai essayé de les lier avec les PT HT et les taux de TVA, mais ça coince. Je me suis inspiré du code du dessus avec les 3 variables x,y,z mais je ne suis pas doué.

Pouvez vous me dire où je pêche?

Merci d'avance
 
Dernière édition:

Arnold35

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

Je ne peux pas joindre le fichier car il dépasse le poids autorisé.

Le code donne cela:

'calculs automatiques des textbox de Prix Total HT
Function pv(a): pv = Replace(Replace(a, ".", ","), " ", ""): End Function
Function vp(a): vp = Replace(Replace(Replace(a, ",", "."), " ", ""), Chr(160), ""): End Function
Function fo(a): fo = Format(a, "#,##0.00"): End Function

Sub TextBox_PuHT_1_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_1_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_2_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_2_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_3_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_3_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_4_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_4_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_5_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_5_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_6_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_6_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_7_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_7_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_8_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_8_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_9_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_9_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_10_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_10_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_11_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_11_AfterUpdate(): valeurs: End Sub
Sub TextBox_PuHT_12_AfterUpdate(): valeurs: End Sub
Sub TextBox_Qté_12_AfterUpdate(): valeurs: End Sub

Sub valeurs()
Const TVA = 0.2 ' INDIQUER ICI le TAUX de TVA
Dim i&, x As Control, y As Control, z As Control, TotalHT
For i = 1 To 12
' on affecte à x,y,z les trois derniers controles de chaque ligne
Set x = Me.Controls("TextBox_Qté_" & i): Set y = Me.Controls("TextBox_PuHT_" & i)
Set z = Me.Controls("TextBox_PTHT_" & i)
' on en profite pour redéfinir les tabutations
Me.Controls("TextBox_Réf_" & i).TabIndex = 4 * (i - 1) + 0
Me.Controls("TextBox_Désignation_" & i).TabIndex = 4 * (i - 1) + 1
x.TabIndex = 4 * (i - 1) + 2: y.TabIndex = 4 * (i - 1) + 3
' on prend le controle, on remplace les virgules par des points (vp)
' on trouve la valeur numérique (VAL), si c'est un montant monétaire
' on le formate(0:00 par fo),on remplace les points par des virgules (vp)
' on réaffecte le résultat au controle
If x <> "" Then x = pv(Val(vp(x)))
If y <> "" Then y = pv(fo(Val(vp(y))))
' si x ou y ne sont pas vide, on calcule le montant de la ligne et on l'inscrit
If Trim(x & y) <> "" Then z = pv(fo(Val(vp(x)) * Val(vp(y)))) Else z = ""
' on en profite pour rajouter le montant de la ligne au total hors taxe
TotalHT = TotalHT + Val(vp(z))
Next i

Dim e&, a As Control, b As Control, c As Control, TotalTTC
For e = 1 To 12
' on affecte à a,b,c les trois derniers controles de chaque ligne
Set a = Me.Controls("TextBox_PTHT_" & e): Set b = Me.Controls("Combobox_TVA" & e)
Set c = Me.Controls("TextBox_PT_TTC" & e)
' on en profite pour redéfinir les tabutations
Me.Controls("TextBox_Réf_" & e).TabIndex = 4 * (e - 1) + 0
Me.Controls("TextBox_Désignation_" & e).TabIndex = 4 * (e - 1) + 1
x.TabIndex = 4 * (e - 1) + 2: y.TabIndex = 4 * (e - 1) + 3: b.TabIndex = 4 * (e - 1) + 4
' on prend le controle, on remplace les virgules par des points (vp)
' on trouve la valeur numérique (VAL), si c'est un montant monétaire
' on le formate(0:00 par fo),on remplace les points par des virgules (vp)
' on réaffecte le résultat au controle
If a <> "" Then a = pv(Val(vp(a)))
If b <> "" Then b = pv(fo(Val(vp(b))))
' si x ou y ne sont pas vide, on calcule le montant de la ligne et on l'inscrit
If Trim(a & b) <> "" Then c = pv(fo(Val(vp(a)) * (1 + Val(Replace(b, "%", ""))))) Else c = ""

' on en profite pour rajouter le montant de la ligne au total hors taxe
'TextBox_Mtt_TTC_commandé = Replace(TextBox_Mtt_TTC_commandé, ",", ".") + Val(vp(c))
Next e


' on inscrit le total hors taxe
'TextBox1_Mtt_total_HT = pv(fo(TotalHT))
' on inscrit le total TTC
'TextBox_Mtt_TTC_commandé = pv(fo(TotalHT * (1 + TVA)))
End Sub
 
Dernière édition:

Arnold35

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

Merci BrunoM45

Voici donc le fichier, je bloque sur ce code en triangle pour calculer le Prix TTC de chaque ligne (PT HT* (1+ taux TVA), puis la somme des 12 lignes donnant le montant total TTC.

(c) CJoint.com, 2012

Je ne sais pas si c'est dans la syntaxe ou si c'est le format des combobox TVA qui pose problème
 

Discussions similaires

Statistiques des forums

Discussions
315 091
Messages
2 116 117
Membres
112 665
dernier inscrit
JPHD