La fonction Excel4 FONCTION.APPELANTE


Les fonction API permettent d'utiliser en programmation VBA les fonctions stockées par Windows dans les dll.
Excel4 avait déjà prévu la possibilité d'utiliser les fonctions API soit dans les macros Excel 4 soit directement dans de feuilles de calcul Excel, en utilisant la fonction FONCTION.APPELANTE 'CALL en anglais).
Ce mode d'appel des fonctionnalités des dll ouvre de très intéressantes perspectives... que n'ont hélas pas manquer d'exploiter les inventeurs de virus.
Avec Excel4, un fichier Excel pouvait, sans aucun avertissement à l'utilisateur, executer n'importe quelle dll de Windows !
Cette grave faille de sécurité a été corrigée et Excel 2000 a même completement désactivé la fonction FONCTION.APPELANTE.

Quelques exemples pour ceux qui ont conservé une ancienne version d'Excel (voir la rubrique API pour comprendre le fonctionnement des diverses dll) :

formulevaleur renvoyée
=FONCTION.APPELANTE("Xlcall32";"Excel4";"2JRJRR#";185;;2;6;A2)formule de A2
=FONCTION.APPELANTE("user32";"GetActiveWindow";"J")pointeur de la fenêtre active
=FONCTION.APPELANTE("user32";"GetWindowTextA";"2JFJ";FONCTION.APPELANTE("user32";"GetActiveWindow";"J");;200)titre de la fenêtre active
=FONCTION.APPELANTE("user32";"GetClassNameA";"2JFJ";FONCTION.APPELANTE("user32";"GetActiveWindow";"J");;50)classe de la fenêtre active (XLMAIN pour Excel)
=FONCTION.APPELANTE("user32";"GetDesktopWindow";"JH")pointeur du bureau
=FONCTION.APPELANTE("user32";"GetWindowDC";"JH";0)pointeur de la fenêtre en mode graphique
=FONCTION.APPELANTE("user32";"GetDoubleClickTime";"J")durée doubleclick souris (ms)
=FONCTION.APPELANTE("gdi32";"GetPixel";"JHHH";FONCTION.APPELANTE("user32";"GetWindowDC";"JH";0);100;100)couleur du pixel de coordonnées 100px,100px
=FONCTION.APPELANTE("user32";"GetSystemMetrics";"JH";2)largeur des scrollbars (px)
=FONCTION.APPELANTE("kernel32";"GetTickCount";"JH")durée de la session Windows (en ms)
=FONCTION.APPELANTE("user32";"GetSysColor";"JH";x)couleurs système
=FONCTION.APPELANTE("gdi32";"GetBkColor";"JH";FONCTION.APPELANTE("user32";"GetWindowDC";"JH";0))couleur du fond de la fenêtre
=FONCTION.APPELANTE("gdi32";"GetBkMode";"JH";FONCTION.APPELANTE("user32";"GetWindowDC";"JH";0))fond opaque (2) ou transparent (1)
=FONCTION.APPELANTE("Xlcall32";"Excel4";"2JRJRR#";185;;2;7;$A$2)format du texte de A2
=FONCTION.APPELANTE("Xlcall32";"Excel4";"2JRJRR#";185;;2;16;$A$2)largeur de la cellule A2
=FONCTION.APPELANTE("Xlcall32";"Excel4";"2JRJRR#";185;;2;18;$A$2)police du texte
=FONCTION.APPELANTE("Xlcall32";"Excel4";"2JRJRR#";185;;2;LIGNE();$A$2)taille de la police de A2

Le premier paramètre est le nom de la dll appelée, le second est le nom de la fonction de la dll, le troisième indique le type de données utilisées en entrée et sortie; les autres sont les paramètres transmis à la fonction.
Les types de données sont définis selon les règles suivantes :
Si la fonction de la dll renvoie directement le résultat, la première lettre définit le type de donnée renvoyée, les suivantes le type des données entrées en paramètre (il doit y avoir une lettre de plus que de paramètres).
Si le résultat est renvoyé dans une variable qui est un des paramètres de la fonction de dll, on doit commencer la définition du type des données par le numéro d'ordre du paramêtre résultat. Les lettres correspondent au type de chacune des paramètres, dans l'ordre, y compris le paramètre contenant le résultat. Il doit y avoir autant de lettres que de paramètres.
Les codes de lettres : A pour booléen, F tampon de texte, H entier non signé, J entier long non signé O matrice, P et R structures de données OPER et XOPER.

Par exemple, inscrire dans une cellule :
=MAINTENANT()-FONCTION.APPELANTE("kernel32";"GetTickCount";"JH")/1000/3600/24 pour connaître l'heure du début de la session Windows en cours;

Ou bien =FONCTION.APPELANTE("Xlcall32";"Excel4";"2JRJRR#";185;;2;41;A2)
pour afficher la formule qui est inscrite de A2.

On notera la possibilité d'utiliser les fonctions Excel4 en appelant la fonction Excel4 de la dll XLCall32 (dans les exemples, la fonction 185 représente la fonction Excel4 CELLULE).




Les fonctions de feuilles de calcul
Les API
Les correspondances entre macros VBA, macros Excel 4, fonctions de feuilles de calcul et API.