Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireLes classeursLes sauvegardes

Il suffit de faire

Vba
Sélectionnez

ActiveWorkbook.Close False




La méthode Close permet de gérer un grand nombre de cas. Sa syntaxe générale est :

Vba
Sélectionnez

Close(SaveChanges, FileName, RouteWorkbook)



Si SaveChanges est vrai et que le classeur n'a pas encore été enregistré, il utilisera la valeur de FileName. Si celle-ci n'est pas précisée, il y aura appel de la boîte de dialogue SaveAs.

Créé le 14 février 2004  par Bidou

La méthode SaveAs permet de sauvegarder le classeur sur le PC:

Vba
Sélectionnez

Dim Fichier As String
 
Fichier = "C:\Dossier\NomClasseur.xls"
ThisWorkbook.SaveAs Fichier




Vous pouvez aussi spécifier un mot de passe lors de la sauvegarde:

Vba
Sélectionnez

Dim Fichier As String
 
Fichier = "C:\Dossier\NomClasseur.xls"
ThisWorkbook.SaveAs Fichier, , "PassWord99"



Créé le 10 avril 2007  par SilkyRoad

Utilisez la méthode Save:

Vba
Sélectionnez

'Enregistre les modifications d'un fichier spécifique nommé NomClasseur.xls
Workbooks("NomClasseur.xls").Save
Vba
Sélectionnez

'Enregistre les modifications du fichier contenant la macro
ThisWorkbook.Save
Créé le 10 avril 2007  par SilkyRoad

La méthode SaveCopyAs permet de créer une copie de sauvegarde, sans modifier le classeur spécifié.

Vba
Sélectionnez

Dim Chemin As String, Fichier As String
 
Chemin = "C:\Dossier Archivage\"
'Ajoute la date du jour et l'heure dans le nom du fichier
Fichier = "NomClasseur_" & Format(Date, "yyyymmdd") & "_" & Format(Time, "hhmmss") & ".xls"
 
ActiveWorkbook.SaveCopyAs Chemin & Fichier
Créé le 10 avril 2007  par SilkyRoad
Vba
Sélectionnez

ThisWorkbook.Close SaveChanges:=True
Créé le 11 avril 2007  par SilkyRoad

La valeur False doit être spécifiée à l'argument SaveChanges:

Vba
Sélectionnez

ThisWorkbook.Close SaveChanges:=False




Un autre solution consiste à utiliser la propriété Saved.
La valeur True permet de préciser que le classeur n'a pas été modifié depuis le dernier enregistrement et donc aucun message d'alerte ne s'affichera lors de la fermeture.

Vba
Sélectionnez

ActiveWorkbook.Saved = True
ActiveWorkbook.Close
Créé le 11 avril 2007  par SilkyRoad

Vous pouvez utiliser ces deux méthodes:

Vba
Sélectionnez

Application.Dialogs(xlDialogSaveAs).Show
Vba
Sélectionnez

CommandBars.FindControl(ID:=748).Execute




Lors de l'affichage de la boîte de dialogue, il est possible de spécifier un nom par défaut dans le champ "Nom de fichier".
par exemple:

Vba
Sélectionnez

Application.Dialogs(xlDialogSaveAs).Show ("NomClasseur.xls")
Créé le 11 avril 2007  par SilkyRoad

Utilisez la procédure évènementielle Workbook_BeforeSave suivante, à placer au niveau du module objet ThisWorkbook:

Vba
Sélectionnez

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  If SaveAsUI = True Then Cancel = True
End Sub
Créé le 12 avril 2007  par SilkyRoad

Cet exemple boucle sur toutes les feuilles du classeur et sauvegarde chacune au format htm, dans le même répertoire que le classeur.
Une option permet d'ajouter des liens hypertextes vers les autres pages.

Vba
Sélectionnez

Dim Ws As Worksheet
Dim Fichier As String, MonCode As String
Dim i As Byte
 
'Boucle sur les feuilles de calcul du classeur
For Each Ws In ThisWorkbook.Worksheets
    'Définit le chemin de stockage de chaque page htm
    Fichier = ThisWorkbook.Path & "\" & Ws.Name & ".htm"
    'Sauvegarde au format htm
    ActiveWorkbook.PublishObjects.Add _
        (xlSourceSheet, Fichier, Ws.Name, "", xlHtmlStatic, "", "").Publish
 
    '--- ajout liens hypertextes dans les pages créées ---
    Open ThisWorkbook.Path & "\" & Ws.Name & ".htm" For Append As #1
        Print #1, "<HTML>"
        Print #1, "<HEAD><BODY>"
 
        For i = 1 To Worksheets.Count
            If Ws.Name <> Worksheets(i).Name Then
                MonCode = "<PR><CENTER><td bgcolor='#FFFFFF' rowspan='2'><a href='" & _
                    ThisWorkbook.Path & "\" & Worksheets(i).Name & ".htm'>" & _
                    Worksheets(i).Name & "</a></td><BR></CENTER>"
 
                Print #1, MonCode
            End If
        Next i
 
        Print #1, "</HEAD></BODY>"
    Close #1
Next
 
'Affiche la 1ère page créée.
ThisWorkbook.FollowHyperlink ThisWorkbook.Path & "\" & _
    Worksheets(1).Name & ".htm", NewWindow:=True
Créé le 14 mai 2007  par SilkyRoad

Quand vous ouvrez la boîte de dialogue "Enregistrer sous",
Cliquez sur le bouton "Outils", en bas et à gauche dans la fenêtre.
Sélectionnez "Options générales".
Saisissez et confirmez le mot de passe.

Créé le 2 octobre 2007  par SilkyRoad

xlsx est l'extension pour sauvegarder les classeurs Excel2007 sans macro.
xlsm est l'extension pour sauvegarder les classeurs Excel2007 avec macro.

Lorsque vous cliquez sur le bouton "Enregistrer" ou "Enregistrer sous au format par défaut" et que le type de fichier défini par défaut est .xlsx, si le classeur contient des macros, Vous aurez un message d'alerte pour vous prévenir que le format n'est pas compatible.
En cliquant sur le bouton "Non", la boîte de dialogue "Enregistrer sous" s'affiche et vous pouvez modifier le format de fichier. Par contre si vous cliquez sur le bouton "OUI", le classeur est enregistré sans les procédures. vos macros sont encore visibles et utilisables tant que le classeur est ouvert, mais si vous fermez le fichier et que vous le ré-ouvrez, les macros ont disparues.

Créé le 2 octobre 2007  par SilkyRoad

Vous pouvez lister le nom des lecteurs amovibles, vérifier s'ils sont prêts et quel est leur espace libre.
Il est aussi possible de renommer préalablement la clé pour l'identifier plus facilement dans la procédure (Drv.VolumeName).

Vba
Sélectionnez

Sub ListeLecteursAmovible()
Dim FSO As Object
Dim Drv As Object
 
Set FSO = CreateObject("Scripting.FileSystemObject")
 
For Each Drv In FSO.Drives
    If Drv.DriveType = 1 Then _
        MsgBox "le support " & Drv.DriveLetter & " (" & Drv.VolumeName & _
        ") est pret : " & Drv.IsReady & vbLf _
        & "espace libre : " & Format(Drv.FreeSpace, "#,##0") & " octets."
Next
End Sub




Un exemple qui boucle sur les lecteurs amovibles, qui enregistre le classeur si le nom de la clé est trouvé et si le lecteur est prêt:

Vba
Sélectionnez

Sub Sauvegarde_Sur_LecteurAmovible()
    Dim FSO As Object
    Dim Drv As Object
 
    'Correspond au nom que vous avez préalablement attribué à votre clé.
    Const Cible As String = "MaCle"
 
    Set FSO = CreateObject("Scripting.FileSystemObject")
 
    On Error Resume Next
    For Each Drv In FSO.Drives
        If Drv.DriveType = 1 Then
            If Drv.VolumeName = UCase(Cible) And Drv.IsReady Then
                ThisWorkbook.SaveAs Drv.DriveLetter & ":\Nom classeur.xls" ', xlWorkbook '(pour xl2007)
                Exit Sub
            End If
        End If
    Next
 
    MsgBox "Enregistrement non effectué." & vbCrLf & _
        "Le lecteur amovible '" & Cible & "' n'a pas été trouvé."
End Sub
Créé le 5 décembre 2007  par SilkyRoad

Si vous fermez l'application après avoir modifié la procédure d'une macro complémentaire, Excel n'affiche pas de message d'alerte "Voulez vous enregistrer les modifications ...?". Excel ne renvoie aucune information préalable à la fermeture et vos modifications sont perdues.
Vous devez impérativement sauvegarder toutes vos modifications de procédure en cliquant sur le bouton "Enregistrer" (ou en utilisant le raccourci clavier Ctrl+S).

Créé le 19 février 2008  par SilkyRoad

Menu Fichier (Ou bouton Office sous Excel 2007).
Menu Ouvrir.
Recherchez et sélectionnez votre classeur depuis la boîte de dialogue.
Cliquez sur la droite du bouton Ouvrir.
Sélectionnez l'option "Ouvrir une copie".
Le fichier est ouvert et porte le nom dans le style "Copie (1)NomClasseur.xls".
La copie est automatiquement sauvegardée dans le même répertoire que le classeur original.

Vous pouvez ainsi travailler sur ce nouveau classeur sans modifier l'original.

Créé le 18 novembre 2008  par SilkyRoad

Le format DBF n'est plus pris en charge dans la version 2007 d'Excel.
Voici toutefois une astuce pour contourner ce problème :

Sauvegardez votre feuille de calcul au format csv.
Ouvrez Access 2007.
Recherchez et ouvrez le fichier csv depuis Access.
Les données sont importées dans une table.

Sélectionnez l'onglet 'Données externes' dans le ruban Access.
Cliquez sur le bouton 'Plus' dans le groupe 'Exporter'.
Choisissez l'option 'dBASE' dans la liste.
Sélectionnez un des formats de fichier.

Cliquez sur le bouton OK pour valider.

Créé le 19 février 2009  par SilkyRoad
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.