Appeler macro à partir d'une autre
Bonjour le forum
Je voulais savoir si c'est possible d'appeler les macros ci-dessous à partir d'autres macros contenu dans module ou feuille.
1ère macro : Call imprimer_fichier_PE
2è macro : thisworkbook.mail_workbook_1
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String _
, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub Imprimer_Fichier_PE()
Dim NomFichier As String
Dim x As Long
x = FindWindow("XLMAIN", Application.Caption)
NomFichier = "C:\SGIIOC\conditions générales PE.pdf"
ShellExecute x, "print", NomFichier, "", "", 1
End Sub2è macro:
Sub Mail_Workbook_1()
' Works in Excel 2000, Excel 2002, Excel 2003, Excel 2007, Excel 2010, Outlook 2000, Outlook 2002, Outlook 2003, Outlook 2007, Outlook 2010.
' This example sends the last saved version of the Activeworkbook object .
Dim OutApp As Object
Dim OutMail As Object
Dim texte As String
Dim I As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
I = Range("B29").Value
On Error Resume Next
With OutMail
.To = Range("b29").Value
.CC = ""
.BCC = ""
.Subject = "Bienvenue dans votre Entreprise"
.Body = texte
.Attachments.Add ("C:\users/benzoplus/desktop/lm bad.pdf")
' In place of the following statement, you can use ".Display" to
' display the mail.
.Send
End With
On Error GoTo 0
Set OutMail = Nothing
Set OutApp = Nothing
End SubErreur de postage. 1er message supprimé.
Rajout : Je ne comprends pas bien ta question. Depuis un module ou le code d'une feuille, tu peux appeler une autre macro soit par
Call Nom_de_la_macro soit par
Nom_de_la_macroCordialement.
Au faite c'était pour me rassurer que c'est possible d'appeler des macros à partir d'autre sans conséquence.
Ma macro ci-dessous ne fonctionne pas bien (celle qui gère les mouvements du curseur) et je pensais que l'erreur provient des macros que j'ai appelé.
Pouvez-vous voire si quelque chose qui cloche svp.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ValSaisie
Dim P As Integer
On Error GoTo fin
If Not Intersect(Range("B12,B31,B34,B35"), Target) Is Nothing Then
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
P = InStr(Target, ValSaisie)
If P > 0 Then
Target = Left(Target, P - 1) & Mid(Target, P + Len(ValSaisie) + 1)
If Right(Target, 1) = "--" Then
Target = Left(Target, Len(Target) - 1)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & "--" & ValSaisie
End If
End If
Application.EnableEvents = True
ElseIf Range("B4").Value = "COMPTE BUS" Then
If Target.Address = "$B$5" And Target.Value <> "" Then
Range("B7").Select
Call Imprimer_Fichier_PS
MsgBox ("FAIRE SIGNER L'ASSURANCE COLINA ET LES CONDITIONS GENERALES AVANT DE CONTINUER SVP!")
ElseIf Target.Address = "$B$31" And Target.Value <> "" Then
Range("B33").Select
ElseIf Target.Address = "$B$37" And Target.Value <> "" Then
Range("B39").Select
ElseIf Target.Address = "$B$39" And Target.Value <> "" Then
Range("B42").Select
Call Macro1
MsgBox ("Remettre la copie en impression au client pour vérification et renseigner SAGE avant de continuer")
Range("B42").Select
ElseIf Target.Address = "$B$42" And Target.Value <> "" Then
Range("B44").Select
ElseIf Target.Address = "$B$44" And Target.Value <> "" Then
Range("B48").Select
ElseIf Target.Address = "$B$48" And Target.Value <> "" Then
Range("B49").Select
Call Macro10
'Range("d3").Select
Range("d3").Select
Else: GoTo fin
End If
'GESTION DU CURSEUR SUR COMPTE MINEUR
ElseIf Range("B4").Value = "COMPTE PACK" Then
If Target.Address = "$B$5" And Target.Value <> "" Then
Range("B7").Select
Call Imprimer_Fichier_PS
MsgBox ("FAIRE SIGNER L'ASSURANCE COLINA ET LES CONDITIONS GENERALES AVANT DE CONTINUER SVP!")
ElseIf Target.Address = "$B$41" And Target.Value <> "" Then
Range("B42").Select
Call Macro1
MsgBox ("Remettre la copie en impression au client pour vérification et renseigner IGOR avant de continuer")
Range("B42").Select
ElseIf Target.Address = "$B$42" And Target.Value <> "" Then
Range("B44").Select
ElseIf Target.Address = "$B$44" And Target.Value <> "" Then
Range("B46").Select
ElseIf Target.Address = "$B$48" And Target.Value <> "" Then
Range("B49").Select
Call Macro10
'Range("d3").Select
Range("d3").Select
Else: GoTo fin
End If
ElseIf Target.Address = "$B$46" And Target.Value <> "" Then
Call Macro10
GoTo fin
Else: GoTo fin
End If
fin:
Application.EnableEvents = True ' Dans tous les cas on remet les évènements en service
Exit Sub
End SubRe,
Merci pour tes remerciements. Sans avoir ton fichier réel sous la main - ainsi que les différentes macros appelées depuis celle que tu daignes nous fournir - je peux te dire que rien ne cloche
Si tu lis ta macro "pas-à-pas, tu vois bien que ton code passe par la macro appelée avant de revenir à la macro de base, non ?zombe a écrit :Au faite c'était pour me rassurer que c'est possible d'appeler des macros à partir d'autre sans conséquence.[/code]
Cordialement.
Merci pour ton coup main.
Mon problème a été solutionné.
Salut Zombe,
Je vois que tu as bien pris note de ma remarque sur ton autre fil. Espérons que ça dure.
Il me semble en effet que ça ne coûte pas grand chose, lorsque tu as obtenu ta réponse, d'écrire un petit "Merci, tout fonctionne comme désiré".
Comme tu demandes de l'aide, évite dans tes textes de donner des ordres du genre "Je veux". L'utilisation du conditionnel est quand même plus approprié : "Je voudrais, je désirerais, je souhaiterais, ....".
En ce qui concerne le petit V vert, il est bien évident qu'il est 1000 fois plus utile s'il est visible lorsque ton fil est fermé. Je te propose que tu réessaies encore d'indiquer que tes fils sont résolus en cliquant - dans ton dernier message - sur le petit V vert à disposition. Il n'y a pas de raison que ça ne fonctionne pas chez toi.
Cordialement.
Bonjour Yvouille
Merci pour vos précieux conseils que je prend note.
Je vais revoir pour le bouton vert.