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 à tous,

Finalement j'ai réussi à solutionner mon calcul de TVA.

En revanche, j'ai un problème dans l'affichage de la TVA dans la combobox quand elle est selectionnée.
Par exemple si je sélectionne la TVA à 5,5% , ça va m'afficher "5,". Et le calcul qui en découle n'est pas exact.

Voici à quoi ressemble mon code:
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
Function lo(a): lo = Format(a, "0.#"): End Function

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(fo(Val(vp(a)))) 'PTHT
If b <> "" Then b = lo(Val(b)) 'TVA
' si a ou b ne sont pas vides, on calcule le montant de la ligne et on l'inscrit
If Trim(a & b) <> "" Then c = fo(pv(Val(vp(a))) * (1 + pv(Val(vp(b))) / 100)) 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))
TotalTTC = TotalTTC + Val(vp(c))
Next e


En rouge les endroits qui pose problème.

Avez vous une idée car ça fait 2h que je tourne en rond sans arriver à mes fins...

Merci beaucoup de votre aide
 

Yaloo

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

Bonsoir Arnold, le forum,

Vois avec le fichier ci-dessous, j'ai rajouté une variable m permettant de récupérer le montant de la TVA.
De plus, j'ai changé tes fonctions pour les TVA avec Change et non AfterUpdate, permettant de changer le montant immédiatement.

A+

Martial
 

Pièces jointes

  • modele_validation_des_commandes_v10j1.xlsm
    296.9 KB · Affichages: 47
  • modele_validation_des_commandes_v10j1.xlsm
    296.9 KB · Affichages: 35
  • modele_validation_des_commandes_v10j1.xlsm
    296.9 KB · Affichages: 54

Arnold35

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

Merci Yaloo, c'est exactement ce que je cherchais. Je n'aurais jamais pensé à mettre lo(b.value).

J'étais plutôt parti sur lo(val(b)).

Avez vous une idée pour éviter d'avoir plusieurs noms dans l'useform mot de passe.

Actuellement j'ai S. WEHRLE et S. WEHRLE (signataire). Y a t-il une possibilité de n'avoir qu'un seul nom qui permette de valider dans les 2 colonnes?

Il faut que je repense l'onglet "Employés"?

Merci beaucoup en tout cas. Mon fichier ressemble de plus en plus au produit fini.
 

Yaloo

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

Bonjour Arnold, le forum,

En mettant seulement S. WEHRLE il est possible de débloquer des cellules différentes en fonction de ce qui est inscrit dans celles-ci.
Peux-tu me mettre exactement ce que tu souhaites faire ?
Lors de l'accès, faut-il débloquer de A à H et la colonne J ? Ou faut-il débloquer uniquement de A à H ? Et si dans la colonne J, il est noté "A signer/S. WEHRLE, on libère la colonne J ? Doit-on bloquer le reste des colonnes ?

A te relire

Martial
 

Yaloo

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

Re,

Je ne suis pas sûr, car toute ta colonne H est déverrouillée complètement, pas seulement les cellules "A signer S. WERHLE", mais je n'ai peut-être pas compris ce que tu voulais faire ;)

A+
 

Yaloo

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

Suite à mon dernier message, je pense que le fichier ci-joint réponds à ta demande, vérifier juste les N° de colonne.

A+
 

Pièces jointes

  • modele_validation_des_commandes_v10j1.xlsm
    296.2 KB · Affichages: 33
  • modele_validation_des_commandes_v10j1.xlsm
    296.2 KB · Affichages: 33
  • modele_validation_des_commandes_v10j1.xlsm
    296.2 KB · Affichages: 41

Arnold35

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

En fait, S. WEHRLE qui est le responsable peut venir modifier toutes la colonnes à sa guise.

Par contre j'ai 2 questions:

1) Je me demandais s'il était possible de venir copier les formules de chaque colonne sur chaque cellule vide.
Par exemple si la cellule d'une commande est modifiée et par inadvertance le contenu est supprimé, il n'y aura plus rien écrit dans celle -ci.
Existe t-il un code pour venir remplir les cellules par les formules de la colonne si celles-ci sont vidées?

2) Est-il possible de conditionner dans le formulaire "Ajouter une commande" le nom de l'acheteur.
Par exemple, si D. PRODHOMME s'est logué comme utilisateur, je souhaiterais que son nom s'affiche directement dans le formulaire Ajouter une commande s'il souhaite en passer une. ça éviterait par exemple que D. PRODHOMME passe une commande sous le nom de quelqu'un d'autre.

Merci beaucoup
 
Dernière édition:

Yaloo

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

Pour S. WEHRLE, il faut créer un "Responsable", et lui ouvrir accès à tout, comme pour l'Admin sans l'accès aux feuilles non souhaitées.

Pour le 1, je ne pense pas que cela soit possible. A moins peut-être de copier les données à chaque modification dans un autre endroit (autre feuille) et de créer un bouton pour recoller la sauvegarde en cas de besoin. Mais ça risque d'alourdir le fichier.

Pour le 2, il suffit de mettre une variable Public prenant le nom du login, et de la copier au moment de la commande. Tu n'auras plus besoin du ComboBox_Acheteur.

A+

Martial
 

Arnold35

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

Qu'est ce que c'est une variable public exactement? Comment l'utilise t-on?

Est ce que je peux mettre un code sous le "Private Sub UserForm_Initialize()" du formulaire "Ajouter commande" du type:

Textbox_Nom_Acheteur.value = Combobox1.value ==> Combobox1 est la combobox du formulaire Mot de passe qui affiche le nom de la personne qui s'est loguée

Est-ce faisable de lier 2 éléments appartenant à des formulaires différents?

Merci
 

Yaloo

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

Une variable Public est une variable que l'on enregistre et garde pendant toute l'ouverture du fichier. Elle peut cependant être changée quand l'on veut ou remise à 0.
La déclaration de cette variable est toujours positionnée dans un Module standard.
Dans ton fichier, je l'ai mise dans Module1, pour la déclarée il suffit de la précéder par Public
Ensuite, dans l'UserForm1 on attribue la valeur du ComboBox1 à la variable Utilisateur, elle est donc enregistrée.
A l'ouverture de Ajout_commande (j'ai ajouté un Label), il suffit de faire l'inverse, on donne la valeur Utilisateur au Label.
Pour le N° de tél et le mail, on va chercher directement de la Feuil4 ("Base Acheteurs").

Si tu changes de personne en cours d'utilisation avec l'UserForm1, la variable prend la valeur de la nouvelle personne.

A+

Martial

PS : J'ai mis On Error Resume Next pour la recherche du Tél et du Mail, car cela provoque une erreur si tu lances Ajout_commande en étant logué sur une personne ne se trouvant pas dans la liste des acheteurs.
 

Pièces jointes

  • modele_validation_des_commandes_v10j1.xlsm
    309.4 KB · Affichages: 35
  • modele_validation_des_commandes_v10j1.xlsm
    309.4 KB · Affichages: 38
  • modele_validation_des_commandes_v10j1.xlsm
    309.4 KB · Affichages: 34

Discussions similaires

Statistiques des forums

Discussions
312 247
Messages
2 086 591
Membres
103 248
dernier inscrit
Happycat