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 :

Laisser le classeur principal ouvert après sauvegarde de chaque feuille dans un CSV


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant
    Inscrit en
    Février 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 46
    Points : 67
    Points
    67
    Par défaut Laisser le classeur principal ouvert après sauvegarde de chaque feuille dans un CSV
    Salut à tous,

    J'ai fait un macro qui me permet de récupérer des données de différents fichiers sources Excel. Cette macro copie certaines données dans un classeur Excel "fichier_extract.xslm".

    La macro crée une feuille par catégorie de données dans ce même classeur puis je sauvegarde chaque feuille dans un CSV.
    Jusque là tout va bien !

    Un petit aperçu du code source

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub Principale
     
      Ouvrir_fichiers_sources
      Recup_data
      Fermer_fichiers_sources
     
    End Sub
    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
     
    Sub Recup_data
     
        Recup_data_cat1
        Recup_data_cat2
        Recup_data_cat3
     
        Windows("fichier_extract.xslm").Activate
        ActiveWorkbook.Worksheets(1).Select
        ActiveWorkbook.Sheets(1).Activate
     
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:="fichier_extract.xslm"
        Application.DisplayAlerts = True
     
        SaveAsCSV("cat1")
        SaveAsCSV("cat2")
        SaveAsCSV("cat3")
     
    End Sub
    Quand tout cela est fait plus aucun fichier n'est ouvert, je me retrouve avec une fenêtre MS Excel ouverte sans classeur.

    Comment faire pour que le classeur "fichier_extract.xslm" reste ouvert à la fin de la "Sub Principale" ? Serai-je obligé de faire un Workbooks.Open Filename:="fichier_extract.xslm"

    Merci d'avance pour vos réponses.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Voici la réponse que m'avait apporté Theze sur une question similaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application.Quit 'Ceci ferme Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ActiveWorkBook.Close 'Ici, seulement le fichier actif
    Regarde dans tes codes si tu as quelque chose qui ressemble à ça.

    Cordialement
    René

  3. #3
    Membre du Club
    Homme Profil pro
    Consultant
    Inscrit en
    Février 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 46
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Merci NEC14 d'essayer de répondre.

    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fermer_fichiers_sources
    , il y a effectivement ActiveWorkBook.Close mais avant chaque appel je met un Windows("fichier_source1").activate.

    Il n'y a jamais dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Windows("fichier_extract.xslm").Activate ' fichier_extract.xslm étant le fichier devant rester ouvert tout au long de la procédure... si c'est possible !
    ActiveWorkBook.Close
    Une remarque supplémentaire :
    Lorsque tu ouvres un classeur Excel (ex : 'principal.xslx') avec plusieurs feuilles (ex : [feuille1, feuille2, feuille3]) et que tu enregistres une de ces feuilles en .CSV (ex : feuille2.csv) alors le classeur ne porte plus son nom original mais le nom du fichier CSV.
    Je pense que c'est ce qui explique qu'à la fin de ma procédure "Sub Principale", mon classeur "fichier_extract.xslm" ne soit plus ouvert.

    Je serai donc obligé de refaire un open sur ce fichier ? Si vous avez une solution qui permet d'éviter cela, ce serait idéal.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    Voilà comment j'ai procédé :

    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
     
     
    Private Sub CmbSauv_Click()
    Dim Fich As String
    Dim c As Range
    Dim Fichier
    Application.ScreenUpdating = False
    With ThisWorkbook.Worksheets("BC1") 'copie la feuille BC1
        .Visible = True 'La feuille BC1 est visible
     
        'la feuille devient fichier et est enregistrée sur le K:\
        Fich = "K:\BONS 2013\BC" & " " & .Cells(17, 4).Value & " " & .Cells(15, 14).Value
        Fichier = Application.GetSaveAsFilename(Fich, "Excel Files (*.xls), *.xls")
        If Fichier <> False Then
            Dim Wbk As Workbook
                Set Wbk = Workbooks.Add(1)
                Wbk.Sheets(1).name = "BC1"
                With ThisWorkbook.Sheets("BC1")
                .Cells.Copy
                Wbk.Sheets(1).[A1].PasteSpecial xlPasteAll
                End With
            With ActiveWorkbook
                .SaveAs Fichier             'Pour Excel 2003 et moins
                .Close
            End With
            For Each c In .Range("B25,G6,H14,N11,N15,N19,B24,A28:A55,N24,I28:K55")
                c.MergeArea.ClearContents
            Next c
            .Visible = False
        End If
    End With
    Windows("Saisie_engagements.xls").Activate
            Sheets("Accueil").Activate
     
    End Sub

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

Discussions similaires

  1. [Lazarus] Laisser l'interface ouverte après l'exécution
    Par toni77 dans le forum Lazarus
    Réponses: 1
    Dernier message: 11/09/2010, 21h03
  2. Réponses: 1
    Dernier message: 20/11/2006, 14h04
  3. Accents mal encodes apres sauvegarde sous forme de fichier
    Par KillMePlease dans le forum Langage
    Réponses: 5
    Dernier message: 03/11/2006, 15h01
  4. Garder un menu ouvert apres réactualisation de la page
    Par krolineeee dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/06/2006, 14h24
  5. Laisser le port série ouvert ?
    Par BECHE dans le forum Windows
    Réponses: 4
    Dernier message: 09/11/2005, 09h38

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