Plantage avec Application.Dialogs(xlDialogSaveAs).Show

phylos

XLDnaute Nouveau
Bonjour à tous.

Je ne suis pas expert en VBA Excel et je rencontre un problème avec la fonction Application.Dialogs(xlDialogSaveAs).Show
J'ai un classeur de calcul d'horaires mensuel que je veux enregister, en cliquant sur la disquette "Enregistrer", en fonction d'un nom et d'une année définis dans ma feuille "JANVIER"

Worksheets("JANVIER").Range("B5").Value = le nom de l'employé
Worksheets("JANVIER").Range("B3").Value = l'année en cours

Ma variable "Nom_Fichier" fonctionne bien et elle est vide si le nom de l'employé n'est pas défini ce qui me permet de choisir un nom de sauvegarde.
Mon problème, c'est que si je mets un nom de fichier autre que celui d'origine, le fichier s'enregistre bien au nouveau nom, mais excel plante lamentablement après la sauvegarde : "Microsoft Office Excel a rencontré un problème et doit fermer..."

Voici mon programme placé dans ThisWorbook :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

Dim Nom_Fichier As String

If Worksheets("JANVIER").Range("B5").Value <> "" Then
Nom_Fichier = Worksheets("JANVIER").Range("B5").Value & " - Horaires " & Worksheets("JANVIER").Range("B3").Value
Else
Nom_Fichier = ""
End If

Application.Dialogs(xlDialogSaveAs).Show Nom_Fichier, 1

End Sub

Petite précision, je travaille sous Excel 2003 et 2007 avec le même problème.

Merci à ceux qui pourront m'éclairer.
 
Dernière édition:

phylos

XLDnaute Nouveau
Re : Plantage avec Application.Dialogs(xlDialogSaveAs).Show

Bonjour,

Il y a l'année, par exemple : 2012

Mais là n'est pas le problème, car j'ai fait des essais en remplacant ma variable "Nom_Fichier" par un nom bateau : "Toto" par exemple, ça plante pareil
 

gilbert_RGI

XLDnaute Barbatruc
Re : Plantage avec Application.Dialogs(xlDialogSaveAs).Show

En fait, ça ne plante que si je mets un autre nom que celui d'origine.

faire un test avec ceci puis voir ce qui ne fonctionne pas

Code:
Sub test()
    Dim Nom_Fichier As String
    If Worksheets("JANVIER").Range("B5").Value <> "" Then
        Nom_Fichier = Worksheets("JANVIER").Range("B5").Value & " - Horaires " & Worksheets("JANVIER").Range("B3").Value
    Else
        Nom_Fichier = ""
    End If
    MsgBox Nom_Fichier
    Application.Dialogs(xlDialogSaveAs).Show Nom_Fichier, 1

End Sub
 

phylos

XLDnaute Nouveau
Re : Plantage avec Application.Dialogs(xlDialogSaveAs).Show

Effectivement, là ça fonctionne, à condition que je le mette dans un module. Mais ça plante toujours dans ThisWorkbook et en plus ça me met 2 fois le MsgBox
 

phylos

XLDnaute Nouveau
Re : Plantage avec Application.Dialogs(xlDialogSaveAs).Show

Ca fonctionne bien, si je ferme, ça enregistre et ça ferme.
Le problème, c'est que ceux qui vont utiliser ce programme vont vouloir enregister avant de quitter (réflexe normal)
 

gilbert_RGI

XLDnaute Barbatruc
Re : Plantage avec Application.Dialogs(xlDialogSaveAs).Show

Ca fonctionne bien, si je ferme, ça enregistre et ça ferme.
Le problème, c'est que ceux qui vont utiliser ce programme vont vouloir enregister avant de quitter (réflexe normal)

et comme ceci
 

Pièces jointes

  • marcel - Horaires 2012.xls
    55.5 KB · Affichages: 76
  • marcel - Horaires 2012.xls
    55.5 KB · Affichages: 100
  • marcel - Horaires 2012.xls
    55.5 KB · Affichages: 91

phylos

XLDnaute Nouveau
Re : Plantage avec Application.Dialogs(xlDialogSaveAs).Show

Merci beaucoup pour cette solution qui fonctionne très bien.

Cependant, j'aimerais comprendre pourquoi ma solution initiale ne fonctionnait pas. Est-ce un bug de la formule VBA ?

Merci pour tout en tout cas :)
 

Discussions similaires

Statistiques des forums

Discussions
312 210
Messages
2 086 281
Membres
103 170
dernier inscrit
HASSEN@45