Macro à paramètre

benoa

XLDnaute Junior
Bonjour à tous,

J'ai créé une macro à paramètre du type : Public Sub MaSubroutine(chaine As String)

Cependant, elle n’apparaît pas dans mes macro après enregistrement. Lorsque j'enlève le paramètre elle réapparaît dans mes macros : : Public Sub MaSubroutine(). Comment palier à ce problème? Dois-je obligatoirement créer une fonction dans ce cas?

Merci à tous pour vos suggestions.
 

sousou

XLDnaute Barbatruc
Re : Macro à paramètre

Bonjour.
Il est normal que cette macro n'apparaissent pas dans les macros accessible.
En effet tu ne peux lancer directement une macro qui contient des arguments, seule une autre procédure peux appeler cette macro en lui transmettant les arguments 'call masubroutine("toto")'
Tu peux la transformé en fonction, mais ce n'est pas du tout le même chose.
Une fonction pourra être appeler de cette manière:
dans une procédure: monrésultat=masubroutine("toto")
Dans une feuille, dans une cellule :=masubroutine("toto")
Que veux tu vraiment faire?


Bonjour à pierrot
 

chris

XLDnaute Barbatruc
Re : Macro à paramètre

Bonjour

Comme sousou, je trouve que ta question est ambiguë.

Si tu crées une procédure à laquelle tu passes des paramètres c'est en général qu'elle a une utilité et elle doit être appelée par une autre procédure qui lui passe le ou les paramètres.

SI tu nous disait plutôt le fin mot de l'histoire, à savoir la finalité du code...
 

benoa

XLDnaute Junior
Re : Macro à paramètre

En fait je dois passer en paramètre deux chaînes de caractères, retourner la cellule où se trouve ces deux chaines, puis permuter ces deux cellules. Sauf qu'après permutation, j'aimerais que cela s'arrête sans renvoyer de valeur.
 

benoa

XLDnaute Junior
Re : Macro à paramètre

Quand je crée ma subroutine et que je passe mes chaînes de caractères en variable et non en paramètre, ça fonctionne. Maintenant, je voudrais pouvoir effectuer le même travail avec des chaîne de caractères différentes... par passage en paramètre.
 

Staple1600

XLDnaute Barbatruc
Re : Macro à paramètre

Bonjour à tous

benoa
F1 est toujours un précieux allié ;)
EXTRAIT AIDE VBA
Appel de procédures Sub et Function


Pour appeler une procédure Sub depuis une autre procédure, tapez le nom de la procédure sans oublier les valeurs des arguments obligatoires. L'instruction Call n'est pas obligatoire, mais si vous l'utilisez, vous devez mettre les éventuels arguments entre parenthèses.

Vous pouvez utiliser une procédure Sub pour organiser d'autres procédures de manière à simplifier leur interprétation et leur débogage. Dans l'exemple suivant, la procédure Sub Main appelle la procédure Sub MultiBeep, passant la valeur 56 comme argument. Après l'exécution de MultiBeep, le système redonne la main à Main qui appelle la procédure Sub Message. Message affiche un message ; lorsque l'utilisateur clique sur OK, la main revient à Main qui se termine.

Sub Main()
MultiBeep 56
Message
End Sub

Sub MultiBeep(numbeeps)
For counter = 1 To numbeeps
Beep
Next counter
End Sub

Sub Message()
MsgBox "Il est temps de faire une pause!"
End Sub

Appel de procédures Sub avec plusieurs arguments
L'exemple suivant illustre deux manières d'appeler une procédure Sub avec plusieurs arguments. Lors du second appel de HouseCalc, les arguments doivent être mis entre parenthèses parce que l'instruction Call est employée.

Sub Main()
HouseCalc 99800, 43100
Call HouseCalc(380950, 49500)
End Sub

Sub HouseCalc(price As Single, wage As Single)
If 2.5 * wage <= 0.8 * price Then
MsgBox "Cette maison est trop chère."
Else
MsgBox "Cette maison est abordable."
End If
End Sub

Utilisation de parenthèses lors d'appel de procédures Function
Pour utiliser la valeur renvoyée d'une fonction, affectez la fonction à une variable et mettez les arguments entre parenthèses, comme le montre l'exemple suivant.

Answer3 = MsgBox("Votre salaire vous convient-il?", 4, "Question 3")

Si la valeur renvoyée d'une fonction ne vous intéresse pas, vous pouvez appeler une fonction de la même manière qu'une procédure Sub. Omettez les parenthèses, indiquez les arguments et n'affectez pas la fonction à une variable, comme le montre l'exemple suivant.

MsgBox "Tâche terminée!", 0, "Boîte de tâche"

Attention Si vous incluez des parenthèses dans l'exemple précédent, l'instruction cause une erreur de syntaxe.

Passage d'arguments nommés
Une instruction dans une procédure Sub ou Function peut passer des valeurs à des procédures appelées en utilisant des arguments nommés. Vous pouvez indiquer les arguments nommés dans n'importe quel ordre. Un argument nommé est composé du nom de l'argument suivi des signes deux-points et égal :)=), puis de la valeur affectée à l'argument.

L'exemple suivant appelle la fonction MsgBox en utilisant les arguments nommés sans valeur renvoyée.

MsgBox Title:="Boîte de tâche", Prompt:="Tâche terminée!"

L'exemple suivant appelle la fonction MsgBox en utilisant des arguments nommés. La valeur renvoyée est affectée à la variable answer3.

answer3 = MsgBox(Title:="Question 3", _
Prompt:="Votre salaire vous convient-il?", Buttons:=4)
 
Dernière édition:

benoa

XLDnaute Junior
Re : Macro à paramètre

Désolé mais je ne trouve pas ce que je cherche ici. Je souhaite passer un élément en paramètre, apparemment, on ne peut le faire qu'à l'aide de fonctions. Je souhaite ensuite réaliser un traitement, du style copier une cellule dans une autre puis m’arrêter sans renvoyé de valeurs, ce qui correspond plus à une subroutine. Je ne sais pas quoi utiliser pour résoudre mon problème.
J'aurais envie d'essayer :

Public Function MaFonction (Parametre As String) As Nothing
MaFonction = call MaSubroutine(Parametre)​
End Function

mais cela ne peut pas fonctionner.
 

Jam

XLDnaute Accro
Re : Macro à paramètre

Salut à tous (que du beau monde ici :))

Benoa, une petite suggestion:
Tu pourrais sélectionner les 2 cellules à permuter ET lancer la macro ensuite.
Il suffit que celle-ci récupère les 2 sélections et effectue la permutation et/ou autres opération au passage. Et..c'est tout non ?

Bon courage
 

benoa

XLDnaute Junior
Re : Macro à paramètre

Oui parfait mais tu dit : "il suffit que celle-ci récupère les deux sélections et..." comment peut on "récupérer" cette sélection? Si je comprend bien, je sélectionne les deux cellules puis => outils => macro => MaSubroutine
 

sousou

XLDnaute Barbatruc
Re : Macro à paramètre

Re
Pourquoi ne pas nous joindre un exemple précis de ce que tu veux.
Deux questions?

1/ définir les actions à effectuer dans la procédure
2/ quelle action doit lancer cette procédure ou fonction ou.....
 

Jam

XLDnaute Accro
Re : Macro à paramètre

Re,
comment peut on "récupérer" cette sélection?
Il suffit d'utiliser:
Code:
selection
Ensuite tu fais ta permutation en récupérant les valeurs/formules (?) à permuter

Si je comprends bien, je sélectionne les deux cellules puis => outils => macro => MaSubroutine
Oui c'est bien cela

Et si tu as besoin d'un paramètre à passer, il te suffit de mettre un petit Application.Inputbox dans ton code qui te permettra de demander le paramètre pendant l'exécution de la routine.

Bon courage

PS: L'aide en ligne de VBA 2010 concernant Selection

Référence du développeur Excel
Application.Selection, propriété

Renvoie l'objet sélectionné dans la fenêtre active pour un objet Application.Syntaxe
expression.Selection
expression Variable qui représente un objet Application.
Remarques

Le type de l'objet renvoyé dépend de la sélection en cours (par exemple, si une cellule est sélectionnée, cette propriété renvoie un objet Range). La propriété Selection renvoie Nothing si rien n'est sélectionné.L'utilisation de cette propriété sans qualificateur d'objet correspond à l'utilisation de Application.Selection.
Exemple

Cet exemple montre comment effacer la sélection effectuée dans la feuille Sheet1 (en supposant que cette sélection concerne une plage de cellules).
Worksheets("Sheet1").ActivateSelection.Clear

 

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 618
Membres
103 608
dernier inscrit
rawane