Appeler des lignes d'une macro a partir d'une autre macro [Résolu]

Signaler
-
 Jeessey -
Bonjour,

J'utilise une macro (disons AA) qui, une fois exécutée, prépare mon fichier Excel (efface certaines données, copie, filtre etc.) puis affiche un premier Msgbox (disons MS) à option oui et non. Le choix "oui" ne nous intéresse pas. Le choix "non" exécute de très très longues expressions (des copier-coller etc) et c'est ce qui nous intéresse.

Je souhaiterais trouver un moyen pour que, à partir d'une toute autre macro (disons BB), dans le même fichier Excel, je peux appeler toutes les expressions inscrites dans le msgbox MS de la macro AA dont l'option choisie est non, SANS AVOIR A AFFICHER le Msgbox MS et donc sans avoir à choisir l'une des deux options oui et non, car c'est seulement l'option non qui m'intéresse dans cette autre macro BB. Je peux réécrire les expressions de MS, mais ce serait très longs.

Une astuce pour effectuer cela ?

Merci d'avance pour vos réponses.

1 réponse

Messages postés
30286
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2020
338
Bonjour,
Une astuce pour effectuer cela ?

Oui, sortir le code qui vous intéresse, le mettre dans une fonction et depuis la macro d'origine comme depuis n'importe quelle autre, faire appel à cette fonction.

exemple:

Sub AA()

' du code..balablabla..
'..
x = MaFonctionSansParametres()
NomEnMaj = MaFonctionAvecParametres("jordane")
Debug.Print NomEnMaj
'...
'Encore du code...
'...

End Sub


Sub BB()

' du code..balablabla..
'..

x = MaFonctionSansParametres()

NomEnMaj = MaFonctionAvecParametres("Ceci vient de la sub BB")
Debug.Print NomEnMaj
'...
'Encore du code...
'...

End Sub

Function MaFonctionSansParametres()
 a = 1
 b = 2
somme = a + b
MsgBox ("Somme: " & somme)

'On peut retourner une valeur
 MaFonctionSansParametres = somme
End Function
Function MaFonctionAvecParametres(unParam As String)
MsgBox (unParam)
MaFonctionAvecParametres = LCase(unParam)
End Function


Merci infiniment Jordane. J'ai compris l'astuce, il ne me reste qu'a apprendre ce paramètre fonction.
Dans tous les cas, cette réponse résout très efficacement mon problème.
Messages postés
30286
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2020
338
De rien ^^

apprendre ce paramètre fonction.

En fait, lorsque tu écris du code.. plutôt que de "tout" mettre à la suite ( c'est le principe de la programmation "linéaire" que tu peux trouver par exemple dans la programmation pour des microcontrôleurs), tu peux "Découper" ton code .
Plutôt que des fonctions on aurait tout aussi bien pu utiliser d'autres SUB ( que l'on aurait appelé via l'instruction CALL NomDeMaSub ) mais la notion de FONCTION est présente dans tous les langages "évolués".

C'est très pratique à utiliser lorsque, comme toi, on souhaites réutiliser le même code dans d'autres endroits de son programme.
Un autre avantage est la "maintenance" du code :Si tu dois modifier ne serait-ce qu'une seule petite variable dans ton code, tu le fais dans ta fonction et cette modification sera donc réalisée pour tout ton code.... alors que si tu avais fais du copier/coller de ton code à différents endroits de ton programme tu aurais été obligé d'aller faire la modif dans toutes ces lignes...

voilou
Je fais constamment cette erreur (copie coller de mêmes codes - presque - dans de différentes macros).
Encore merci
Messages postés
30286
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 novembre 2020
338
Je fais constamment cette erreur
Je pense qu'on l'a tous fait dans les débuts.
C'est avec l'expérience qu'on apprend.

Avec le temps tu apprendras à écrire tes fonctions en utilisant des "paramètres" de façon à rendre tes fonctions les plus "générique" possible et ainsi pouvoir utiliser une même fonction pour réaliser différents traitements (selon le ou les paramètres donnés)

Exemple:
Sub test()
    MsgBox ("Somme: " & calcul(10, 4, "SOMME"))
    MsgBox ("Multiplication: " & calcul(10, 4, "MULTIPLICATION"))
End Sub

Function calcul(val1 As Double, val2 As Double, CalcType As String) As Double
'choix du type de calcul
Select Case CalcType
    Case "SOMME"
            calcul = val1 + val2
    Case "MULTIPLICATION"
            calcul = val1 * val2
    Case Else
        calcul = "Type de calcul inconnu"
End Select



¨Par contre, pense à passer cette discussion en RESOLU stp.
(lien en haut, sous le titre de ta question).

Bonne continuation.
Résolu. Bonne continuation a toi aussi. Encore merci.