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 de macro possible ? [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Par défaut Optimisation de macro possible ?
    Hello world !

    J'ai récemment demandé de l'aide sur ce forum, concernant une macro afin d'effacer des lignes en fonction d'un contenu et d'un éventuel autre paramêtre.

    Aujourd'hui, je reviens vers vous, non pas parce que j'ai encore un problème avec ça, mais simplement dans un soucis d'optimisation.

    La macro fonctionne parfaitement, mais elle est looooooooooongue, ayant un gros fichier à traiter.
    Je souhaiterais savoir s'il existe une autre écriture de code / fonction / n'importe qui permettrait d'accélerer la procédure.

    Voici le morceau de code de la macro qui est très lent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim i0 As Long
     
    For i0 = Range("V" & Rows.Count).End(xlUp).Row To 1 Step -1
        If InStr(Range("V" & i0).Value, "AAA") > 0 Then Rows(i0).Delete
        If InStr(Range("V" & i0).Value, "BBB") > 0 Then Rows(i0).Delete
        If InStr(Range("V" & i0).Value, "CCC") > 0 Then Rows(i0).Delete
        If InStr(Range("V" & i0).Value, "DDD") > 0 And InStr(Range("T" & i0).Value, "") = 0 Then Rows(i0).Delete
        If InStr(Range("V" & i0).Value, "EEE") > 0 And InStr(Range("T" & i0).Value, "") = 0 Then Rows(i0).Delete
        If InStr(Range("V" & i0).Value, "") = 0 And InStr(Range("T" & i0).Value, "") > 0 Then Rows(i0).Delete
    Next i0
    Vous auriez une idée sur la marche à suivre ?
    je vous remercie par avance !

    Cordialement,
    Anto

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Peut être comme cela, mais pas sur que ça accélère le traitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim i0 As Long
     
    For i0 = Range("V" & Rows.Count).End(xlUp).Row To 1 Step -1
     
        If InStr(Range("V" & i0).Value, "AAA") > 0 Or InStr(Range("V" & i0).Value, "BBB") > 0 Or InStr(Range("V" & i0).Value, "CCC") > 0 Then Rows(i0).Delete
        If (InStr(Range("V" & i0).Value, "DDD") > 0 Or InStr(Range("V" & i0).Value, "EEE")) And InStr(Range("T" & i0).Value, "") = 0 Then Rows(i0).Delete
        If InStr(Range("V" & i0).Value, "") = 0 And InStr(Range("T" & i0).Value, "") > 0 Then Rows(i0).Delete
     
    Next i0
    Par contre, je trouve la lecture du code moins facile

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Par défaut
    Je ne l'ai pas testé mais tu devrais te baser sur quelque chose comme ça. L'opération serait beaucoup plus rapide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .Cells(1, 1).AutoFilter Field:=MaColonne, Criteria1:=MonCritere
    Set rng = .Cells(1, 1).CurrentRegion
    rng.Offset(1, 0).Resize(rng.Rows.Count - 1, rng.Columns.Count).EntireRow.Delete

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut HEU....
    bONJOUR A TOUS


    peut etre comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub TRUCMACHIN()
     
    For Each C In Range("V1:V" & Range("V" & Rows.Count).End(xlUp).Row).Cells
     On Error Resume Next
     If C.Text Like "AAA" Or C.Text Like "BBB" Or C.Text Like "CCC" Or C.Text Like "DDD" Then C.EntireRow.Delete
    If C.Text Like "EEE" And Range("t" & C.Row).Text Like "EEE" Then C.EntireRow.Delete
    If (C.Text Like "" And Range("t" & C.Row).Text Like "") Then C.EntireRow.Delete
    On Error GoTo 0
    Next
     
    End Sub
    PS:
    je ne vois pas tres bien l'utilité d'utiliser "instr" pour chercher rien du tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InStr(Range("T" & i0).Value, "") = 0
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Par défaut
    Oh, très bien ! Merci de me proposer vos idées, je m'en vais aller tester ça et je vous tiens au courant

    ------ UPDATE -----

    Hop, suite à vos messages j'ai fait plusieurs essais, visiblement ça n'améliore pas la rapidité signicativement. Pour l'idée des filtres, il y à une piste à suivre qui semble effectivement efficace, mais je pense être limité par certains paramêtres. Je vais laisser ça de coté pour l'instant, étant juste un point d'opti... j'y reviendrais à la fin du projet, merci de vos idées en tous cas je vous tiens au courant

    A plus tard !

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

Discussions similaires

  1. [XL-2007] Est-ce possible d'optimiser ses macros.
    Par Biker_45 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/08/2012, 14h44
  2. [XL-2003] Optimisation de macro travaillant sur d'autres classeurs
    Par diude54 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 06/09/2009, 09h35
  3. [XL-2003] Optimiser une macro de mise en forme d'un Tableau
    Par mouncefdi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/04/2009, 12h19
  4. Optimiser une macro
    Par PiliSql dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/05/2008, 20h18
  5. [Optimisation]Est-ce possible ?
    Par progfou dans le forum C++
    Réponses: 29
    Dernier message: 15/03/2007, 01h15

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