Ouvrir en VBA une base de données protégée par mot de passe
Je dispose d’une base de données MDB protégée par mot de passe. Je souhaiterais l’ouvrir en VBA, à partir d’une autre base. Comment faire ?
Petit rappel
Il existe plusieurs méthodes pour sécuriser une base de données Access. Notamment, quand on parle de mot de passe, on peut :
- Protéger la base entière par un mot de passe unique (menu Outils / Sécurité / Définir le mot de passe)
- Protéger la base avec un mot de passe différent pour chaque utilisateur (menu Outils / Sécurité / Assistant Sécurité au niveau utilisateur). C’est ce que Microsoft appelle la « sécurité utilisateur ».
Cet article suppose que la base est protégée par la première méthode (qui n’est pas la meilleure en soi, mais c’est un autre sujet…).
Le bout de code VB
Voici un exemple de procédure VB (à recopier dans un module standard VBA) qui se connecte à une base. Vous pouvez aménager selon vos besoins, bien sûr.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
' --- ' Ouverture d'une base protégée par mot de passe ' --- ' Sub OuvrirBaseSecurisee() Dim db As DAO.Database Dim strConnexion As String Dim strCheminBase As String ' Les infos sur la base (chemin et paramètres de connexion) strCheminBase = "C:...votre_base.mdb" strConnexion = "MS Access;pwd=votre_mot_de_passe" ' On ouvre la base de données On Error GoTo OuvertureErreur Set db = OpenDatabase(strCheminBase, False, False, strConnexion) Debug.Print "Base de données ouverte !" ' Votre traitement ici... ' ... par exemple, la liste des tables de la base 'distante' Dim tdf As DAO.TableDef Debug.Print "Liste des tables :" For Each tdf In db.TableDefs Debug.Print "> Table : " & tdf.Name Next ' On ferme la base de données db.Close Set db = Nothing Debug.Print "Traitement terminé !" Exit Sub ' Traitement des erreurs OuvertureErreur: MsgBox "Erreur : " & Err.Number _ & vbCrLf & Err.Description, _ vbExclamation Exit Sub End Sub |
Quelques compléments
- Renseignez la chaîne
strCheminBase
pour qu’elle pointe vers un fichier existant (l’exemple de code ne fait pas cette vérification, pour la démo). - Renseignez également la chaîne
strConnexion
qui contient la chaîne de connexion à fournir, dont le mot de passe. Cette chaîne peut prendre la forme"MS Access;pwd=votre_mot_de_passe"
ou tout simplement";pwd=votre_mot_de_passe"
, pour une base MDB. - Les 2 arguments à
False
sont respectivement les options de la connexion, et le fait d’ouvrir la base en mode exclusif ou non. Contrairement à ce que dit la documentation, ces arguments doivent être fournis lorsqu’on fournit une chaîne de connexion. Consultez l’aide deOpenDatabase()
si vous souhaitez plus de détails. - Vous verrez d’ailleurs, dans l’aide, qu’un objet
Workspace
peut également être fourni. Si ce n’est pas le cas (comme ici, pour alléger le code), c’est l’espace de travail par défaut qui est utilisé. Devrait suffire ! - Une fois la base ouverte, vous pouvez lui appliquer ensuite n’importe quel traitement. Dans l’exemple, on affiche la liste des tables de cette base dans la fenêtre Exécution. Pensez à faire apparaître celle-ci dans VBE, pour vos tests, en appuyant sur
[CTRL]+G
.
gar merci