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 :

Accélérer une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Par défaut Accélérer une macro
    Bonjour,
    J'ai une feuille Excel avec plus de 700 000 lignes par 16 colonnes. Dans cette base de données, il y a beaucoup de lignes vides. Je dois donc les supprimer pour être capable de les analyser avec une autre macro par la suite. J'ai donc fait une macro pour ce faire. La voici:

    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
    Sub supprimer_ligne_VIDE()
    Dim compteur As Long    'Compteur pour changer de cellule
    Dim Nbre_ligne_supprimer_enligne As Integer     'Compte le nombre de lignes effacées d'affillées
     
    Application.ScreenUpdating = False
     
    compteur = 3
     
    Do
        'Supprime les lignes vides si la cellule est vide
        If IsEmpty(Range("B" & compteur)) Then
            Range("B" & compteur).EntireRow.Delete
            Nbre_ligne_supprimer_enligne = Nbre_ligne_supprimer_enligne + 1
            compteur = compteur - 1
     
        'S'il y a des lignes avec du "Trash" au travers, les supprime
        ElseIf Range("A" & compteur) = "Article" Then
            'Supprime la ligne
            Range("A" & compteur).EntireRow.Delete
            compteur = compteur - 1
     
        Else
     
            Nbre_ligne_supprimer_enligne = 0
     
        End If
     
     
    compteur = compteur = 1
     
    'Si le sub a supprimé plus de 10 lignes d'affilé, sort du sub, car surement rendu à la fin
    Loop Until compteur = Nbre_ligne_supprimer_enligne > 10
     
     
    Application.ScreenUpdating = True
     
    End Sub
    Cependant, cela prend plus de 30 minutes pour faire le tour de la feuille. Quelqu'un aurait un raccourcis à me proposer ?

    Il est à noter que j'ai désactiver le calcul automatique avant de lancer la macro.

    Merci!

    Hehee

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Par défaut Ou encore ...
    Ou encore, est-ce qu'il serait plus rapide et concevable que Excel teste toutes les lignes, enregistre les numéros de lignes qui sont vides, puis fait un seul .DELETE à la fin ?

    Merci,

    Hehee

  3. #3
    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
    pour la colonne "b" sur tes 3 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B1:B3").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    je te laisse faire pour la seconde partie de ta question je pense que tu n'aura pas trop de mal a le faire

    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

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Par défaut
    Je ne comprends pas ce que tu veux dire pour mes 3 lignes... j'ai 700 000 lignes. Mon compteur démarre à 3, puisque j'ai un en-tête que je ne veux pas effacer.

    Mais sinon, je vais tenter d'adapter ton code.

  5. #5
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    Hello a quoi te sers ton compteur ?
    Est ce que tu as des formules?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Par défaut
    Allo,
    Mon compteur servait à changer de ligne afin de parcourir toutes les lignes.
    Je commence à la 3e ligne, puisque j'ai des en-têtes. En dessous se trouve mes données. Cependant, il y a des lignes vides, c'est donc pourquoi j'avais utilisé un compteur pour vérifié chaque ligne. Mais étant donné le nombre de ligne que j'ai, cette solution s'avère trop longue

  7. #7
    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 re
    re
    mille excuses
    je pensait que tu t'arretais a 3 c'est le contraire tu demarre a 3 alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B3:B"& range("B" & rows.count).end(xlup).row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    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

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 39
    Par défaut
    C'est en plein ce qu'il me fallait !
    Merci!

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

Discussions similaires

  1. Comment accélérer une macro excel
    Par fredems dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/11/2014, 16h19
  2. [XL-2003] Comment accélérer l'execution d'une macro
    Par MichaSarah dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 18/01/2011, 15h34
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 03h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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