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 Macro VBA [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
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 33
    Par défaut Optimisation Macro VBA
    Bonjour,

    Je viens vers vous pour m'apprendre à optimiser mon code VBA, voici ci-dessous le code:

    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 Extraction()
        Range("B:B").Select 'Sélection de la colonne B
        Selection.Insert Shift:=xlToRight 'Créer la colonne envoie tout ce qu'il contient vers la droite
        ActiveCell.FormulaR1C1 = "Désignation" 'Nomme la colonne "Désignation"
     
        Dim compt As Integer
     
        For compt = 2 To 10000
            Range("J" & compt).Select
            If Range("J" & compt) = "***" Or Range("J" & compt) = "3000" Or Range("J" & compt) = "3001" Or Range("J" & compt) = "3005" Or Range("J" & compt) = "3006" Or Range("J" & compt) = "3050" Or Range("J" & compt) = "7900" Or Range("J" & compt) = "7910" Or Range("J" & compt) = "7920" Then
     
                'MsgBox ("Ok")
     
            Else
                Selection.EntireRow.Delete
                compt = compt - 1
                If Range("A" & compt) = "" Then
                    Exit For
                End If
            End If
        Next compt
     
     
    End Sub
    Lorsque j'exécute la macro, elle prend un temps considérable à s'exécuter alors que mon document devrait contenir (chaque jour) environ 1000 lignes à la fin des suppressions...
    Cependant, il mouline et mouline et encore et toujours .. Alors qu'a partir du moment ou la colonne A et la ligne soit vide, nous sortons de la boucle FOR. Or ici, c'est bien plus long.
    Avez vous une solution pour optimiser mon code (et ainsi pour qu'il soit traiter plus rapidement) et aussi une solution pour ma boucle défectueuse.

    Merci, Bonne journée

    Aurélien

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu enlevais les méthodes Select qui ne servent à rien en VBA et qui ne font que ralentir l'exécution du programme, tu pourras voir déjà une belle amélioration.
    A lire aussi Excel VBA – Supprimer des lignes suivant critères avec la méthode AdvancedFilter
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Homme Profil pro
    Clinical Project Manager
    Inscrit en
    Janvier 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Clinical Project Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 16
    Par défaut
    Tout à fait d'accord avec Philippe.
    Les Select ralentissent l'éxécution.
    Essaies de remplacer tes lignes 8 à 21 par quelque chose comme :

    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
    For compt = 2 To 10000
     
     
        Select Case ActiveCell.Offset(compt, 0).Value
     
            Case "***", "3000", "3001", "3006" '....toutes tes valeurs
            'this is ok
     
            Case ""
            Exit For
     
            Case Else
     
            ActiveCell.Offset(compt, 0).EntireRow.Delete
            compt = compt - 1
     
     
        End Select
     
    Next compt
     
    End Sub
    C'est une solution, il y en a d'autres...

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2015
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 33
    Par défaut
    Bonjour,

    En effet, je n'avais pas mis les commentaires pour le "Range("J" & compt).Select", je l'utilisais juste pour me repérer.

    Merci pour le Tuto Philippe, je vais regarder ça de plus près.

    FRGOL, les "case" fonctionnent en VBA ? (C'est pas du Bash ou un truc du genre ? ?)

    Merci

    Aurélien

  5. #5
    Membre averti
    Homme Profil pro
    Clinical Project Manager
    Inscrit en
    Janvier 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Clinical Project Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2016
    Messages : 16
    Par défaut
    Bonjour Baraas,
    Les Select Case fonctionnent trés bien en VBA Excel est sont souvent très utiles pour remplacer des "If ... Then" répétitifs.

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Comme l'a déjà confirmé FRGOL, la structure décisionnelle Select Case fait partie du langage basic depuis de nombreuses années et si ma mémoire est bonne depuis le langage Quickbasic de MicroSoft mais existait déjà dans les compilateurs qui l'ont précédés;
    Je te conseille la lecture du tutoriel d'Olivier Lebeau Initiation au VBA Office
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. [XL-2003] Macro VBA très lente, comment l'optimiser
    Par nuphius dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/06/2015, 21h45
  2. [XL-2010] [VBA Userform] optimisation macro copie lignes sous critères
    Par Kannam dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/02/2015, 13h59
  3. [XL-2003] optimisation de macro vba
    Par Lulux57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/01/2013, 08h30
  4. [XL-2003] Optimiser une macro VBA
    Par momo93240 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/07/2011, 16h46
  5. {VBA Excel} Optimiser macro si possible
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/06/2007, 16h06

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