FAQ VBA
FAQ VBAConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 133, dernière mise à jour : 15 juin 2021
Lorsque le niveau de sécurité intrinsèque des documents Office est réglé sur moyen ou élevé, il est alors impossible d'activer automatiquement les macros d'un document.
La première solution consiste à régler le niveau de sécurité sur faible (Menu Outils >> Macros >> Sécurité...), mais n'est pas très recommandée.
L'autre solution consiste à auto-certifier les macros d'un document.
Un certificat local, valable uniquement sur la machine sur laquelle il est installé, va vous permettre d'éviter le désagrément d'avoir à
confirmer l'activation des macros à l'ouverture d'un document, ou pire, la désactivation systématique des macros.
Comment procéder : A la prochaine ouverture du document, une alerte de sécurité va apparaître, cocher alors la case "Toujours faire confiance au macros provenant de... ".
- Ouvrir le document Office dont les macros doivent être certifiées
- Dans l'éditeur VBA (Alt-F11), menu Outils >> Signature électronique ...
- Cliquer sur "Choisir..." et sélectionner le certificat précédemment créé
- Enregistrer le document
- Rechercher dans le répertoire d'installation de Microsoft Office (généralement C:\Program Files\Microsoft Office\OfficeXX) le programme SelCert.exe
- Exécuter SelfCert.exe
- Renseigner le nom du certificat dans la zone de texte et valider
- Fermer SelfCert.exe
Pour supprimer un certificat existant :
- Panneau de configuration >> Options Internet
- Onglet Contenu, cliquer sur Certificats...
- Sélectionner le certificat et cliquer sur Supprimer
Ce petit tutoriel pour vous montrer quelques exemples pour lire et modifier les propriétés des fichiers Office :
L'objet Screen n'existant pas en VBA, on peut retrouver ces valeurs en utilisant les fonctions de l'API Win32 :
Private
Declare
Function
GetDC Lib
"user32"
(
ByVal
hwnd As
Long
) As
Long
Private
Declare
Function
ReleaseDC Lib
"user32"
(
ByVal
hwnd As
Long
, ByVal
hdc As
Long
) As
Long
Private
Declare
Function
GetDeviceCaps Lib
"gdi32"
(
ByVal
hdc As
Long
, ByVal
nIndex As
Long
) As
Long
Private
Const
HWND_DESKTOP As
Long
=
0
Private
Const
LOGPIXELSX As
Long
=
88
Private
Const
LOGPIXELSY As
Long
=
90
Function
TwipsPerPixelX
(
) As
Single
Dim
lngDC As
Long
lngDC =
GetDC
(
HWND_DESKTOP)
TwipsPerPixelX =
1440
&
/
GetDeviceCaps
(
lngDC, LOGPIXELSX)
ReleaseDC HWND_DESKTOP, lngDC
End
Function
Function
TwipsPerPixelY
(
) As
Single
Dim
lngDC As
Long
lngDC =
GetDC
(
HWND_DESKTOP)
TwipsPerPixelY =
1440
&
/
GetDeviceCaps
(
lngDC, LOGPIXELSY)
ReleaseDC HWND_DESKTOP, lngDC
End
Function
L'objet ClipBoard n'existant pas en VBA, il faut utiliser les fonctions de l'API Windows :
'-- Déclaration des fonctions API
Private
Declare
Function
OpenClipboard Lib
"user32"
(
ByVal
hwnd As
Long
) As
Long
Private
Declare
Function
CloseClipboard Lib
"user32"
(
) As
Long
Private
Declare
Function
EmptyClipboard Lib
"user32"
(
) As
Long
Private
Sub
Commande0_Click
(
)
OpenClipboard 0
EmptyClipboard
CloseClipboard
End
Sub