XL 2019 Activer une deuxième macro à partir de la première.

BALANCIE

XLDnaute Junior
Bonjour à tous.

J'ai besoin d'avoir la possibilité d'appeler une deuxième macro à partir de la première.
En clair, la première me permet d'enregistrer mon classeur , il me confirme par une mgbox l'enregistrement.

Ma demande : Une fois cliquer sur OK , une deuxième box me demande si je veux où pas (oui/non) enregistrer le classeur sur un DD externe. par le biais d'une deuxième macro.

Pourquoi ? Mon travail est utilisé par diverses personnes et la lettre des DD externes est la même.
Par manque de place, j'ai besoin d'avoir qu'un seul bouton de commande sur le classeur (et moi, je n'ai pas besoin d'enregistrer sur un DD externe). Dont le choix.


J'ai essayé avec la variable "Call " à la fin de ma première macro mais je ne suis pas doué en VBA même si je comprends le principe. Merci de votre aide.

La fin de ma macro se termine ainsi :

ActiveWorkbook.Save
Select Case MsgBox(" Sauvegarde réussie - ", , " Sauvegarde.")


End Select
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Balancie,
Un essai possible avec :
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ActiveWorkbook.Save
If MsgBox(" Sauvegarde réussie." & Chr(10) & "Voulez vous une sauvegarde sur DD ?", vbYesNo, " Sauvegarde.") = vbYes Then
    ' Mettre ici le code de sauvegarde sur DD.
End If
End Sub
A mettre dans Thisworkbook.
' Mettre ici le code de sauvegarde sur DD. : Mettre soit la macro de sauvegarde en DD soit un Call Macro2.
 

BALANCIE

XLDnaute Junior
Bonsoir Balancie,
Un essai possible avec :
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
ActiveWorkbook.Save
If MsgBox(" Sauvegarde réussie." & Chr(10) & "Voulez vous une sauvegarde sur DD ?", vbYesNo, " Sauvegarde.") = vbYes Then
    ' Mettre ici le code de sauvegarde sur DD.
End If
End Sub
A mettre dans Thisworkbook.
' Mettre ici le code de sauvegarde sur DD. : Mettre soit la macro de sauvegarde en DD soit un Call Macro2.
Bonsoir,
Merci je vais essayer.
 

dysorthographie

XLDnaute Accro
Bonjour,
Le cross posting fait que les internautes des deux forums ont exactement la même discussion.

Le poste #2 de sylvanu est exactement le même que le poste #2 de Thumb down.

Il manquerait plus que sylvanu te réponde ça
Code:
ActiveWorkbook.Save
 MsgBox "Sauvegarde réussie ",, " Sauvegarde."
Externe

Et là on verrait le guain de temps que procure le cross posting 😂
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Dysorthographie, Balancie,
Désolé, je ne le savais pas.
Je rajouterais juste un dernier point : Sur l'autre site la conversation s'arrête sans même une réponse de votre part.
Le minimum est de conclure un fil par un statut : Ca marche, Ca marche pas , Pourquoi ....
Juste un problème de respect envers des personnes qui essaient de vous aider. :)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Et comme on n'est pas rancunier, testez ces codes.
Si le disque externe est présent il sauvegarde sur les deux emplacements, si le disque externe est absent il ne fait rien, et donne un message sur les actions effectuées.
Modifiez le chemin du disque externe CheminDisqueExterne
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
CheminDisqueExterne = "D:\Essai\" ' Mettre chemin fichier sur disque externe, doit se terminer par "\"
Application.EnableEvents = False
Application.DisplayAlerts = False
ActiveWorkbook.Save     ' Sauvegarde dans le dossier courant
On Error Resume Next    ' Si une erreur se produit on passe à la ligne suivante
ActiveWorkbook.SaveAs CheminDisqueExterne & ThisWorkbook.Name ' Sauvegarde sur le disque externe
If Err.Number = 0 Then  ' Si Err=0 pas d'erreur donc fichier sauvegardé sur les deux emplacements
    MsgBox "Sauvegarde réussie sur dossier interne et sur disque externe."
Else                    ' Si Err<>0 erreur donc pas de disque externe
    MsgBox "Sauvegarde réussie sur dossier interne." & Chr(10) & "(Disque externe absent.)"
End If
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Et le même sans message car ce n'est pas obligatoirement utile :
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
CheminDisqueExterne = "D:\Essai\" ' Mettre chemin fichier sur disque externe, doit se terminer par "\"
Application.EnableEvents = False
Application.DisplayAlerts = False
ActiveWorkbook.Save     ' Sauvegarde dans le dossier courant
On Error Resume Next    ' Si une erreur se produit on passe à la ligne suivante
ActiveWorkbook.SaveAs CheminDisqueExterne & ThisWorkbook.Name ' Sauvegarde sur le disque externe
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
 

BALANCIE

XLDnaute Junior
Bonjour,
Merci pour vos aides, cela marche.

Concernant vos remarques . Evidement je vous présente mes excuses. Je ne le savais pas. Donc, je ferais particulièrement attention. Je comprends parfaitement la démarche et vous avez totalement raison.

Bonne journée à vous.
BALANCIE.
 

BALANCIE

XLDnaute Junior
Re,
Et comme on n'est pas rancunier, testez ces codes.
Si le disque externe est présent il sauvegarde sur les deux emplacements, si le disque externe est absent il ne fait rien, et donne un message sur les actions effectuées.
Modifiez le chemin du disque externe CheminDisqueExterne
VB:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
CheminDisqueExterne = "D:\Essai\" ' Mettre chemin fichier sur disque externe, doit se terminer par "\"
Application.EnableEvents = False
Application.DisplayAlerts = False
ActiveWorkbook.Save     ' Sauvegarde dans le dossier courant
On Error Resume Next    ' Si une erreur se produit on passe à la ligne suivante
ActiveWorkbook.SaveAs CheminDisqueExterne & ThisWorkbook.Name ' Sauvegarde sur le disque externe
If Err.Number = 0 Then  ' Si Err=0 pas d'erreur donc fichier sauvegardé sur les deux emplacements
    MsgBox "Sauvegarde réussie sur dossier interne et sur disque externe."
Else                    ' Si Err<>0 erreur donc pas de disque externe
    MsgBox "Sauvegarde réussie sur dossier interne." & Chr(10) & "(Disque externe absent.)"
End If
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Et le même sans message car ce n'est pas obligatoirement utile :
Code:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
CheminDisqueExterne = "D:\Essai\" ' Mettre chemin fichier sur disque externe, doit se terminer par "\"
Application.EnableEvents = False
Application.DisplayAlerts = False
ActiveWorkbook.Save     ' Sauvegarde dans le dossier courant
On Error Resume Next    ' Si une erreur se produit on passe à la ligne suivante
ActiveWorkbook.SaveAs CheminDisqueExterne & ThisWorkbook.Name ' Sauvegarde sur le disque externe
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Franchement MERCI. Je suis confus. BALANCIE.
 

Discussions similaires