VBA - Déterminer le nom d'enregistrement d'un fichier via un userform

Bonjour à tous,

Je souhaite créer une macro qui permet de définir le nom d'enregistrement d'un fichier via un formulaire qui apparaît au moment où l'utilisateur clique sur le bouton "Enregistrer sous".

J'ai donc créé un userform et dans "ThisWorkbook" j'ai inséré cette macro :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) If SaveAsUI = False Then Exit Sub Else UserForm1.Show nomFichier = TypeMetier & TypeDocument & Version & ChampLibre Application.Dialogs(xlDialogSaveAs).Show (nomFichier) Exit Sub End If If Cancel = True Then Exit Sub End Sub

Le formulaire n'apparaît donc bien que si l'utilisateur clique sur "enregistrer sous". Le seul soucis c'est que l'utilisateur est obligé de remplir deux fois le formulaire.

Lors du premier appel de la macro, la macro exécute bien la ligne "Application.Dialogs(xlDialogSaveAs).Show (nomFichier)" puis revient en tête de la macro.

Quelqu'un comprend-t-il pourquoi ?

Je vous joint le fichier

Merci et bonne journée,

Maëlle.

Tu avais deux fois l 'ouverture de la boite de dialogue, dont 1 dans thisworkbook

Bonjour,

Je pense que ça vient du fait que l'évenement "BeforeSave" est de nouveau activé par l'instruction :

Application.Dialogs(xlDialogSaveAs).Show (nomFichier)

Il faudrait donc au préalable désactiver les procédures événementielles, le temps d’exécuter la macro :

'...
Application.EnableEvents = False 
Application.Dialogs(xlDialogSaveAs).Show (nomFichier)
Application.EnableEvents = True
'...

Bonjour,

Pedro22 merci. Ça fonctionne... mais le userform s'affiche de nouveau après avoir enregistré le fichier. J'ai testé comme cela :

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Application.EnableEvents = False If SaveAsUI = False Then Exit Sub Else UserForm1.Show nomFichier = TypeMetier & TypeDocument & Version & ChampLibre Application.Dialogs(xlDialogSaveAs).Show (nomFichier) Exit Sub End If 'If Cancel = True Then Exit Sub Application.EnableEvents = True End Sub

Regarde mon fichier il fonctionne normalmeent

Tu avais deux fois l 'ouverture de la boite de dialogue, dont 1 dans thisworkbook

Merci pour la réponse. Mais du coup là le formulaire ne s'affiche plus du tout.

Chez moi il fonctionne etrange

tu sauvegarde comment ?

Regarde mon fichier il fonctionne normalmeent

Oups, effectivement ça fonctionne bien le formulaire ne s'affiche qu'une seule fois, mais le nom de fichier n'est plus pré déterminé.

img

img.jpg

capture

Le soucis ici c'est que le nom de fichier qu'on me propose est "EnregsitrerSousNomCode2" alors que ça devrait être un conctaner des données remplies dans le formulaire juste avant.

A tester

A tester

Ok parfait ça fonctionne ! Merci beaucoup

Bonne continuation

De même, merci !

Rechercher des sujets similaires à "vba determiner nom enregistrement fichier via userform"