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 :

Optimisation code : vitesse de traitement


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 69
    Par défaut Optimisation code : vitesse de traitement
    Bonjour,


    J'ai un fichier avec 60 000 lignes environs.

    Je dois extraire certaines données de celui-ci, j'ai pensé à utiliser les filtres mais étant donné qu'il y a beaucoup de ligne, les filtres ne m'affichent pas toutes les données.
    Je passe donc par une macro mais qui reste relativement longue pour le traitement .

    Est-il possible d'optimiser ce code afin d'avoir une vitesse de traitement plus rapide.


    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 Nettoyage
     
    'Suppression lignes 1 à 11
     
    Rows("1:11").Delete Shift:=xlUp
     
     
     
    'suppression demandes hors curatif
     
    derniereligne = Range("A1").SpecialCells(xlCellTypeLastCell).Row
     
    For k = derniereligne To 2 Step -1
     
    typetravail = Range("O" & k).Value
     
    If typetravail <> "Curatifs" And typetravail <> "Curatif injustifié" And typetravail <> "Suivis" Then Rows(k).Delete
     
    Next k
     
     
    'Suppression demandes hors IMMO et DSCC non concernées
     
     
    For s = derniereligne To 2 Step -1
     
    DSCC = Range("E" & s).Value
    Famille = Range("A" & s).Value
     
     
    If Famille <> "IMMOBILIER" Or DSCC <> "443620-NANTES DSCC" And DSCC <> "492880-ANGERS DSCC" And DSCC <> "353630-RENNES DSCC" And DSCC <> "141220-CAEN DSCC" And DSCC <> "761530-ROUEN DSCC" And DSCC <> "562810-VANNES DSCC" And DSCC <> "372090-TOURS DSCC" And DSCC <> "451580-ORLEANS DSCC" Then Rows(s).Delete
     
    Next s
     
     
    'Suppression statut
     
    For t = derniereligne To 2 Step -1
     
    stat = Range("G" & t).Value
     
    If stat = "TERMINE" Or stat = "DEVISREFUSE" Or stat = "ANNULE" Then Rows(t).Delete
     
    Next t
     
     
    'Suppression colonnnes inutiles
     
    Range("B:D,H:I,L:M,O:O,Q:U,W:AB,AD:AD,AF:AP").Delete Shift:=xlToLeft
     
    End Sub
    Merci

  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
    Ajouter ça :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    sub ton code
    Application.ScreenUpdating = False
    'ton code
    Application.ScreenUpdating = True
    end sub

  3. #3
    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
    3 boucles de suppression alors qu'une seule suffisait.

    Je vais au magasin acheter du lait, je reviens chez moi le déposer
    Je repars acheter du beurre, je reviens chez moi le déposer
    je re repars acheter des œufs, je reviens chez moi les déposer


    Aussi, des tests longs sont moins performants que des tests en cascade en tenant bien à choisir la pertinence de celui à mettre en premier, en second....

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    et même sans boucle aucune via une simple formule de calculs dans une colonne temporaire
    puis un tri sur cette colonne puis un effacement des lignes et de cette colonne, résultat quasi instantané !

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

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

Discussions similaires

  1. Optimisation code traitement formulaire
    Par selinav dans le forum jQuery
    Réponses: 11
    Dernier message: 23/10/2012, 16h14
  2. Réponses: 8
    Dernier message: 14/09/2006, 17h43
  3. Optimisation du temps de traitement
    Par djuddju dans le forum Oracle
    Réponses: 4
    Dernier message: 20/04/2006, 22h16
  4. [Performance]Comment optimiser la vitesse ?
    Par le Daoud dans le forum Général Java
    Réponses: 13
    Dernier message: 03/06/2005, 16h47
  5. optimisation de temps de traitement xml/xslt
    Par Erwy dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/05/2004, 17h08

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