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 :

Performance macros sous excel 2016 [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut Performance macros sous excel 2016
    Bonjour,

    j'ai écrit une petite macro (ma première !) pour supprimer les lignes dans une feuille excel 2016 ayant un X en colonne AN (39)

    ma macro marche très bien mais il faut plus de 7 minutes pour qu'elle s'exécute, il y a 5000 lignes mais cela me semble très long, y-a-t-il un moyen de faire mieux ?
    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub supprlineam()
    Dim i As Integer
    For i = 5000 To 1 Step -1
    If Cells(i, 39).Value = "X" Then
    Cells(i, 39).EntireRow.Delete
    End If
    Next i
    End Sub

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Ajouter en début de macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    application.screenupdating = false
    application.calculation = xlcalculationmanual
    et en fin de macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    application.screenupdating = true
    application.calculation = xlcalculationautomatic

    Ca devrait déjà aller beaucoup plus vite, car le rafraîchissement d'écran prend du temps, et le calcul automatique aussi.
    Idéalement, il faudrait ajouter une gestion d'erreur, mais teste déjà si ta macro est plus performante ainsi.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    oui merci cela va déjà beaucoup plus vite, 2 mn au lieu de 7, c'est parfait

    ai-je mis les lignes au bon endroit ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub supprlineam()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Dim i As Integer
    For i = 5000 To 1 Step -1
    If Cells(i, 39).Value = "X" Then
    Cells(i, 39).EntireRow.Delete
    End If
    Next i
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    End Sub

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    D'habitude, on les met après les Dim... mais ça n'a guère d'importance ici.

    2 minutes, c'est encore un peu long. Si le traitement ne doit pas être effectué trop souvent (à l'appréciation de l'utilisateur), c'est ok. Si ce délai devient pénalisant, on pourrait trier sur la colonne qui contient X, repérer le premier X, les compter, et supprimer en une seule passe. Ce serait alors quasi instantané.

    NB: Merci de penser aux balises de code...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Merci, 2 mn ça peut convenir d'autant que je ne peux pas trier sur les X puisque le but est de supprimer les lignes qui ont ce X en gardant la séquence des lignes
    je vais mettre les lignes après le DIM

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en ajoutant une colonne qui numérote tes lignes, tu peux ensuite trier la colonne qui contient les "X", faire la suppression d'un seul bloc, et retrier tes lignes sur la colonne de numérotation pour retrouver l'agencement initial

  7. #7
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Oui bonne idée,
    je vais tester et prendre la meilleure solution
    je ferme la discussion comme résolue

  8. #8
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par retraite83 Voir le message
    Merci, 2 mn ça peut convenir d'autant que je ne peux pas trier sur les X puisque le but est de supprimer les lignes qui ont ce X en gardant la séquence des lignes
    je vais mettre les lignes après le DIM
    2 mn, rien que pour 5000 lignes à traiter, si le pc n'est pas en cause, la méthode l'est.

    Petite piste avec l'outil Filtre : via interface graphique, il est possible de réalise l'opération en quelques secondes. Via macro en 1 seconde ou moins.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Comme j'ai dit tout à l'heure faut voir et je rejoins NVCfrm le contexte peut exiger une autre approche!

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    sur des feuille de cette taille, j’applique un filtre actif ou élabore <>"x" vers une nouvelle feuille! ensuite je supprime la feuille et je renomme la nouvelle feuille avec l’ancien nom!

  11. #11
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Je le filtre avancé avec paramètre d'export !

  12. #12
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Merci de toutes vos remarques d'expert, mais c'est ma première macro ! un peu du chinois pour moi, déjà faire cette macro n'a pas été évident, rappelez vous la 1ere que vous avez écrite!
    Alors sans plus d'aide je vais me contenter de 2 mn
    Merci à tous quand même

  13. #13
    Invité
    Invité(e)
    Par défaut
    C'est moi mais dans une autre discutions ou en plus j'ai été tout simplement censuré j'avais prévenu!

    Non seulement mais remarque était constructive, pertinente et argumentées!

  14. #14
    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, bonjour !

    Avis non pas d'expert mais juste un retour d'expérience …
    Hier j'ai effacé mon post sur ce fil car Joe dans le post #6 avait déjà émis une idée proche.
    Mais suite aux différentes remarques, je me dois de l'appuyer !

    Au lieu d'offrir des solutions techniques à un niveau que souvent le demandeur ne pourra maintenir,
    quand le B-A-BA d'Excel dispose déjà de tout le nécessaire pour solutionner le besoin exprimé
    donc le demandeur pouvant déjà être à même de le réaliser manuellement - le cas ici - et dans un temps satisfaisant,
    je préfère cette voie de débutant au lieu d'une autre dite experte.

    En utilisant une colonne supplémentaire pour différencier les lignes à conserver de celles à supprimer
    via une simple formule de calculs (souvent niveau débutant) retournant respectivement 0 ou 1 ou bien FAUX ou VRAI,
    il suffit juste de trier la plage sur cette colonne, alors les lignes à supprimer sont regroupées en fin de tableau
    et peuvent être donc supprimées en un bloc en une seule opération et donc sans recourir à une boucle lente !

    Quand j'ai vu un stagiaire réaliser cette manipulation en moins d'une minute sur une grosse base de données
    alors que l'usine à gaz d'un pompeux personnage effectuait la même procédure via une boucle en plus de dix minutes,
    je me suis dit que la voie du stagiaire ne prendrait alors pas trente secondes par code
    et qu'à l'avenir je devrais ne pas oublier de « Penser Excel avant VBA » !

    Il y a déjà eu démonstration de cette simple voie dans des discussions de ce forum.

    Et même si une méthode avancée / experte est plus efficace,
    faut-il encore ne pas oublier la capacité du client à maintenir une telle procédure …

    Et si nous ne travaillons pas pour GDF, évitons alors les productions gazières !

    Voilà, voilà !

    ___________________________________________________________________________________________________________
    Je suis Paris, Barcelone, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    [INDENT=2][...]
    Je ne peux que plussoier...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Si ta feuille Excel ne dispose pas de formules tu peux utiliser un filtre élaboré.

    Il collera tous ce que tu veux garder dans un autre onglet. Il ne te restera qu'à remplacer l'existant par le nouveau.

    C'est quasi instantané.

  17. #17
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2017
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juillet 2017
    Messages : 1 291
    Par défaut
    Il y a beaucoup de formule dans cette feuille (mise en page pour être éditée)

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Bonjour,
    sur des feuille de cette taille, j’applique un filtre actif ou élabore <>"x" vers une nouvelle feuille! ensuite je supprime la feuille et je renomme la nouvelle feuille avec l’ancien nom!
    Je doute que ces manipulations dans Excel prennent moins de deux minutes...

    Après, on peut le faire en VBA mais honnêtement, devoir créer la plage de critères, copier les entêtes sur une autre feuille, extraire, supprimer (sans tenir compte que de façon générique, on peut avoir autre chose sur la feuille, bouton, tableau décalé par rapport à a1, ...), renommer... Ca me semble prendre la Grosse Bertha pour tuer une mouche, non?

    Si vraiment on veut aller plus vite, ma solution par tri sur les x couplée à celle de Joe pour retrouver l'ordre après suppression me semble un peu moins tordue et un peu plus accessible...

    Je rejoins assez notre ami retraité sur la sagesse de ses propos. Ca fonctionne, ca ne va pas aussi vite que ça pourrait mais c'est ok pour l'utilisateur? Nickel, il n'y a rien à changer.

    Avec un traitement qui passerait de 2 minutes à 1 seconde, et si son traitement est réalisé une fois par semaine et qu'il passe une heure à essayer de mettre en place les solutions plus rapides proposées, il ne sera gagnant que dans 30 semaines... S'il passe deux heures, il lui faudra plus d'un an pour rentabiliser son investissement... Restons pragmatiques...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  19. #19

  20. #20
    Invité
    Invité(e)
    Par défaut
    bonjour Pierre,
    faut voire!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. [XL-2016] Problème macro qui fonctionne que en pas à pas sous Excel 2016
    Par Gorzyne dans le forum Excel
    Réponses: 3
    Dernier message: 01/02/2018, 11h58
  2. [XL-2016] Macro Excel 2010 ne fonctionne plus sous Excel 2016
    Par leloup84 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 25/07/2016, 15h20
  3. [VBA-E][débutant]aide pour macro sous excel
    Par julyBL dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/06/2006, 22h42
  4. Activation des macros sous Excel
    Par Igloobel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/10/2005, 11h44
  5. macro sous excel
    Par julien13200 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2005, 15h49

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