Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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,
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,
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,
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.