IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Enregistrement d'un classeur crée. [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 30
    Points
    30
    Par défaut Enregistrement d'un classeur crée.
    Bonjour à tous,
    Voilà un moment que je n'avais pas fait appel à vous mais aujourd'hui je bloque sur une incompréhession que je ne parviens pas à résoudre (Pourtant cela me semble simple ...)
    J'ai un programme situé sur un "ClasseurPrincipal". A partir de celui-ci je lance une procédure d'archivage dont le rôle est de créer un classeur "Sauvegarde" dans lequel je recopie des feuilles du "ClasseurPrincipal". Une fois cette copie créée je l'enregistre et je le ferme.
    Mon problème est que l'enregistrement ne parvient pas à prendre en compte le nom de classeur que je souhaite attribuer (il me garde, par exemple le nom de "Classeur2"). Pour ce qui est du chemin de sauvegarde, il est correct.
    Voici une partie de mon code ... Pouvez vous me dire ce qui cloche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Sub Sauvegarde_Saison()
     
    Dim NomClasseurPrincipal As String
    Dim ClasseurPrincipal As Workbook
    Dim NomSauvegarde As String
    Dim Sauvegarde As Workbook
    Dim NbFeuilles As Integer
    Dim n As Long
     
            NomClasseurPrincipal = ActiveWorkbook.Name
     
            Set ClasseurPrincipal = Workbooks(NomClasseurPrincipal)
     
            Répertoire = ThisWorkbook.Path
     
    'On détermine le chemin de la future archive.
     
            Répertoire1 = Répertoire & "\" & "Archives" & "\"
     
    'On crée un nouveau classeur.
     
    Set Sauvegarde = Workbooks.Add
     
    'On détermine le nombre de feuilles de ce classeur.
     
    NbFeuilles = Worksheets.Count
     
    'On crée des feuilles tant qu'il n'y en a pas 13 (Il y a, au total, 13 feuilles à sauvegarder).
     
    Do While NbFeuilles < 13
        Sheets.Add After:=Worksheets(Worksheets.Count)
        NbFeuilles = NbFeuilles + 1
    Loop
     
    'On détermine le nom de l'archive
     
    DateActuelle = Date
     
    AnneeActuelle = Mid(DateActuelle, 7, 4)
    MoisActuel = Mid(DateActuelle, 4, 2)
     
    If MoisActuel >= 1 And MoisActuel < 10 Then
        AnneeAvant = AnneeActuelle - 1
    End If
     
    NomSauvegarde = "Archive - Saison : " & AnneeAvant & " - " & AnneeActuelle & ".xls"
     
    'On effectue la sauvegarde du classeur crée.
     
    Sauvegarde.SaveAs Filename:=Répertoire1 & NomSauvegarde
    NomSauvegarde = ActiveWorkbook.Name
     
    'On renomme toutes les feuilles du classeur crée et .... poursuite du programme (Copie des contenus etc...).
    [/CODE]

    Ce programme s'exécute correctement mais le nom crée n'est pas pris en compte. Ma sauvegarde porte le nom "de base" du classeur crée (Classeur2, Classeur3 ...)

    Merci pour vos conseils car en ce moment je ne parviens pas à trouver mon erreur.

    Danad38

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Exemple (commenté)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub Sauvegarde_Saison()
    Dim Rep As String, SousRep As String, NomSauvegarde As String
    Dim Wbk As Workbook
    Dim n As Integer
     
    Application.ScreenUpdating = False
    Rep = ThisWorkbook.Path
    SousRep = Rep & "\" & "Archives"
    'Si le sous répertoire n'existe pas, on le crée
    If Dir(SousRep, vbDirectory) = "" Then MkDir SousRep
    SousRep = SousRep & "\"
     
    'On crée un nouveau classeur avec 12 feuilles
    n = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 12
    Set Wbk = Workbooks.Add
    Application.SheetsInNewWorkbook = n
     
    'Nom de sauvegarde (attention aux caratères interdits
    NomSauvegarde = "Archive - Saison _ " & Year(Date) - 1 & " - " & Year(Date) & ".xls"
     
    With Wbk
        .SaveAs Filename:=SousRep & NomSauvegarde
     
        'Exemple on renomme les 12 feuilles du nouveau classeur
        For n = 1 To 12
            .Worksheets(n).Name = MonthName(n)
        Next n
     
        .Close True
    End With
    Set Wbk = Nothing
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 30
    Points
    30
    Par défaut [XL-2007] Enregistrement d'un classeur crée.
    Bonjour mercatog,

    Merci pour ta réponse. J'admire toujours les personnes qui "savent programmer" pour leur capacité à trouver des "racourcis de programmation" ! (Créer un classeur directement avec 13 feuilles !).

    J'ai testé ton programme mais, inclus dans mon module, il plante sur la ligne : 23. Erreur 1004. Or mon répertoire existe. Il est accessible puisque avec ma programmation un fichier était bien enregistré (hélas pas avec le nom souhaité) et enfin le nom du fichier est correct.

    Vois-tu ou se situe "le problème" ?

    Voici le code que j'ai inclu.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    Sub Sauvegarde_Saison()
     
    Dim NomClasseurPrincipal As String
    Dim ClasseurPrincipal As Workbook
    Dim NomSauvegarde As String
    Dim Sauvegarde As Workbook
    Dim Répertoire As String
    Dim Répertoire1 As String
    Dim NbFeuilles As Integer
    Dim n As Long
     
    'On affecte à une variable le chemin de ce classeur principal.
     
            Répertoire = ThisWorkbook.Path
     
    'On détermine le chemin de la future archive.
     
            Répertoire1 = Répertoire & "\" & "Archives"
     
    'Si le sous répertoire n'existe pas on le crée.
     
    If Dir(Répertoire1, vbDirectory) = "" Then MkDir Répertoire1
    Répertoire1 = Répertoire1 & "\"
     
    'On crée un nouveau classeur de 13 feuilles.
     
    NbFeuilles = Application.SheetsInNewWorkbook
    Application.SheetsInNewWorkbook = 13
     
    Set Sauvegarde = Workbooks.Add
     
    Application.SheetsInNewWorkbook = NbFeuilles
     
    'Je garde la méthode pour déterminer le nom car il dépend de la date de la sauvegarde dans l'année (avant octobre).
     
    DateActuelle = Date
     
    AnneeActuelle = Mid(DateActuelle, 7, 4)
    MoisActuel = Mid(DateActuelle, 4, 2)
     
    If MoisActuel >= 1 And MoisActuel < 10 Then
        AnneeAvant = AnneeActuelle - 1
    End If
     
    'Détermination du nom de l'archive.
     
    NomSauvegarde = "Archive - Saison : " & AnneeAvant & " - " & AnneeActuelle & ".xls"
     
    'On sauvegarde.
     
    With Sauvegarde
        .SaveAs Filename:=Répertoire1 & NomSauvegarde
    End With
     
    'Suite du programme.
    'On renomme toutes les feuilles du classeur crée (avec les noms des feuilles que l'on copie) ....
    Dans mon code, l'erreur survient sur la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .saveAs Filename:=Répertoire1 & NomSauvegarde
    Merci pour ton aide et bonne soirée.

    Danad38

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Est ce que tu peux renommer manuellement un fichier comme ceci Toto:Tata.xls

    Essaies.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 30
    Points
    30
    Par défaut Enregistrement d'un classeur crée.
    Bonjour mercatog,

    Désolé pour ce long retard à répondre à ta proposition. J'ai été absent jeudi toute la journée et, panne de voiture oblige, voici deux jours que je suis les mains dans la mécanique ... (et ce n'est pas fini !)
    En ce qui concerne ta proposition, je ne comprends pas bien ce que tu veux dire. Tu parles de renommer manuellement mon fichier ... mais quand ?
    Avec mon premier code, j'obtenais bien un fichier mais pas avec le nom que je souhaitais. Avec le dernier code que je t'ai envoyé, le programme se bloque et je n'obtiens rien de plus après la création du fichier.
    Pourtant j'ai déjà, dans une autre partie de mon programme, utilisé le "genre de code" que tu proposes. A un moment, à l'aide d'un bouton placé sur une feuille du programme, je copie cette feuille dans un nouveau classeur et je l'enregistre à l'aide d'un nom constitué d'éléments pris dans des cellules de cette feuille. Là je n'ai aucun problème.
    Peux-tu me préciser ta pensée lorsque tu me proposes de renommer manuellement.

    Encore merci et mille excuses pour mon retard.

    Danad38

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    As tu essayé de renommer le fichier comme demandé ?
    Je pense pas sinon tu aurais ta réponse !

  7. #7
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, les caractères interdits pour les noms de fichiers sont "*/:<>?[\]| or NomSauvegarde en comporte Archive - Saison : 2011 - 2012.xls

    D'autre part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SaveAs Filename:=Répertoire1 & NomSauvegarde, FileFormat:=xlExcel8

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 30
    Points
    30
    Par défaut Enregistrement d'un classeur crée
    mercatog, bbil, kiki29,

    Bonsoir à vous trois.

    Désolé mercatog de ne pas avoir compris ton message. Je ne suis pas très brillant en programmation mais je connais ces caractères interdits pour avoir utilisé Excel depuis sa version 4 (oui, c'est très loin) et pourtant ... Totalement concentré sur mes lignes de code, je n'ai pas fait attention à cette grossière erreur. C'est un classique du genre bbil et non de la mauvaise volonté, on peut quelquefois relire 10 fois une phrase sans voir la faute qui s'y cache. Ce n'était pas de ma part un non respect des conseils donnés. Merci, kiki29 pour avoir justement posé le doigt sur ce que je ne voyais pas. La lecture de ta phrase m'a brutalement fait percuter pourquoi le programme plantait... Je n'avais plus besion d'autre explication... (Bien évidemment, les deux points retirés ... tout fonctionne ... Magique n'est-ce pas ?)

    Pour conclure ce sujet, encore une fois désolé mercatog, sans rancune bbil et merci kiki29.

    Danad38

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enregistrement d'un classeur et d'une feuille ?
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 16/03/2010, 13h43
  2. Enregistrement d'une requète crée au runtime
    Par cotmar dans le forum Runtime
    Réponses: 5
    Dernier message: 24/05/2006, 09h46
  3. [Excel] Problème d'enregistrement d'un classeur
    Par Geache dans le forum Excel
    Réponses: 3
    Dernier message: 28/03/2006, 20h39
  4. [VBA-E]Obtenir la date d'enregistrement d'un classeur fermé
    Par Sylvain2003 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/03/2006, 14h36
  5. Enregistrer automatiquement un classeur Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/03/2006, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo