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 :

VBA - Optimisation temps copier/coller


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Par défaut VBA - Optimisation temps copier/coller
    Bonjour à tous,

    Je poste un message car je n'ai pas trouvé de réponse qui convient à mon problème, mais j'espère que vous pourrez m'aider.
    Je dois mettre à jour un fichier excel quotidiennement, à partir d'un extract de base de données. Appelons mon extract mon "Fichier Source", et mon fichier de travail quotidien mon "Fichier Sorti". Mon fichier Sorti contient en moyenne 2000 lignes et j'importe 20 colonnes de mon Fichier Source (qui en contient plus, mais dont je n'ai pas besoin).

    Ma méthode de mise à jour est la suivante :
    - ouverture du fichier source
    - parcours de chaque colonne dans mon fichier sorti => pour chaque colonne :
    • Recherche du nom de ma colonne Fsortie dans Fsource
    • Copie des données de la colonne identifiée du Fsource (avec nombre exact de ligne)
    • Collage de ces données dans Fsortie
    • Passage à la colonne suivante


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    While fSortie.Cells(1, colSortie) <> "x"
            Set c = fSource.Range(Cells(1, 1), Cells(1, 40)).Find(fSortie.Cells(1, colSortie), , , xlWhole, , xlNext)         ' Recherche de ma colonne en cours (Fsortie) dans mon fichier source
                colSource = c.Column                                                                                             ' Récupération de la collone en question dans fichier source
            fSource.Range(Cells(1, colSource), Cells(nblineSource, colSource)).Copy                                                ' Copier/Coller des valeurs de la colonne source vers ma colonne sortie
            fSortie.Cells(2, colSortie).PasteSpecial xlPasteValues
     
            colSortie = colSortie + 1                                                                          
        Wend

    Mon soucis aujourd'hui est que ce Copier/Coller est long : près de 1mn30, pour si peu de données . . . J'ai bien l'une des colonnes qui contient beaucoup de texte (colonne de commentaire), mais à mon avis cela ne justifie pas un temps de traitement si gourmand. . .

    J'ai une fonction d'initialisation qui désactive beaucoup de fonctionnalités Excel mais cela ne suffit apparemment pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    With Application
            .Calculation = xlCalculationManual
            .ScreenUpdating = False
            .DisplayAlerts = False
            .EnableEvents = False
            .AskToUpdateLinks = False
            .DisplayPasteOptions = False
        End With
    Auriez vous une idée pour me faire gagner en temps de traitement?

    Merci beaucoup pour vos lumières ! ! !

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonsoir
    Je suis débutant en VBA et ce peux que ma réponse n'a aucun sens
    mais si tu commence par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Application.ScreenUpdating = False
    'ton code
    Application.ScreenUpdating = True
    end sub

  3. #3
    Membre régulier
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mars 2013
    Messages : 7
    Par défaut
    Merci BENNASR, mais c'est déjà en place
    (Regarde mon 2nd paragraphe de code)

    Mais ça aurait pu m'aider en effet

  4. #4
    Expert éminent 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
    Par défaut
    Quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While fSortie.Cells(1, colSortie) <> "x"
    Tu testes toutes les colonnes de la 1ère ligne, mais celles au delà de la dernière colonne remplie (16384 colonnes)

    [Edit]
    Il faudra se contenter de la zone utile

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    '......
    Application.ScreenUpdating = False
    '.....
    With fSortie
        For colSortie = 1 To .UsedRange.Columns.Count
            If .Cells(1, colSortie) <> "x" Then
                Set c = fSource.Range("A1:AN1").Find(.Cells(1, colSortie), LookAt:=xlWhole)
                If Not c Is Nothing Then .Cells(2, colSortie).Resize(nblineSource).Value = c.Resize(nblineSource).Value
            End If
        Next colSortie
    End With

Discussions similaires

  1. [VBA] Pb avec Copier/coller d'une feuille Excel
    Par sebastien_oasis dans le forum Excel
    Réponses: 3
    Dernier message: 14/12/2007, 11h08
  2. [VBA-E]Problème Copier-Coller entre 2 classeurs
    Par Corlo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/05/2007, 14h31
  3. Réponses: 1
    Dernier message: 19/12/2006, 16h12
  4. [VBA-E]échec copier-coller entre 2classeurs
    Par touche_a_tout dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 06/12/2006, 23h22
  5. VBA-E: Pb copier-coller entre Excel et .csv
    Par tiger118 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 11h08

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