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 :

plantage : ouvrir tous les fichiers copier colonne coller et sauvegarder dans fichier synthèse [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 10
    Points
    10
    Par défaut plantage : ouvrir tous les fichiers copier colonne coller et sauvegarder dans fichier synthèse
    Bonjour à tous,

    J'étais assez fière de mon petit programme qui ouvre tous les fichiers (données de spectroscopie) d'un dossier et récupère la colonne 2 pour la coller dans un fichier de synthèse mais je viens de voir que lorsqu'il y a trop de fichiers à ouvrir le programme plante lors de l’exécution. Je suppose que j'utilise trop la mémoire mais je ne sais pas comment faire. Quelqu'un pourrait améliorer le code? pour info j'ai environ 500 fichiers à ouvrir


    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
    Sub ouvrirfichiers()
     
        Dim Fichier As String
        Dim Chemin As String
        Dim Wb As Workbook
        Dim NB_SPECTRES As Integer
     
        Chemin = "C:\test\"
     
        Fichier = Dir(Chemin & "*.*")
     
        Do While Fichier <> ""
        Set Wb = Workbooks.Open(Chemin & Fichier)
     
     
        NB_SPECTRES = NB_SPECTRES + 1
     
        Columns("B:B").Select
        Selection.Copy
     
     
        Windows("programme_FTIR.xlsm").Activate
        Columns(NB_SPECTRES).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
     
        Wb.Close True
     
        Set Wb = Nothing
     
        Fichier = Dir
     
        Cells(1, NB_SPECTRES) = Fichier
     
        Loop
     
        ActiveWorkbook.Save
     
        End Sub

  2. #2
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    J'ai réussi, j'ai mis wb.close False et j'ai créé une autre variable nom_de_colonne au lieu de Fichier pour à la fin du programme

  3. #3
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    et en optimisant ainsi ?

    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
    Sub ouvrirfichiers()
    Dim Feuille_Destination As Worksheet
    Dim NB_SPECTRES As Integer
    Dim Fichier As String
    Const Chemin As String = "C:\test\"
     
    Set Feuille_Destination = Workbooks("programme_FTIR.xlsm").ActiveSheet
    Fichier = Dir(Chemin & "*.*")
     
    Application.ScreenUpdating = False
        Do While Fichier <> ""
            With Workbooks.Open(Chemin & Fichier)
                NB_SPECTRES = NB_SPECTRES + 1
                Feuille_Destination.Columns(NB_SPECTRES).Value = .ActiveSheet.Columns(2).Value
                .Close False
            End With
     
            Fichier = Dir
            Feuille_Destination.Cells(1, NB_SPECTRES).Value = Fichier
        Loop
    Application.ScreenUpdating = True
     
    Feuille_Destination.Parent.Save
    End Sub
    j'ai simplifié les variables, on n'utilise plus le copier-coller, le rafraichissement d'écran est arrêté, et on n'enregistre plus les fichiers sources en les fermant (ça ne sert à rien puisqu'ils ne sont pas modifiés)

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2011
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Merci Joe pour les améliorations c'est plus clair et c'est stable.

    J'ai encore eu un plantage après mes modifications mais avec tes corrections ça marche bien.

    Par contre étonnamment c'est plus lent (même si le temps n'est pas un problème, cela à pris environ 5 minutes pour 450 fichiers)

  5. #5
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Oui c'est assez surprenant que ça soit plus long, dans la mesure où il n'y a plus de Select, Copy et Paste


    après, 5 minutes pour les 450 fichiers qui sont ouverts puis fermés, ça reste honorable ... 0.7 secondes par fichier

    peut être qu'en travaillant sur les classeurs fermés ça irait encore plus vite ? Mais pas sûr, puisque 450 connexions ADO à effectuer quand même
    http://silkyroad.developpez.com/VBA/ClasseursFermes/

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

Discussions similaires

  1. [WD-2003] Ouvrir tous les fichiers word d'un dossier et les enregistrer sous .html
    Par pierre008 dans le forum VBA Word
    Réponses: 3
    Dernier message: 22/06/2010, 11h02
  2. Réponses: 5
    Dernier message: 12/03/2009, 14h52
  3. Ouvrir tous les fichiers d'un dossier sauf celui de ma macro?
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/07/2008, 11h58
  4. Réponses: 2
    Dernier message: 16/06/2008, 14h08
  5. Ouvrir tous les xls-fichiers d'un dossier
    Par A@Lah dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/10/2007, 16h12

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