Différence entre application.run et call

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Chris57

XLDnaute Occasionnel
Bonjour à tous,

pour executer une macro à partir d'une autre macro on peut utiliser ces 2 instructions :
"application.run" ou "call"

Quel est la différence entre ces 2 instructions ?
 
Re : Différence entre application.run et call

Bonjour Chris57

J'avais en tête que call est optionel et qu'il permet de lancer une procédure et application.run, c'est un peu pareil mais pour lancer une macro d'un autre fichier 😕.

Sinon, on peut le retrouver quand on utilise l'enregistreur de macros (connu ausi sous le nom de Henry 😱) .
 
Re : Différence entre application.run et call

Bonsoir
J'ajouterai juste pour l'anecdote qu'il m'arrive de spécifier Call lorsque je tiens à mettre plusieurs instructions sur la même ligne (séparées par des ":" donc) derrière une invocation de procédure, pour éviter que celle ci ne soit interprétée comme étiquette.
Cordialement.
 
Re : Différence entre application.run et call

Bonsoir Chris57, Michel, Bernard,

Autres différences importantes :

- Call est suivi du nom de la macro sans guillemets, il en faut après Application.Run

- Call peut transmettre les valeurs des arguments si la macro est paramétrée, ce n'est pas possible avec Application.Run.

A+
 
Re : Différence entre application.run et call

Bonsoir à tous

Histoire de rendre hommage à la touche F1 😉
Cette méthode exécute une macro ou appelle une fonction. Elle peut être utilisée pour exécuter une macro écrite en Visual Basic ou dans le langage de macro de Microsoft Excel ou pour exécuter une fonction dans une DLL ou une XLL.
expression.Run(Macro, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)
expression Obligatoire. Expression qui renvoie un objet Application
Macro Argument de type Variant facultatif. Macro à exécuter. Il peut s'agir d'une chaîne de caractères contenant le nom de la macro, d'un objet Range indiquant l'endroit où se trouve la fonction ou encore d'un identificateur de Registre pour une fonction DLL (XLL) inscrite dans le Registre. En cas d'utilisation d'une chaîne de caractères, celle-ci sera évaluée dans le contexte de la feuille active.
Arg1-Arg30 Argument de type Variant facultatif. Arguments à transmettre à la fonction.

Notes

Vous ne pouvez pas utiliser d'arguments nommés avec cette méthode. Ils doivent être transmis par position.
La méthode Run renvoie ce que la macro exécutée renvoie. Les objets qui sont transmis à la macro en tant qu'arguments sont convertis en valeurs (en appliquant la propriété Value à l'objet). Cela signifie que vous ne pouvez pas passer d'objets aux macros à l'aide de la méthode Run.
Exemple

Cet exemple montre comment appeler la fonction macro My_Func_Sum, qui est définie dans la feuille macro MyCustom.xlm (cette dernière doit être ouverte). Dans cet exemple, la fonction accepte deux arguments numériques, 1 et 5.
mySum = Application.Run("MYCUSTOM.XLM!My_Func_Sum", 1, 5) MsgBox "Macro result: " & mySum
 
Dernière édition:
Re : Différence entre application.run et call

Re

et pour Call
Call, instruction


Transfère le contrôle à une procédure Sub, à une procédure Function ou à une procédure de bibliothèque de liaisons dynamiques (DLL).
Syntaxe
[Call] name [argumentlist]
La syntaxe de l'instruction Call comprend les éléments suivants :
Élément Description Call Facultatif. Mot clé. S'il est indiqué, vous devez placer argumentlist entre parenthèses. Exemple : Call MaProc(0) Call MyProc(0) name Nom de la procédure à appeler. argumentlist Facultatif. Liste, délimitée par des virgules, de variables, tableaux ou expressions à passer à la procédure. La liste argumentlist peut contenir les mots clés ByVal ou ByRef pour décrire comment les arguments sont traités par la procédure appelée. Toutefois, ByVal et ByRef peuvent uniquement être utilisés dans une instruction Call lors de l'appel d'une procédure DLL. Sur Macintosh, ByVal et ByRef peuvent être utilisés dans une instruction Call lors de l'appel d'une ressource de code Macintosh.
Remarques
Il n'est pas obligatoire d'employer le mot clé Call pour appeler une procédure. Toutefois, si vous utilisez ce mot clé dans le cadre de l'appel d'une procédure nécessitant des arguments, l'élément argumentlist doit être placé entre parenthèses. Dans le cas d'une procédure appelée sans le mot clé Call, vous ne devez pas encadrer argumentlist par des parenthèses. Quelle que soit la syntaxe adoptée pour appeler une fonction intrinsèque ou définie par l'utilisateur, la valeur renvoyée par la fonction est perdue.
Pour passer un tableau entier à une procédure, entrez le nom du tableau, suivi de parenthèses vides.
 
Re : Différence entre application.run et call

Re

La touche F1 est la porte d'entrée vers le Saint VBAraal 😉
Les membres d'XLD sont ses chevaliers.

Quand tu vois du texte en français , tu lis de l'égyptien ?? (C'est quoi la marque de ta bière 😉 )

PS: Appuyer sur la touche F1 et être xldnaute n'est pas incompatible 😉
Et elle peut rendre bien des services souvent tout comme l'enregistreur de macros.
 
Dernière édition:
Re : Différence entre application.run et call

Tu vois moi j'ai beau lire les aides des fonctions call et application.run, je n'y pige pas grand chose. Le vocabulaire choisi par Microsoft est trop pointu pour des gens qui cherchent justement de l'aide ! Et pourtant je ne suis pas un débutant, je fait du Vba depuis 1998/99, perso et pro.

Par exemple lorsque je cherche la définition de Worksheets, je trouve çà :
Collection de tous les objets Worksheet dans le classeur actif ou spécifié. Chaque objet Worksheet représente un classeur.
En lisant ça on pourrait croire qu'un Worksheet est un classeur, alors que c'est une feuille... Le classeur c'est Workbook
Et pourtant le mot feuille n'apparait pas dans la définition !
Et si je cherche Workbook :
L'objet Workbook appartient à la collection Workbooks. La collection Workbooks contient tous les objets Workbook actuellement ouverts dans Microsoft Excel.
Encore une vois le mot essentiel qui est "classeur" n'apparait pas dans l'explication !!


Tout ça pour dire que l'aide fournie est vraiment déplorable...

Bref c'est vraiment très mal expliqué. D'ailleurs c'est pour ça que ce forum est tellement fréquenté !
 
Re : Différence entre application.run et call

Re

C'est plus clair ainsi
Cet objet représente une feuille de calcul.
L'objet Worksheet est un membre de la collection Worksheets.
La collection Worksheets contient tous les objets Worksheet d'un classeur

Et la , je comprends
Collection de tous les objets Worksheet dans le classeur actif ou spécifié. Chaque objet Worksheet représente un classeur.

Que chaque objet Worksheet se réfère à un seul et unique classeur (Ce qui est vrai, non ?)

Je reste persuadé quand même de la grande utilité de l'aide VBA.
C'est comme cela que j'ai commencé (comme beaucoup d'autres ici) à découvrir les joies de VBA.

Le forum c'est autre chose, c'est le plaisir du partage des savoirs entre forumeurs, de la découverte des n façons de résoudre un problème sous Excel.
 
Dernière édition:
Re : Différence entre application.run et call

Tu as peut-être une manière à toi de comprendre l'aide, mais pour moi, un "objet" dans un logiciel c'est pas quelque-chose de claire.
Et encore une fois absoluement rien ne dit que cette objet est une feuille, sauf pour les anglophones qui savent qu'une sheet est une feuille justement.
 
Re : Différence entre application.run et call

Bonjour.
Il n'est pas exclu que le dernier mot dans votre aide résulte d'une erreur de traduction due à un français !
J'ai regardé à worksheets dans mon aide, j'ai bien plus grave :
Pour un objet Application, cette propriété renvoie une collection Sheets qui représente toutes les feuilles de calcul contenues dans le classeur actif. Pour un objet Workbook, elle renvoie une collection Sheets qui représente toutes les feuilles de calcul contenues dans le classeur spécifié. Objet Sheets en lecture seule.
C'est faux. Elle renvoie bien une collection Worksheets et non pas Sheets (les deux sont aussi des types de données) mais Sheets est une collection d'objets banalisés et non pas d'objets Worksheet.
La notion d'objet est fondamentale en VB. Vous pouvez vous définir un objet en insérant un module de classe de votre conception.
Je distingue personnellement cette notion de la notion d'entité, qui est une unité constituante de l'application hôte, qu'un objet VBA fourni et donc défini par elle permet de manipuler.
Cordialement
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
258
Réponses
4
Affichages
482
Retour