XL 2010 Mot de passe à modifier dans tout le code VBA

Orson83

XLDnaute Impliqué
Bonjour à tous,
Je ne parviens pas à faire une macro un peu compliquée (pour moi) :)
Le code VBA de plusieurs pages et modules contient un mot de passe unique qui sert à :
1. protéger/déprotéger le classeur en totalité par macro
2. déprotéger et reprotéger des lignes de macro servant à masquer ou démasquer des lignes et des colonnes verrouillées
A l'aide d'une zone dédiée, dans la page d'accueil, serait-il possible de modifier par macro le mot de passe dans toutes les macro et partout ou il se trouve dans le code ?
Mon fichier Excel est destiné à être dupliqué pour différents collaborateurs et chacun devrait avoir un MDP différent.
Je joins un fichier exemple dans ce post. Merci pour votre aide.
PS : certaines lignes de code VBA MDP ne devraient pas se trouver là (c'est pour l'exemple). La zone dédiée au changement du mot de passe sera supprimée après modification.
 

Pièces jointes

  • ModifMDP-V1.xlsm
    44.5 KB · Affichages: 22
Solution
Re,
Et "Pour le plaisir...." comme dirait Herbert !
Je viens de me souvenir d'une production d'un très bon contributeur de ce forum, @+Thierry (Herbert ne doit pas être sa tasse de thé à notre fan des Rolling stones ;) ), avec le fichier joint qui pourrait résoudre d'un coup ta problématique avec une solution tout en un !
Il provient d'un fil de ce forum mais je ne sais pas s'il n'a pas disparu lors du Krach de 2007.
Bonne lecture et bonne utilisation.
Bien sûr si tu n'arrives pas à utiliser les ressources que je t'ai données, reviens poser tes questions : quelqu'un pourra toujours t'aider.
Merci Spitnolan08, CHALET53, le forum,
Ce fichier USF-PassWord... est une bonne solution mais pas adapté à mes besoins (3 niveaux...

CHALET53

XLDnaute Barbatruc
Bonjour,
Si je comprends ta demande, tu voudrais que chaque utilisateur, ayant tous les mêmes autorisations, dispose de son prorpre mot de passe.
Je ne pense pas qu'il soit possible de modifier un programme à partir d'un autre programme.
Une solution consisterait :
1) réserver une cellule dans le fichier où serait stocké le MdP : nommer cette cellule (ex : mdp en AA1)
2) rendre invisible cette cellule (blanc sur blanc)
3) Remplacer dans tous les codes le mot de passe en dur par : Range("mdp").value
4) Pas besoin de saisir l'ancien mdp, il suffit de le comparer à celui en AA1. Seulement, saisir le nouveau mdp
Lors de la modif du mdp, celui-ci est écrit en AA1
Dans le fichier : j'ai écrit le code correspondant à Modifier le MDP
Il faut modifier dans tous les programmes le code en dur par : Range("mdp").value
Lors de la transmission du fichier à un collaborateur, lui donner le nouveau mot de passe et l'inviter à le modifier

PS : Sous excel, les mots de passe : ça vaut ce que ça vaut !!!!
 

Pièces jointes

  • Tchot ModifMDP-V1.xlsm
    43.4 KB · Affichages: 10

Orson83

XLDnaute Impliqué
Bonjour,
Si je comprends ta demande, tu voudrais que chaque utilisateur, ayant tous les mêmes autorisations, dispose de son prorpre mot de passe.
Je ne pense pas qu'il soit possible de modifier un programme à partir d'un autre programme.
Une solution consisterait :
1) réserver une cellule dans le fichier où serait stocké le MdP : nommer cette cellule (ex : mdp en AA1)
2) rendre invisible cette cellule (blanc sur blanc)
3) Remplacer dans tous les codes le mot de passe en dur par : Range("mdp").value
4) Pas besoin de saisir l'ancien mdp, il suffit de le comparer à celui en AA1. Seulement, saisir le nouveau mdp
Lors de la modif du mdp, celui-ci est écrit en AA1
Dans le fichier : j'ai écrit le code correspondant à Modifier le MDP
Il faut modifier dans tous les programmes le code en dur par : Range("mdp").value
Lors de la transmission du fichier à un collaborateur, lui donner le nouveau mot de passe et l'inviter à le modifier

PS : Sous excel, les mots de passe : ça vaut ce que ça vaut !!!!
Bonjour CHALET53, le forum,
Merci pour cette proposition très intéressante qui fonctionne très bien (je la conserve au chaud :) ).
Ce qui me gène c'est que le nouveau MDP est inscrit dans une cellule qui est facilement trouvable depuis le gestionnaire de noms (nom, valeur et N° de cellule). effectivement, il s'agit de données très confidentielles.
N'est t-il pas possible de créer une macro qui balayerait le code VBA et qui modifierait une occurrence précise ?
Autre idée, est-ce-que le mot de passe ne pourrait pas être hébergé sur un serveur distant ou Google Drive ?
Tchotchodu31
 

CHALET53

XLDnaute Barbatruc
C'est peut-être possible d'héberger le mot de passe sur Onedrive ou Google Drive
Cela veut dire que chacun des utilisateurs ait un fichier nommé MDP.xlsm (par exemple) dans son environnement
La démarche serait pour modifier le mot de passe
Saisie de l'ancien / Contrôle sur OneDrive (ouverture fichier/Récup mdp/clôture fichier)
si ok
envoi du nouveau mdp dans le fichier sur OneDrive (ouverture/maj)fermeture)

Pour les protection des feuilles / Déprotection : même navette entre le fichier de travail et l'environnement OneDrive
 

Spitnolan08

XLDnaute Barbatruc
Bonjour le fil,
Je ne sais pas si c'est toujours possible dans les nouvelles versions d'Excel (Tout change...) mais autrefois, il était tout à fait possible de modifier un code par VBA, à fortiori de modifier un mot de passe.
Je n'ai pas le temps pour vous aider en détail mais, dans le principe, il faut, par exemple, créer une commande sur la page d'ouverture du classeur avec deux cellules à côté pour les mots de passe actuel et futur.
En activant la commande cela permettrait d'autoriser la modification du mot de passe et de modifier celui ci. Car, il ne fudrait pas que n'importe qui puisse bidouiller le mdp...
Pour cela, cf les excellents tutos de Silyroad.
silkyroad.developpez.com
et en particulier :

VB:
Remplacer un mot dans toutes les procédures d'un classeur.
               Cet exemple remplace la chaîne "Feuil1" par "Feuil3".               


              
Vba
Sélectionnez
Sub RemplacementMotDansProcedure()
'Nécéssite d'activer la référence
'"Visual basic For Application Extensibility 5.3"
'
Dim Ancien As String, Nouveau As String, Cible As String
Dim VBComp As VBComponent
Dim i As Integer
Dim Wb As Workbook

Set Wb = Workbooks("NomClasseur.xls")

Ancien = "Feuil1"
Nouveau = "Feuil3"

For Each VBComp In Wb.VBProject.VBComponents
For i = 1 To VBComp.CodeModule.CountOfLines
Cible = VBComp.CodeModule.Lines(i, 1)
Cible = Replace(Cible, Ancien, Nouveau)
VBComp.CodeModule.ReplaceLine i, Cible
Next i
Next VBComp
End Sub
 

Orson83

XLDnaute Impliqué
Bonjour le fil,
Je ne sais pas si c'est toujours possible dans les nouvelles versions d'Excel (Tout change...) mais autrefois, il était tout à fait possible de modifier un code par VBA, à fortiori de modifier un mot de passe.
Je n'ai pas le temps pour vous aider en détail mais, dans le principe, il faut, par exemple, créer une commande sur la page d'ouverture du classeur avec deux cellules à côté pour les mots de passe actuel et futur.
En activant la commande cela permettrait d'autoriser la modification du mot de passe et de modifier celui ci. Car, il ne fudrait pas que n'importe qui puisse bidouiller le mdp...
Pour cela, cf les excellents tutos de Silyroad.
silkyroad.developpez.com
et en particulier :

VB:
Remplacer un mot dans toutes les procédures d'un classeur.
               Cet exemple remplace la chaîne "Feuil1" par "Feuil3".              


             
Vba
Sélectionnez
Sub RemplacementMotDansProcedure()
'Nécéssite d'activer la référence
'"Visual basic For Application Extensibility 5.3"
'
Dim Ancien As String, Nouveau As String, Cible As String
Dim VBComp As VBComponent
Dim i As Integer
Dim Wb As Workbook

Set Wb = Workbooks("NomClasseur.xls")

Ancien = "Feuil1"
Nouveau = "Feuil3"

For Each VBComp In Wb.VBProject.VBComponents
For i = 1 To VBComp.CodeModule.CountOfLines
Cible = VBComp.CodeModule.Lines(i, 1)
Cible = Replace(Cible, Ancien, Nouveau)
VBComp.CodeModule.ReplaceLine i, Cible
Next i
Next VBComp
End Sub
Bonjour Spitnolan08, CHALET53, le forum,
Merci pour cette commande qui devrait correspondre à ma demande.
Je vais la tester et je reviendrai vers vous rapidement.
S'il y a d'autres idées, je prends.
Merci.
 

Spitnolan08

XLDnaute Barbatruc
Re,
Et "Pour le plaisir...." comme dirait Herbert !
Je viens de me souvenir d'une production d'un très bon contributeur de ce forum, @+Thierry (Herbert ne doit pas être sa tasse de thé à notre fan des Rolling stones ;) ), avec le fichier joint qui pourrait résoudre d'un coup ta problématique avec une solution tout en un !
Il provient d'un fil de ce forum mais je ne sais pas s'il n'a pas disparu lors du Krach de 2007.
Bonne lecture et bonne utilisation.
Bien sûr si tu n'arrives pas à utiliser les ressources que je t'ai données, reviens poser tes questions : quelqu'un pourra toujours t'aider.
 

Pièces jointes

  • USF-PassWord-Multi-Levels-V01.00.xls
    59.5 KB · Affichages: 13
Dernière édition:

Orson83

XLDnaute Impliqué
Re,
Et "Pour le plaisir...." comme dirait Herbert !
Je viens de me souvenir d'une production d'un très bon contributeur de ce forum, @+Thierry (Herbert ne doit pas être sa tasse de thé à notre fan des Rolling stones ;) ), avec le fichier joint qui pourrait résoudre d'un coup ta problématique avec une solution tout en un !
Il provient d'un fil de ce forum mais je ne sais pas s'il n'a pas disparu lors du Krach de 2007.
Bonne lecture et bonne utilisation.
Bien sûr si tu n'arrives pas à utiliser les ressources que je t'ai données, reviens poser tes questions : quelqu'un pourra toujours t'aider.
Merci Spitnolan08, CHALET53, le forum,
Ce fichier USF-PassWord... est une bonne solution mais pas adapté à mes besoins (3 niveaux, renouvellement de MDP, pas utile).
Au fil de ces échanges, grâce à vous, je retiens 2 solutions qui me semblent très intéressantes :
1. Héberger les MDP utilisateur sur Google Drive avec un lien dans le code VBA
Lien distant : https://docs.google.com/spreadsheet...eJCyAF66MZznxsAg/edit#gid=1964869622&range=B4
2. Utiliser la méthode de Spitnolan08 "Post#5" pour modifier les urls dans la totalité du code VBA
Grâce à ces 2 étapes, le mot de passe ne sera pas visible en crackant Excel et les modifications des url MDP seront facilité avec la zone de modification en pied de page Accueil (supprimée après modif).
Je joins mon nouveau fichier car les urls dans le code ne fonctionnent pas (MdlProtect) :
VB:
Range("https://docs.google.com/spreadsheets/d/1Amj5m_-NNRX3m5voeJCyAF66MZznxsAg/edit#gid=1964869622&range=B4").Value
Et je n'ai pas osé tester la modification des URLs dans le code...
Merci encore pour votre aide précieuse.
François
 

Pièces jointes

  • Tchot-ModifMDP-V2.xlsm
    44.6 KB · Affichages: 10

Discussions similaires

Réponses
2
Affichages
453
Réponses
5
Affichages
711
Compte Supprimé 979
C

Statistiques des forums

Discussions
315 095
Messages
2 116 166
Membres
112 675
dernier inscrit
Tazra_IMOU