Les API



Les API (Application Program Interface) sont des fonctions stockées dans les dll (Dynamic Link Library) de Windows. Elles sont utilisées par les différentes applications.
La possibilité d'utiliser certaines d'entre elles dans des programmes VBA offre d'intéressantes perspectives puisque ces API concernent l'ensemble du système Windows et pas simplement Excel.

Pour pouvoir utiliser une API, il faut d'abord aller la chercher dans la dll qui l'héberge et la déclarer à VBA pour qu'il la reconnaisse. Une ligne de déclaration en tête d'un module simple fait l'affaire :
Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
La ligne de déclaration prévient simplement VBA de l'existence dans la fonction Winexec dans la dll kernel32 (la dll qui contient les fonctions relatives au système d'exploitation). A partir de ce moment, VBA va reconnaître la fonction Winexec que l'on pourra utiliser comme une fonction vba. Winexec permet de lancer des programmes executables :
Sub lance_explorer()
WinExec "Explorer.exe c:\mes documents\", 10
End Sub

La macro va ouvrir l'explorateur Windows, en le positionnant sur le répertoire c:\mes documents\ (le paramêtre 10 indique simplement que la fenêtre doit être maximisée). On aurait aussi bien pu lancer Word en utilisant Winword.exe.

Un très grand nombre de fonctions sont accessibles par ce biais à VBA dans plusieurs dll, et notamment kernel32.dll (fonctions liées au système d'exploitation), user32.dll (fonctions liées à l'interface avec l'utilisateur), gdi32.dll (fonctions liées à l'interface graphique) et wininet.dll (fonctions en rapport avec internet).

Il est impossible de passer en revue l'ensemble des fonctions stockées dans les dll de Windows. L'utilisation de plusieurs d'entre elles est présentée dans les exemples qui suivent.
Le premier tableau renvoie à des exemples simples utilisant une seule API (cliquer sur le nom de la fonction) :

nom de fonctionutilisationdll
ExitWindowsExquitter Windows, fermer l'ordinateuruser32
GetUserNameAnom d'utilisateuradvapi32
WNetGetUserAnom d'utilisateur réseaumpr
GetComputerNameAnom de l'ordinateurkernel32
beep, messagebeepémet un bipkernel32, user32
WinExecLance un programme .exekernel32
ShowCursor cache le curseur de la sourisuser32
mouse_event déplace le curseur de la sourisuser32
GetCursorPos retourne la position du curseuruser32
GetClipCursor retourne la taille utile de l'écranuser32
sndPlaySound lance un fichier sonwinmm
getversion renvoie la version de Windowskernel32
GetWindowsDirectory renvoie l'adresse du répertoire de Windowskernel32
GetProfileString le nom de l'imprimante par défautkernel32
FindExecutableA à qui est associé ce fichier ?shell32
DoFileDownload télécharger un fichier ?shdocvw

Des exemples un peu plus compliqués :

exemplefonctions utiliséesdll
lire une page Web InternetOpenwininet
emprisonner le curseur de la souris dans un rectangleGetClipCursor
ClipCursor
user32
user32
activer le pavé numériqueGetKeyboardState
SetKeyboardState
user32
user32
Verrouiller la touche de majuscules (Windows 98 +)SendInput
CopyMemory
user32
kernel32
Le titre de la fenêtre activeGetWindowText
GetFocus() ou
GetActiveWindow
user32
user32
user32
Modifier l'heure systèmeGetSystemTime
SetSystemTime
kernel32
kernel32
Fermer une application à partir du titre de sa fenetreFindWindowA
PostMessageA
user32
user32
Couvrir l'écran (barres d'outils comprises) de hachuresLineTo
GetWindowDC
gdi32
user32
Inscrire dans une page Excel la liste de tous les processus / fenêtres en coursFindWindowA
GetWindowTextA
GetWindow
user32
user32
user32
La souris pond des oeufsGetWindowDC
GetCursorPos
Ellipse
Sleep
user32
user32
gdi32
kernel32
L'écran disparait sous un tapis de bullesGetWindowDC
Ellipse
Sleep
user32
gdi32
kernel32
Il neige au coin de l'écranGetWindowDC
Ellipse
Sleep
user32
gdi32
kernel32
La barre de menu clignoteGetActiveWindow
FlashWindow
Sleep
user32
user32
kernel32
Tracer une courbe y=f(x) n'importe oùGetWindowDC
SetPixel
user32
gdi32
Tracer une courbe paramétrique n'importe oùGetWindowDC
SetPixel
user32
gdi32
Modifier le titre de la fenetre activeGetActiveWindow
SetWindowText
user32
user32
Réduire la fenetre activeGetActiveWindow
ShowWindow
user32
user32
Donner le focus à une fenêtreFindWindowA
SetFocus
user32
user32
Simuler la frappe d'une touche du clavierFindWindowA
GetWindow
PostMessageA
SetForegroundWindow
user32
user32
user32
user32
Tracer un triangle sur l'écranGetWindowDC
MoveToEx
LineTo
user32
gdi32
gdi32
La fenetre active fait un petit tour puis revientGetActiveWindow
MoveWindow
GetWindowRect
user32
user32
user32
Choisir un répertoireSHBrowseForFolder
SHGetPathFromIDList
shell32
shell32
Ecrire n'importe où sur l'écranGetDC
TextOut
user32
gdi32
Ecrire en couleur n'importe où sur l'écranGetDC
TextOut
SetTextColor
SetBkMode
user32
gdi32
gdi32
gdi32
Changer de curseur de sourisSetSystemCursor
LoadCursor
user32
user32
Changer de curseur de souris à partir d'un fichier de curseurSetSystemCursor
LoadCursorFromFile
user32
user32
Envoyer un fichier sur votre site Web (par ftp)InternetConnect
InternetOpen
FtpSetCurrentDirectory
FtpPutFile
wininet
wininet
wininet
wininet
Une fonction qui renvoie l'adresse de la cellule survolée par le curseur de la sourisGetWindow
FindWindow
GetClassName
GetWindowRect
GetCursorPos
user32
user32
user32
user32
user32
Ouvrir et fermer les fenêtres de manière originaleGetActiveWindow
AnimateWindow
user32
user32
Masquer la barre des tâchesGetWindowRect
FindWindowA
FillRect
GetWindowDC
GetSysColorBrush
user32
user32
user32
user32
user32
Modifier l'adresse dans la barre d'adresse du navigateurEnumChildWindows
GetClassNameA
FindWindowA
PostMessageA
user32
user32
user32
user32
Le texte qui est dans le presse-papiers ?OpenClipboard
GetClipboardData
CloseClipboard
GetWindow
CopyMemory
user32
user32
user32
user32
kernel32
L'impression est-elle terminée ?GetProfileStringA
OpenPrinterA
ClosePrinter
EnumJobsA
kernel32
winspool.drv
winspool.drv
winspool.drv
Manipuler des images bitmap




Quelques sites utiles sur les API
Le jargon API
Les macros Excel 4
Les fonctions de feuilles de calcul
Les correspondances entre macros VBA, macros Excel 4, fonctions de feuilles de calcul et API.