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
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
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
A voir également:
- Excel lancer une macro depuis une cellule
- Aller à la ligne dans une cellule excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Excel cellule couleur si condition texte - Guide
- Déplacer une colonne excel - Guide
- Verrouiller une cellule excel - Guide
6 réponses
chossette9
Messages postés
4239
Date d'inscription
lundi 20 avril 2009
Statut
Contributeur
Dernière intervention
12 septembre 2014
1 309
Modifié par chossette9 le 3/06/2010 à 08:59
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 :
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.
quand tu réalise une macro en VBA, tu as la possibilité de créer soit une procédure :
Private Sub toto() ... End Subsoit 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.
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
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...)
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...)
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
Modifié par lermite222 le 3/12/2010 à 11:37
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...
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.
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)
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)
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
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!
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!
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
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
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
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
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
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