Appel macro depuis une fonction si

Fermé
clairecom - 30 oct. 2005 à 20:34
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015 - 13 mai 2014 à 16:38
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

chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
Modifié par chossette9 le 3/06/2010 à 08:59
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
Kobaya Messages postés 282 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 10 janvier 2008 214
31 oct. 2005 à 14:47
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
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 3/12/2010 à 11:37
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
bluesun91 Messages postés 4 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 3 juin 2010
3 juin 2010 à 01:05
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bluesun91 Messages postés 4 Date d'inscription mercredi 28 avril 2010 Statut Membre Dernière intervention 3 juin 2010
Modifié par bluesun91 le 3/06/2010 à 12:05
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
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
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
marty14400 Messages postés 21 Date d'inscription lundi 19 août 2013 Statut Membre Dernière intervention 15 mars 2015
13 mai 2014 à 16:38
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