Appel macro depuis une fonction si

clairecom -  
marty14400 Messages postés 22 Statut Membre -
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. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    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
  2. Kobaya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   214
     
    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. cool
       
      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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  4. bluesun91 Messages postés 7 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bluesun91 Messages postés 7 Statut Membre
     
    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. isscool
       
      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. priscy974
       
      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
  7. marty14400 Messages postés 22 Statut Membre
     
    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