Appel macro depuis une fonction si

bonsoir,

Je souaiterai lancer une macro que j'ai crée dans une fonction "Si".
Comment faire pour lancer la macro?

Merci pour vos réponses

6 réponses

  1. Contributeur
    Bonjour,

    quand tu réalise une macro en VBA, tu as la possibilité de créer soit une procédure :
    Private Sub toto() 
    ... 
    End Sub
    soit une fonction :
    Private Function tata() 
    ... 
    End Function


    La réponse de Kobaya t'indique donc que ta macro doit s'écrire comme une fonction, et non pas comme une procédure.

    Cordialement.
    Ce mec la n'était pas une lumière, car il était niais.
    4
    1. bonjour Clairecom,

      il suffit d'écrire la fonction : =Si(A1 = 1 ; MaMacro() ; "")

      MaMacro doit être défini comme une fonction (et non procédure) publique (Public Function MaMacro() As String/Variant/Integer/etc...)

      2
      1. Salut,
        Comment on fait pour la définir "comme une fonction (et non procédure) publique (Public Function MaMacro() As String/Variant/Integer/etc...) "?
        Merci!
        0
    2. Contributeur
      Bonjour,
      Justement, si ont fait une fonction c'est pas pour y mettre une formule, dans ce cas c'est plus simple de mettre directement la formule dans la cellule !
      Pour exemple...
      Public Function MyMacro(Test As Range)  
          Application.Volatile 'pour recalcul quand la feuille est modifiée  
          If Test = 1 Then  
              On Error Resume Next ' éviter erreur  
              MyMacro = Test.Offset(, 3) * Test.Offset(, 2)  
          Else  
              MyMacro = ""  
          End If  
      End Function

      En B1... =MyMacro(A1)
      en C1 et D1 un nombre
      et en A1.. 1

      Pour les fonctions (comme Autofill) faut mettre ça dans une sub et l'appeller avec un bouton ou un raccourci clavier
      A+
      Edit :
      En relisant ton dernier poste, je pense que le code ci-dessous répond mieux à ce que tu veux.
      Public Function MyMacro2(Test As Range) As Integer
      Dim Cel As Range
          Application.Volatile 'pour recalcul quand la feuille est modifiée
          For Each Cel In Test
              If Cel = "CP" Then
                  MyMacro2 = 1
                  Exit Function
              End If
          Next Cel
          MyMacro2 = 0
      End Function

      Mettre =MyMacro2( b6:af6) dans la cellule où tu veux 1 ou 0
      Dans une cellule de la plage b6:af6 tu tape CP

      L'expérience instruit plus sûrement que le conseil. (André Gide)
      Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
      1
      1. Bonjour à tous,

        Je relance un vieux message que j'ai trouvé sur le forum.

        J'aimerai aussi pouvoir lancer une macro à partir de la fonction SI, mais je n'ai pas compris la manip expliquée plus haut.

        Merci d'avance pour votre aide!
        0
        1. Bonjour,

          Merci pour la réponse rapide!

          c'est déjà bien plus clair, merci.

          Cependant, ma macro ne se lance toujours pas.
          Par exemple, j'ai fait une toute petite marco pour tester, il s'agit de multiplier une colonne par une autre, voilà ce que j'ai écrit:

          Private Function Macro2()
          '
          ' Macro2 Macro
          '

          '
          Range("N218").Select
          ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"
          Range("N218").Select
          Selection.AutoFill Destination:=Range("N218:N223"), Type:=xlFillDefault
          Range("N218:N223").Select
          End Function

          ensuite, dans une cellule, je mets: =si(A1=1;Macro2())

          Quand dans A1 j'ai une autre valeur que 1, il me met FAUX, donc pas de problème, mais dès que j'ai 1, il me met VALEUR! et la macro ne se lance pas.

          Désolé avec mes questions de débutant et encore merci pour votre aide.

          cordialement
          0
          1. Salut,
            je ne suis pas sur qu'il faut écrire =si(A1=1,Macro()) mais =si(A1="1",Macro())
            A savoir il faut qu'il y ait écrit "1" dans la cellule A1 ....
            0
          2. slt ! ben en faite je dois créer une formule avc la fonction SI, la condition est : "si une cellule de la plage de cellule b6 à af6 contient CP alors CP=1, sinon 0, alors additionner CP (donc 1). j'ai essayé mais cela ne fonctionne qu'avec une seule cellule de la plage de cellule.
            merci
            0
        2. Bonjour
          Je reviens vers vous concernant ce sujet :
          je souhaiterai utiliser la fonction annoncé ci-dessus =Si(A1 = 1 ; CopieFeuille() ; "")
          avec ma macro CopieFeuille :

          'Sub CopieFeuille()
          ' Sheets("Matrice" ).Select
          'Cells.Copy ' Copie
          ' Sheets.Add ' Ajout d'une nouvelle feuille
          'ActiveSheet.Paste ' Collage de la feuille copiée précédemment
          ' ActiveSheet.Name = Format(Date,"yyyy-mm-dd" )
          ' End Sub

          Le concept est un calendrier contenant des données, je souhaiterais générer une nouvelle feuille a chaque changement de mois en C4
          Le soucis qui se pose est d'une part que je souhaiterais resté sur la feuille 1 "matrice" tout en effaçant les colonnes C et F, en mettant ma feuille generé avec mes anciennes données en arrieres plans .

          Le code actuel génère bien une feuille mais en boucle = Bug
          Merci d'avance
          0