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 :

Optimiser une macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut Optimiser une macro
    Bonjour,
    J'ai créé une macro qui parcourt une colonne C dans un classeur et, à condition que la valeur d'une colonne adjacente soit remplie, recopie le contenu de cette colonne C dans un autre classeur.
    Voici 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
    Sub ImportAvisIC()
     
    Set WSdest = Workbooks("11 Tableau de bord S48.xlsx").Worksheets("VENTE")
     
    Set WSdep = Workbooks("11 Tableau de bord S47.xlsm").Worksheets("VENTE")
     
    Set PlageICdep = WSdep.Range("S:S")
     
    Macolonne = PlageICdep.Column
    For Each c In PlageICdep
        Maligne = c.Row
        If WSdep.Cells(Maligne, Macolonne - 4).Value = "SL" Or WSdep.Cells(Maligne, Macolonne - 4).Value = "CP" Then
            AvisIC = c.Value
            TraitementADV = WSdep.Cells(Maligne, Macolonne + 1).Value
            WSdest.Cells(Maligne, Macolonne).Value = AvisIC
            WSdest.Cells(Maligne, Macolonne + 1).Value = TraitementADV
        End If
        If WSdep.Cells(Maligne, 1).Value = "" Then Exit For
    Next
     
     
    End Sub
    Or, cette macro est très lente et je ne comprends pas trop pourquoi parce que ça m'a pas l'air très lourd en calcul.
    J'ai fait un test qui m'a permis de voir qu'il faut à peu près une minute pour que la macro atteigne la 100ème ligne.
    Avez-vous un conseil à prodiguer pour me permettre de coder cette procédure de façon plus optimale ?

  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,
    S'il s'agit de recopier une ou plusieurs colonnes d'une liste de données suivant critères (à condition que la valeur d'une colonne adjacente soit remplie), je ne peux que te conseiller d'utiliser le filtre avancé d'excel (méthode AdvancedFilter de l'objet Range), pratiquement une ligne de code et une ou deux secondes pour l'exportation

    Pour en savoir plus sur le sujet Les filtres avancés ou élaborés dans Excel
    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 éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Ca n'a pas l'air de correspondre à mon cas.
    Ma colonne de départ comporte disons 1000 lignes, les mêmes que ma colonne destination.
    Je cherche à copier les valeurs de la colonne de départ correspondant en effet à un critère (disons que 400 lignes correspondent à ce critère réparties entre la ligne 1 et la ligne 1000, par exemple lignes 1, 3, 7, 11...). Je veux recopier ces valeurs dans la colonne destination au même endroit (ligne 1, 3, 7, 11 etc...)
    Avec ton tuto, je comprends que la recopie va aboutir à une colonne de 400 lignes uniquement (ligne 1, 2, 3, ..., 400)

Discussions similaires

  1. [XL-2003] Optimiser une macro
    Par mikadoo57 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 26/03/2013, 14h59
  2. Optimiser une macro
    Par foxrol dans le forum Macro
    Réponses: 5
    Dernier message: 01/03/2012, 17h24
  3. [XL-2003] Optimiser une macro VBA
    Par momo93240 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/07/2011, 16h46
  4. [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
  5. Optimiser une macro
    Par PiliSql dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 20/05/2008, 20h18

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