Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. VBA Excel (versions 2021 et Microsoft 365)
  3. Programmation Windows
Extrait - VBA Excel (versions 2021 et Microsoft 365) Programmer sous Excel : macros et langage VBA
Extraits du livre
VBA Excel (versions 2021 et Microsoft 365) Programmer sous Excel : macros et langage VBA
2 avis
Revenir à la page d'achat du livre

Programmation Windows

Présentation des API

L’interface de programmation Windows API (Application Programming Interface) offre des fonctions qui vous permettent de contrôler les aspects les plus infimes du système d’exploitation. Vous pouvez étendre et personnaliser vos applications Excel en appelant des fonctions Windows API à partir de VBA. Bien qu’Excel continue à évoluer et que son langage de programmation natif (VBA) intègre de plus en plus de fonctions système, il est nécessaire pour certaines tâches d’utiliser des fonctions de l’API.

Une API est une série de fonctions que vous pouvez utiliser pour travailler avec un composant, une application ou un système d’exploitation. Elle se compose généralement d’une ou plusieurs DLL (Dynamic Link Library ou bibliothèque de liaisons dynamiques).

L’API la plus couramment utilisée est l’API Windows qui inclut les DLL constituant le système d’exploitation Windows. Chaque application Windows réagit directement ou indirectement avec l’API Windows. Celle-ci garantit un comportement cohérent à toutes les applications fonctionnant sous Windows.

Les DLL de l’application Windows les plus couramment utilisées sont les suivantes :

Kerne32.dll

Fonctions de bas niveau du système d’exploitation, telles que la gestion de la mémoire et la gestion des ressources.

User32.dll

Fonctions de gestion Windows, telles que le traitement des messages, horloges, menus et communication.

GDI32.dll

Bibliothèque GDI (Graphics Device Interface) qui contient des fonctions de sortie vers les périphériques (graphisme, contexte d’affichage et gestion des polices).

D’autres API sont également disponibles comme par exemple l’interface MAPI (Mail Application Programming...

Appel d’une fonction de l’API Windows

Pour appeler une fonction de l’API Windows, vous devez la déclarer en utilisant l’instruction Declare dans la section Déclarations d’un module de votre projet (généralement un module spécifique aux procédures générales à l’application).

1. Syntaxe de l’instruction Declare

Le respect des minuscules et majuscules est obligatoire pour les noms de fonctions et procédures des DLL.

Déclaration d’une procédure API :

[Public|Private] [PtrSafe] Declare Sub <nom_proc> Lib <nom_DLL>" _
[Alias <nom_alias>] [<liste_arguments>]  

Déclaration d’une function API :

[Public|Private] [PtrSafe] Declare Function <nom_fonc> Lib "<nom_DLL>" _ 
[Alias "<nom_alias>"] [([liste_arguments])] [As <type>] 

PtrSafe

Mot-clé à utiliser dans les versions 64 bits d’Excel.

nom_proc, nom_fonc

Nom de la procédure ou de la fonction tel qu’utilisé dans Visual Basic.

nom_DLL

Nom de la DLL.

nom_alias

Nom de la procédure ou de la fonction dans la DLL.

liste_arguments

Liste des paramètres de l’API.

type

Type de la valeur retournée par la fonction.

2. Passage des arguments

Les fonctions et procédures des DLL sont écrites pour la plupart en langage C et font donc référence à sa syntaxe. Aussi, le passage d’arguments à une procédure ou une fonction d’une DLL en VBA n’est pas toujours simple. Au niveau des DLL utilisant la syntaxe du C, tous les arguments sont passés par valeurs, sauf les tableaux.

Les chaînes en langage C sont considérées comme des tableaux de caractères.

Certains arguments des procédures de DLL peuvent accepter différents types de données...

Liste de fonctions API Windows

Cette liste comporte les fonctions de l’API Windows couramment utilisées. Des exemples d’utilisation de certaines de ces fonctions sont décrits dans la section suivante.

GetWindowsDirectory

Renvoie le chemin complet du répertoire de Windows.

GetSystemDirectory

Renvoie le chemin complet du répertoire système de Windows.

GetSystemInfo

Renvoie toute une série d’informations sur le système. Ces données sont stockées dans une structure de type SYSTEM_INFO.

GetActiveWindow

Renvoie le handle de la fenêtre active.

FindExecutable

La fonction retourne le nom et le chemin de l’application associée à un fichier (application associée à l’extension du fichier).

FindWindow

Renvoie le handle de la fenêtre en fonction de son nom et de la classe à partir de laquelle elle a été définie.

GetPrivateProfileString

Renvoie une option d’un fichier Ini à partir d’un nom de section et de clé.

GetTempPath

Renvoie le chemin vers le dossier temporaire du système.

GetUserName

Renvoie le nom de l’utilisateur.

WNetGetUser

Renvoie le nom du login réseau.

SetFocus

Attribue le focus d’entrée à la fenêtre référencée par son handle.

Exemples d’utilisation de fonctions API Windows

1. Récupération du répertoire Windows

Déclaration de la fonction API :

'   Cette fonction API renvoie le répertoire Windows 
Private Declare Function GetWindowsDirectory _ 
           Lib "kernel32" Alias "GetWindowsDirectoryA" _ 
           (ByVal lpWindowsDir As String, _ 
           ByVal lpWindowsHeight As Long) _ 
           As Long 

Appel de la fonction API :

Function GetWinPath() As String 
' Cette fonction VBA renvoie le répertoire Windows 
Dim StrResult As String 
Dim StrProfile As String 
 
StrResult = String(255, " ") 
StrProfile = GetWindowsDirectory(StrResult, 255) 
 
' Tronque la chaîne au premier caractère nul 
If StrProfile <> "" Then 
   StrResult = Trim(StrResult) 
   GetWinPath = Left(StrResult, InStr(1, StrResult, vbNullChar) - 1) 
Else 
   GetWinPath = "" 
End If 
 
End Function 

2. Lancement de la calculatrice Windows

Cet exemple permet de tester si la calculatrice Windows est déjà active, et de lancer son exécution sinon.

Deux fonctions API sont ici utilisées : la première, FindWindow, permet de rechercher la fenêtre "Calculatrice" ; la deuxième, FindExecutable, permet de rechercher l’emplacement du fichier Calc.exe.

Déclaration de la fonction API :

' Cette fonction API recherche une fenêtre 
Public Declare Function FindWindow Lib "user32" Alias _ "FindWindowA"  
(ByVal lpClassName As String, ByVal _ 
lpWindowName As String) As Long 
 
' Cette fonction API recherche...

L’objet FileSystemObject

L’objet FileSystemObject donne accès au système de fichiers d’un ordinateur. Il permet notamment de rechercher, créer, supprimer, déplacer des fichiers ou des dossiers.

1. Méthodes

Méthodes relatives aux fichiers

CopyFile

Copie un ou plusieurs fichiers d’un emplacement vers un autre.

CreateTextFile

Crée un nom de fichier spécifié et renvoie un objet TextStream pouvant être utilisé pour lire ou écrire dans le fichier.

DeleteFile

Supprime un fichier spécifié.

FileExists

Renvoie un booléen indiquant si le fichier spécifié existe.

MoveFile

Déplace un ou plusieurs fichiers d’un emplacement vers un autre.

OpenTextFile

Ouvre un fichier spécifié et renvoie un objet TextStream pouvant être utilisé pour lire un fichier ou y effectuer un ajout.

Méthodes relatives aux dossiers

CopyFolder

Copie un dossier d’un emplacement vers un autre.

CreateFolder

Crée un dossier.

DeleteFolder

Supprime un dossier spécifié et son contenu.

FolderExists

Renvoie un booléen indiquant si le dossier spécifié existe.

MoveFolder

Déplace un ou plusieurs dossiers d’un emplacement vers un autre.

Méthodes relatives aux lecteurs

DriveExists

Renvoie un booléen indiquant si le lecteur spécifié existe.

GetDrive

Renvoie un objet Drive correspondant au lecteur pour un chemin spécifié.

GetDriveName

Renvoie une chaîne contenant le nom du lecteur pour un chemin spécifié.

2. Propriété

Drives

Renvoie une collection constituée de tous les objets Drive disponibles sur la machine locale.

3. Exemple : copie de fichiers Excel

L’exemple suivant recherche tous les fichiers Excel situés dans le même dossier que le classeur actif et les copie...