VBA enregistrer sous

Bonjour au forum,

En fin d'année, j'ai une macro qui réinitialise le fichier. (purge, formatage etc...)

j'aurais besoin d'un bout de code pour afficher la fenêtre "enregistrer sous" et si possible

afficher le répertoire en cours.

De sorte que l'utilisateur n'aurait qu'à taper le nouveau nom du fichier.

merci à vous

amicalement

Claude.

Salut Claude,

essaies ça:

Sub test()
Application.Dialogs(xlDialogSaveAs).Show
End Sub

Cela ouvre normalement la fenêtre enregistrer sous à l'endroit où est ton fichier... en tout cas chez moi, ça le fait bien...

J'attends tes remarques,

Souri84

Bonjour Claude,

Essaie le code suivant :

Sub Enregistrement()

Dim NomFichier As Variant
Dim Chemin As Variant

Chemin = ActiveWorkbook.Path
NomFichier = InputBox("Comment voulez-vous nommer votre fichier ?", "Enregistrement", , vbOKOnly)

If NomFichier = "" Then
MsgBox "impossible d'enregistrer"
Exit Sub

Else

ActiveWorkbook.SaveAs Filename:=Chemin & "\" & NomFichier _
        , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False

MsgBox "Fichier " & Chemin & "\" & NomFichier & " enregistré"
End If

End Sub

C'est sans doute améliorable, mais ça marche chez moi.

Amicalement,

V_Elbie

Bonjour

souri84,

C'est presque çà, mais la fenêtre n'est pas dans le sous/répertoire, elle est dans le répertoire racine.(Outil/option/général/dossier par défaut)

Exemple : C:\excel2008\forum\fichier.xls

la fenêtre est dans excel2008 au lieu de forum.

V_Elbie,

Je n'ai pas testé, je voudrais moins sophistiqué (direct au bon répertoire avec le nom actuel

en grisé), prêt à changer la version, tu vois ? et sans inputbox.

Merci à vous deux

Claude.

Re,

Chez moi, le code de souri84 fonctionne très bien, et pourtant j'avais mis le fichier dans un sous-répertoire de 5ème niveau.

Amicalement,

V_Elbie

re,

chez moi, même manuellement :

j'ai la fenêtre avec en bas le fichier actuel, au milieu les répertoires et en haut : enregistrer dans :et là c'est le répertoire par défaut.

c'est-à-dire que je dois sélectionner le répertoire, normal çà ??

à suivre

Claude.

Bonsoir Claude, le forum,

Essaye ceci :

Sub Sauve()
'Macro par Dan pour Dubois le 29/05/08
Dim NomFichier As String, Chemin As String
Chemin = ThisWorkbook.Path
ChDir Chemin
Application.Dialogs(xlDialogSaveAs).Show
End Sub

Amicalement

Dan

Bonsoir et félicitations, monsieur modérateur,

Je sais pas ce qui se passe, mais ton code me provoque une erreur Excel et m'oblige à fermer.(envoyer un rapport ?)

J'ai essayé 3 ou 4 fois

Ou dois-je mettre ce code ? (là il est dans un module, macro "purge")

il ne manque pas quelque chose ?

amicalement

Claude.

re,

Effectivement il est dans un module.

Je n'ai aucune erreur chez moi.

Dis moi quelle erreur tu as.

par contre "NomFichier As String" peut être enlevé.

A te relire

Dan

re,

je t'envoie le code complet.

Sub purge() '**** changement d'année scolaire suivante *****
Dim Chemin As String
Chemin = ThisWorkbook.Path
ChDir Chemin
   Sheets("base").Select
        Application.ScreenUpdating = False
        Application.EnableEvents = False
                    [base].Select
                    With [base]
                        .RowHeight = 15 'hauteur ligne
                    End With
        [A65536].End(xlUp).Name = "FINsecteur"
        Range([n8], [FINsecteur].Offset(-2, 3)).ClearContents
        Range([n8], [FINsecteur].Offset(-2, 3)).Interior.ColorIndex = xlNone  'efface couleurs
        Range([o8], [o65536].End(xlUp)).ClearContents '(format points)
        Range([ag8], [ag65536].End(xlUp)).ClearContents '(cumul annot)
        Range([aL8], [aL65536].End(xlUp)).ClearContents '(N° reçu)
        [aL2] = 1 'remise à zéro compteur reçu

       '**********mise à jour calendrier et liste mois *************
        With [base!d7]
            .Value = "9/1/" & Year(Date)
            .NumberFormat = "mmm-yy"
            .AutoFill Destination:=Range("d7:n7")
        End With
    Sheets("listes").Select
        With [listes!c21]
            .Value = "9/1/" & Year(Date)
            .NumberFormat = "mmm-yy"
            .AutoFill Destination:=Range("c21:c31")
        End With
            [c20] = 1 'septembre actif
         [topA] = "               Action"
    Sheets("base").Select
 Application.EnableEvents = True
       [xx2].Select
    Application.Dialogs(xlDialogSaveAs).Show
       MsgBox ("Le fichier est prêt pour une nouvelle année" & Chr(10) & "Vous pouvez inscrire de nouvelles élèves et en radier d'autres" & Chr(10) & "le calendrier et la liste mois sont à jour" & Chr(10) & "Bon travail")
End Sub

Je ne vois pas ou çà coince, cette ligne seule fonctionne, mais pas dans le bon répertoire.

    Application.Dialogs(xlDialogSaveAs).Show

biizarre !!

Claude.

Re,

Pourquoi dans ton code fais tu :

Sheets("base").Select
Application.ScreenUpdating = False
Application.EnableEvents = False

au lieu de

 With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Sheets("base").Select
[base].Select
With [base]
.RowHeight = 15 'hauteur ligne
End With

au lieu de

With [base]
.select
.RowHeight = 15 'hauteur ligne
End With
Sheets("base").Select
Application.EnableEvents = True
[xx2].Select

au lieu de

With Sheets("base")
.Select
[xx2].Select
End with

Mets

Chemin = ThisWorkbook.Path
ChDir Chemin

juste avant

Application.Dialogs(xlDialogSaveAs).Show

Dis moi

Dan

re,

C'est vrai que je ne maitrise pas bien les "With"

j'ai modifié comme tu dis (merci pour les corrections)

en début de macro:

Dim Chemin As String

à la fin :

    'Chemin = ThisWorkbook.Path
    'ChDir Chemin
    Application.Dialogs(xlDialogSaveAs).Show

En supprimant les 2 lignes Chemin, çà passe. sinon çà plante

A noter que mon ThisWorkbook est vide. (normal ?)

Claude.

re,

Le fait de voiir Thisworkbook dans le code n'a rien avoir avec ton thisworbook VBA vide ou non.

Dans ton code si tu ajoutes MSGBOX Thisworkbook.path avant "Application.....", cela te renvoie quoi ?

A te relire

Dan

Bonjour à tous,

Salut Dan,

Cela provoque le plantage.

    'MsgBox ThisWorkbook.Path
    Application.Dialogs(xlDialogSaveAs).Show

J'ai supprimé le

Application.ScreenUpdating = False

pour essayer de voir ou çà coince.

en début de macro, au 1er F8 : plantage !!

Je retire le :MsgBox ThisWorkbook.Path >>>> et çà passe normalement.

si çà peut t'orienter.

Claude.

Salut Dan, Salut Claude,

Je viens de tester le code

    MsgBox ThisWorkbook.Path 
    Application.Dialogs(xlDialogSaveAs).Show

chez moi, il fonctionne... si ça peut vous aider...

Du coup le problème vient peut être d'ailleurs...

Souri84

re,

J'ai essayé une nouvelle macro test, et çà plante pareil.

Sub test2()
    Application.EnableEvents = False
     ThisWorkbook.Path
End Sub

Claude.

re,

erreur message précedent

Sub test2()
    Application.EnableEvents = False
    MsgBox ThisWorkbook.Path
End Sub

Claude.

Chez moi, il fonctionne nickel....

Je parle du code:

Sub test2() 
    Application.EnableEvents = False 
    MsgBox ThisWorkbook.Path 
End Sub

Tu veux faire quoi exactement ? enregistrer sous, on est d'accord ?

re,

Claude je ne vois pas le problème que tu peux avoir si ce n'est venant d'une autre macro Private qui s'exécute à l'arrière plan.

Quel message reçois tu ou alors mets ton fichier en ligne que je le regarde.

Par ailleurs avec ce code, tu as désactivé toutes tes macros événementielles --> False doit retourner à True.

A te relire

Dan

re,

Salut souri84, oui c'est çà, mais la fenêtre "enregistrer sous" n'affiche pas le répertoire

actuel, mais le répertoire par défaut.

Dan, je t'envoie le fichier en MP, car il contient des données privées.

comme tu dit, il doit y avoir conflit avec les private Sub.(que je ne maitrise pas bien)

amicalement

Claude.

Rechercher des sujets similaires à "vba enregistrer"