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 :

Excel plante avec macro sauvegarde feuille vers nouveau classeur avec nom spécifique [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut Excel plante avec macro sauvegarde feuille vers nouveau classeur avec nom spécifique
    bonsoir au forum

    Je souhaite faire une sauvegarde de la base Annuaire vers un nouveau classeur avec pour nom, "le nom de la feuille à sauvegarder, la date"
    Enregistrer ce fichier dans dossier de l'année en cours (date système) si inexistant boite de dialogue pour l'ajouter

    Voici un début de code qui hélas fait planter excel

    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
    Private Sub SauvCli() 
    Dim MaDate As Date
    Dim ChDir As String
    Dim stHeureExport As String
    Dim NomDest As String
     
    MaDate = Format(Date, "DD-MM-YYYY")
    ChDir = "D:\Gestion\Sauvegarde\2012\"
    stHeureExport = "_" & _
        Format(Hour(Time), "00") & "" & Format(Minute(Time), "00") & "" & _
        Format(Second(Time), "00")
    NomDest = ChDir & "\" & "Annuaire " & MaDate & " " & stHeureExport & ".xls"
     
        Sheets("Annuaire").Select
        Sheets("Annuaire").Copy
        Cells.Select
        Sheets("Dashboard").Select
        Workbooks.Add
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Application.CutCopyMode = False
        'Range("A1").Select
        ActiveWorkbook.SaveAs Filename:=NomDest, FileFormat:= _
            xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
            , CreateBackup:=False
        ActiveWindow.Close
     
        MsgBox "le fichier a été enregistré sous le nom : " & vbCrLf & NomDest
    End Sub
    Pourquoi ça plante ?

    Merci

    Stephanie

  2. #2
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    une première constatation est que tu as un backslash en trop dans le chemin du fichier : NomDest = ChDir & "\" va donner comme résultat "D:\Gestion\Sauvegarde\2012\\"

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    bonjour fring et au forum

    Étourderie de ma part. J'ai vérifié dans mon fichier et j'ai bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChDir = "D:\Gestion\Sauvegarde\2012"
    Je constate une autre chose, la macro s'arrete avec encadré jaune sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Annuaire").Copy
    je ne vois pas ou est l'erreur !

    Avez-vous une idée ?

    Merci

    Stephanie

  4. #4
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Bonjour,

    Le problème vient de là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sheets("Annuaire").Select
        Sheets("Annuaire").Copy
        Cells.Select
        Sheets("Dashboard").Select
    Vous sélectionnez une feuille, vous la copiez, vous selectionnez toutes les cellules de cette feuille, puis vous sélectionnez une autre feuille...

    Cela sent l'enregistreur de macro...

    Si je comprends ce que vous voulez faire, alors mettez plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Windows("NomFichier.xls").Activate
    Sheets("Annuaire").Select
    Cells.Select
    Selection.Copy
    Essayez déjà ça, on verra pour la suite du code

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    bonjour L'Albatros, fring et au forum

    Effectivement, j'ai commencé par faire un enregistrement de macro puis j'ai modifié ce que je voulais et dans la limite de mes connaissances en VBA.

    L'Albatros,j'ai essayé votre proposition mais hélas ça le déroulement de la macro s'arrête et souligne en jaune
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("NomFichier.xls").Activate
    En parcourant le net j'avais vu comment faire mais je ne m'en souvient plus.

    Y a-til une autre solution ?

    Merci

    Stephanie

  6. #6
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Euh... j'ai mis "NomFichier" pour donner un exemple.
    Il faut remplacer "NomFichier" par le nom de votre classeur Excel.
    C'est bien ce que vous avez fait ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    re bonjour L'Albatros, fring et au forum

    L'Abaltros, j'avais bien compris mais c'est pareil.

    Comment faire pour récupérer le nom du fichier automatiquement, comme ça je ne suis pas obliger de revenir dans le code pour changer ce dernier?

    J'ai refais un essai en vérifiant bien le nom mais maintenant le code s'arrête là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
    encadré en jaune

    Ceci doit etre correcte, non !
    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
    Public Sub SauvCli()Dim MaDate As Date
    Dim ChDir As String
    Dim stHeureExport As String
    Dim NomDest As String
     
    MaDate = Format(Date, "DD-MM-YYYY")
    ChDir = "D:\Gestion\Sauvegarde\2012"
    stHeureExport = "_" & _
        Format(Hour(Time), "00") & "" & Format(Minute(Time), "00") & "" & _
        Format(Second(Time), "00")
    NomDest = ChDir & "\" & "Annuaire " & MaDate & " " & stHeureExport & ".xls"
     
        Windows("Gestion v1.00.xls").Activate
        Sheets("Annuaire").Select
        Cells.Select
        Selection.Copy
        Sheets("Dashboard").Select
        Workbooks.Add
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
        Application.CutCopyMode = False
        ActiveWorkbook.SaveAs Filename:=NomDest, FileFormat:= _
            xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
            , CreateBackup:=False
        ActiveWindow.Close
     
        MsgBox "le fichier a été enregistré sous le nom : " & vbCrLf & NomDest
    End Sub
    Merci

    Stephanie

  8. #8
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Ok, j'ai corrigé votre code, essayez ceci:
    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
    Public Sub SauvCli()
    Dim MaDate As Date
    Dim ChDir As String
    Dim stHeureExport As String
    Dim NomDest As String
     
    MaDate = Format(Now, "DD-MM-YYYY")
    ChDir = "D:\Gestion\Sauvegarde\2012"
    stHeureExport = "_" & Format(Hour(Time), "00") & "" & Format(Minute(Time), "00") & "" & Format(Second(Time), "00")
    NomDest = ChDir & "\" & "Annuaire " & MaDate & " " & stHeureExport & ".xls"
     
        Windows("Nouveau Feuille de calcul Microsoft Excel.xls").Activate
        Sheets("Annuaire").Select
        Cells.Select
        Selection.Copy
        Sheets("---- ACCES AU PROGRAMME ----").Select
        Workbooks.Add
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
        ActiveWorkbook.SaveAs ChDir & NomDest
        ActiveWindow.Close
     
        MsgBox "le fichier a été enregistré sous le nom : " & vbCrLf & NomDest
    End Sub

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    re bonjour L'Albatros, fring et au forum

    Même erreur ! Essai avecau lieu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Ne fonctionne pas non plus

    Stephanie

  10. #10
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Combien avez-vous de classeurs Excel, et quels sont les noms de leurs onglets respectifs ?

    Parce que de mon côté, ça fonctionne...

  11. #11
    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, juste une remarque : évite d'utiliser des noms de variables qui sont des mots réservés du langage, ici par exemple ChDir

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    re bonjour L'Albatros, kiki29

    Je prend note kiki29

    J'ai refais le test sur un autre fichier mais cette fois il bloque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ActiveWorkbook.SaveAs ChDir & NomDest
    Message erreur '1004':
    Fichier inaccessible
    C'est normal le fichier n'existe pas !

    Autre essai
    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
    Sub Macro2()
    Dim MaDate As Date
    Dim CheminDir As String
    Dim stHeureExport As String
    Dim NomDest As String
     
    MaDate = Format(Date, "DD-MM-YYYY")
    CheminDir = "D:\Essai\"
    stHeureExport = "_" & Format(Hour(Time), "00") & "" & Format(Minute(Time), "00") & "" & Format(Second(Time), "00")
    NomDest = "Annuaire " & MaDate & " " & stHeureExport & ".xls"
     
        Windows("ClasseurTest.xls").Activate
        Sheets("Annuaire").Select
        Cells.Select
        Selection.Copy
        Sheets("---- ACCES AU PROGRAMME ----").Select
        Workbooks.Add
        Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
        ActiveWorkbook.SaveAs CheminDir & NomDest
        ActiveWindow.Close
     
        MsgBox "le fichier a été enregistré sous le nom : " & vbCrLf & NomDest
    Merci

    Stephanie

  13. #13
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    kiki29 a raison, commence par remplacer tous les "ChDir" par "Chemin", puis vérifie que le chemin que tu indiques "D:\Gestion\Sauvegarde\2012" soit le bon

    J'oubliais: merci aussi de me donner la structure de tes fichiers (up)
    Nom des classeurs + noms des onglets respectifs

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    re

    sur le test que je viens d'effectuer,

    Non du fichier : ClasseurTest.xls
    Onglets : feuil1 ("---- ACCES AU PROGRAMME ----"), feuil2 (Annuaire) et feuil3 (Feuil3)

    merci

    Stephanie

  15. #15
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Ok, j'ai une vague intuition du problème, pourriez-vous svp me passer votre code en l'état ?

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    re L'Albatros,

    Je vous joint le fichier, c'est plus simple pour comprendre

    Merci

    Stephanie
    Fichiers attachés Fichiers attachés

  17. #17
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Voilà, j'ai refait tout le code:

    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
    Sub SauvCli()
    '----------------------------------------------------Enregistre une copie sans les macros
     Dim NomSource$, CheminDest$, NomDest$
     Dim VBC As Object
     
     MaDate = Format(Now, "DD-MM-YY h-mm-ss")
     NomSource = "ClasseurTest.xls"
     CheminDest = "D:\Essai\"
     NomDest = "Annuaire du " & MaDate & ".xls"
     
    '-----------------------------------------Copie des informations
    Windows("ClasseurTest.xls").Activate
    Sheets("Annuaire").Select
    Cells.Select
    Selection.Copy
    '-----------------------------------------Emplacement du collage
    Sheets("---- ACCES AU PROGRAMME ----").Select
    Range("A1").Select
    Selection.PasteSpecial
     
    '-----------------------------------------Enregistrement
     Workbooks(NomSource).SaveAs CheminDest & NomDest
     
     With ActiveWorkbook.VBProject
     
      For Each VBC In .VBComponents
       If VBC.Type = 100 Then
        With VBC.CodeModule
         .DeleteLines 1, .CountOfLines
         .CodePane.Window.Close
        End With
       Else: .VBComponents.Remove VBC
       End If
      Next VBC
     End With
     
     ActiveWorkbook.Save
     ActiveWorkbook.Close SaveChanges:=True
     Application.Quit
     SendKeys "%O"
     
     End Sub
    Avant de le lancer, allez dans le menu Outils/Références et cochez la case "Microsoft Office X.X Object Library"

    Chez moi ça marche parfaitement.
    Si c'est le cas pour vous aussi, merci de:
    • me le dire
    • voter mes post en cliquant sur les pouces vert en bas de chaque post de cette discussion
    • cliquer sur "Résolu"

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    re bonjour L'Albatros, kiki29 et au forum

    Merci L'Albatros de vous decarcassé pour moi

    Je viens de faire l'essai tout en verifiant que la case "Microsoft Office 12.0 Object Library"

    Dès que je clique sur le bouton "Sauvegarde"
    -déroulement des etape normal jusqu'à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     With ActiveWorkbook.VBProject
    encadre jaune
    - le fichier principal s'est fermé
    - le fichier destination est ouvert avec la copie de l'annuaire dans onglets Annuaire et ---- ACCES AU PROGRAMME ----
    - la macro est présente en VBA

    Du coup, il enregistre le document source complet alors que je souhaite uniquement avoir un onglet "Annuaire" dans document destination

    Etrange tout ça !

    Stephanie

  19. #19
    Membre actif Avatar de L'Albatros
    Homme Profil pro
    Chercheur en économie - statistique
    Inscrit en
    Avril 2012
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chercheur en économie - statistique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2012
    Messages : 150
    Points : 239
    Points
    239
    Par défaut
    Ok on verra pour le détail des copie/colle après.

    Dans outils/References, cochez "Microsoft Forms X.X Object Library"

    Relancez pour voir

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 241
    Points : 62
    Points
    62
    Par défaut
    re

    j'ai dans les références "Microsoft Forms 2.0 Object Library" de coché aussi

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Adapter mon code déplacement d'une feuille vers nouveau classeur en valeur
    Par capi81 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 06/10/2014, 12h52
  2. [XL-2007] Excel plante avec macro sauvegarde feuille et enregistrement
    Par maxval18 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/10/2012, 11h36
  3. enregistrement et création de nouveau classeur avec edition de feuille
    Par nicdodo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/03/2012, 03h21
  4. [XL-2003] Copier des onglets vers nouveau classeur avec Variable
    Par xbb12 dans le forum Excel
    Réponses: 2
    Dernier message: 24/03/2010, 16h26
  5. copie d'1 feuille d'1 classeur vers nouveau classeur excel 2003
    Par samson_02 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/02/2009, 16h14

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