FAQ VBA
![logo](./images/faqvba.png)
FAQ VBAConsultez toutes les FAQ
Nombre d'auteurs : 10, nombre de questions : 133, dernière mise à jour : 15 juin 2021
![Ouvrir](/template/kit/kitmoins.png)
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