formateur informatique

Accéder à un classeur Excel protégé par un mot de passe

Accueil  >  Bureautique  >  Access  >  Access VBA  >  Accéder à un classeur Excel protégé par un mot de passe
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Classeur Excel protégé

Nous avions déjà appris à faire communiquer Access et Excel par le code VBA. L'idée était de pouvoir demander à Excel de réaliser des calculs pour les récupérer et les afficher sur un formulaire Access. Mais dans ce cas pratique, le classeur Excel n'était pas protégé. En conséquence, aucune restriction d'accès n'était émise. Dans ce nouveau volet, nous allons apprendre à accéder aux mêmes ressources lorsque le classeur Excel est protégé par un mot de passe chiffré.

Base de données Access à télécharger
Pour mener à bien cette étude, nous suggérons d'appuyer les travaux sur une base de données réalisant déjà cette connexion avec un fichier Excel. Comme vous pouvez le voir, la décompression livre un fichier de base de données, nommé ouvrir-excel-protege, accompagné d'un fichier Excel, nommé calculs-de-primes.
  • Double cliquer sur le classeur pour l'ouvrir dans Excel,
Accès au classeur Excel protégé par un mot de passe

Comme vous le constatez, la route est barrée. L'accès à ce classeur Excel est effectivement protégé par un mot de passe.
  • Taper le mot de passe 1319 et valider par Ok,
Nous découvrons un tableau des ventes réalisées par des commerciaux d'une entreprise. Elles ne sont pas encore toutes renseignées. Ces inscriptions doivent se faire à distance depuis un formulaire Access. Une formule existe en colonne H. Elle permet de calculer la prime à attribuer. Ce calcul dépend de la tranche dans laquelle se trouve chaque résultat, dans le petit tableau situé entre les colonnes J et K. C'est la fonction RechercheV, en mode approximatif, qui est utilisée.

Le formulaire de communication
Pour terminer les présentations, nous proposons maintenant d'accéder au formulaire Access devant interroger cette feuille Excel pour rapatrier les données concordantes.
  • Fermer le classeur Excel en cliquant sur la croix de sa fenêtre,
  • Double cliquer sur la base de données pour l'ouvrir dans Access,
  • Cliquer sur le bouton Activer le contenu du bandeau de sécurité,
  • Dans le volet de navigation, double cliquer sur le formulaire fCommerciaux pour l'exécuter,
Formulaire Access pour accéder aux données d-un classeur Excel protégé par un mot de passe

Nous retrouvons le formulaire que nous avions développé à l'occasion de la formation que nous avons évoquée précédemment. En fonction d'un chiffre inscrit dans la zone CA, la prime est calculée par la feuille Excel que nous venons de présenter. Cette prime est alors rapatriée en VBA Access dans la zone intitulée Prime.

Mais par rapport aux travaux d'origine, une modification notable est à observer. Elle concerne la zone de saisie intitulée Mot de passe, placée sur la droite du formulaire, juste au-dessus de la barre de navigation personnalisée. Si elle n'est pas correctement renseignée, la connexion à Excel en arrière-plan, échouera inévitablement. Et nous proposons de le démontrer.
  • Pour ce premier commercial, remplacer le CA 22000 par 55000 par exemple,
  • Puis, enfoncer la touche tabulation du clavier pour le valider,
Comme vous pouvez le voir, Excel ne dit pas non à l'interaction, mais une boîte de dialogue intermédiaire se dresse. Elle demande tout d'abord de renseigner le mot de passe d'accès pour faire sauter la protection. Bien sûr, si vous le renseignez (1319), le traitement se poursuit, la communication est établie par le code VBA Access déjà en place et la donnée calculée par Excel est importée dans la zone de texte intitulée Prime.

Mais ce type de fonctionnement n'est pas satisfaisant du tout. La communication entre Access et Excel doit s'établir en toute transparence pour l'utilisateur, malgré la protection en vigueur sur le classeur, à plus forte raison si de nombreuses modifications sont à entreprendre sur le formulaire.

Le code VBA existant
L'intervention que nous devons entreprendre dans le code VBA déjà en place est absolument mineure. C'est bien là que réside toute la puissance de ce langage. Nous proposons d'accéder à la procédure qui se déclenche dès que l'utilisateur saisit ou modifie un chiffre d'affaires.
  • A gauche du ruban Accueil, cliquer sur la flèche du bouton Affichage,
  • Dans les propositions, choisir le mode Création,
  • Sur le formulaire en conception, cliquer sur la zone de texte du CA (c_chiffre),
  • Dès lors, activer l'onglet Evénement de sa feuille de propriétés,
  • Puis, cliquer sur le petit bouton associé à son événement Après MAJ,
Comme une procédure lui est déjà associée, nous basculons directement dans l'éditeur VBA Access, plus précisément entre les bornes de la procédure événementielle c_chiffre_AfterUpdate. Son code VBA se déclenche dès qu'un montant est saisi ou modifié dans cette zone de texte.

Très brièvement, pour résumer le code. Une référence à Excel est ajoutée au projet. C'est ainsi que nous prouvons créer une instance du tableur, pointer sur le classeur dont le chemin d'accès est enregistré dans la variable chemin et désigner sa feuille nommée Primes, sans l'afficher :

...
Set fenetre = CreateObject("Excel.Application")
Set classeur = fenetre.Workbooks.Open(chemin)
Set feuille = classeur.Worksheets("Primes")
fenetre.Visible = False
...


Ensuite, nous cherchons la personne concernée dans le tableau Excel et nous rapatrions la prime calculée par ce dernier, sur le formulaire Access :

c_prime.Value = feuille.Cells(compteur, 8).Value

Ouvrir le classeur protégé
Nous l'avons annoncé précédemment, pour accéder aux ressources d'un classeur Excel protégé par un mot de passe, l'adaptation du code VBA est mineure. Il suffit simplement de transmettre le mot de passe dans la chaîne d'ouverture du fichier désigné, par la méthode Open de la collection Workbooks de l'instance Excel représentée ici par l'objet fenetre.
  • Dans le code VBA, adapter la ligne concernée comme suit :
...
chemin = Application.CurrentProject.Path & "\calculs-de-primes.xlsx"
Set fenetre = CreateObject("Excel.Application")
Set classeur = fenetre.Workbooks.Open(chemin, , , , mp.Value)
Set feuille = classeur.Worksheets("Primes")
fenetre.Visible = False
...


Dans la méthode Open de la collection Workbooks, nous ajoutons trois virgules pour ignorer les trois paramètres facultatifs intermédiaires et ainsi atteindre directement l'argument du mot de passe. Nous le prélevons dans la zone de saisie mp grâce à sa propriété Value.

L'adaptation est déjà terminée. Il ne nous reste plus qu'à la tester.
  • Enregistrer les modifications (CTRL + S) et revenir sur le formulaire (ALT + Tab),
  • Exécuter ce dernier, par exemple avec la touche F5 du clavier,
  • Dans la zone mp, taper le code suivant : 1319,
Comme vous le constatez, cette zone est encryptée.
  • Dans la zone CA, modifier le chiffre et valider par la touche Tab par exemple,
Communiquer avec un classeur Excel protégé par un mot de passe en VBA Access

Presque aussitôt, vous voyez la prime s'actualiser juste en-dessous. Elle e bien été calculée par Excel. Mais cette fois, la transaction s'est faite en toute transparence pour l'utilisateur. C'est donc en toute ergonomieque vous pouvez maintenant naviguer au travers des enregistrements du formulaire et modifier les chiffres pour actualiser automatiquement les primes.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn