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
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n = .Sheets(1).Name: Application.DisplayAlerts = False: .Sheets(1).Delete: .Sheets(2).Name = n
    Si des formules pointent vers sheets(1), je te souhaite bon courage pour la suite... Ce n'est pas une solution générique, fiable et professionnelle. Et ce n'est pas toi que je mets en cause, c'est juste la solution que je critique.
    "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...
    ---------------

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Vba ne fait pas les chose à l'envers ! Ne dit on pas que la nature a horreurs du vide!

    Quand un électron s'en va un autre prend sa place!

    Telle est la raison de commencer par la fin pour notre ca si on veut parcourir tous les éléments!
    Si je supprime la ligne 1 la ligne 2 prend sa place; après si je supprime la ligne 2 je supprime la ligne qui avant avait la position 3!

  3. #3
    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
    Je rappelle juste que la première obligation d'un développement, c'est qu'il fasse ce qu'on lui demande. Après, si on veut, on optimise. Passer des heures à optimiser un truc qui prendra une seconde plutôt que deux minutes, c'est rentable sur le (très) long terme.

    Je rappelle le calcul: si on réalise l'opération une fois chaque semaine, une heure de programmation pour gagner deux minutes sera rentable en trente semaines... Avant cela, ça coûtera des sous... j'ai mis des années à le comprendre, et durant ce temps, j'ai développé gratis...
    "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...
    ---------------

  4. #4
    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
    Je partage l'avis de Pierre Fauconnier, ma fille est ravie d'avoir ce petit outil qui lui permet de préparer son document en 2 minutes alors qu'il lui fallait un temps fou avec word...
    En passant, pour un néophyte comme moi je trouve paradoxal d'avoir à utiliser Excel pour préparer un document à imprimer, mais bon, première surprise...

    Concernant ma question de départ, le temps d'exécution de la macro (7 mn, c'était un peu long quand même), puis-je suggérer une réflexion...

    Tout d'abord vos discussions entre experts est certes surement passionnante, mais reconnaissez qu'elles sont loin de la compétence du commun des mortels.

    Seconde surprise, je découvre que Monsieur l'ordinateur et son langage VBA commence par la fin du document à cause de sa logique personnelle et fait cela surement quelques centaines de fois pour supprimer les lignes qui ont juste un "X" dans une colonne, d'où 2 mn, un temps qui me conviens mais surement très long vu la puissance de ces machines... Entourés d'autant d'informatique dans notre vie quotidienne, je commence à comprendre pourquoi tout va à l'envers dans notre monde (mais cela n'engage que moi)...

    Ne peut-on pas demander à VBA, hyperpuissant et sophistiqué, de travailler "normalement" en commençant parle début du document et faire les suppressions "normalement" en une seule fois.
    Par exemple dans la macro trouver une solution pour supprimer la ligne TANT QUE le "X" est présent dans la colonne et ne faire +1 sur i que lorsqu'il n'y a pas de "X" même s'il faut tout ré-écrire ???

    voilà ma petite macro

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

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Ta réflexion est incomplète.
    Si, avec ce code, tu commences par le début, tu te feras inévitablement des croche-pieds avec la numérotation des lignes !
    Imagine que tu supprimes la ligne 2 -->> la 3ème deviendra ipso-facto la 2ème et ta boucle perdra donc son efficacité.
    On ne peut faire cela qu'à la condition :
    - de créer une plage (par Application.Union) de toutes les lignes à supprimer
    - de supprimer d'un seul coup, in fine, les rangs entiers de cette plage. Mais ce serait alors un code totalement distinct.

  6. #6
    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 unparia Voir le message
    ...
    On ne peut faire cela qu'à la condition :
    - de créer une plage (par Application.Union) de toutes les lignes à supprimer
    - de supprimer d'un seul coup, in fine, les rangs entiers de cette plage. Mais ce serait alors un code totalement distinct.

    Ce qui lui a ete donn2 dans un exemple de code au post #38 en se passant de boucle. Il lui suffit de mettre la bonne valeur de colonne à la ligne n°2 de ce code.

    Maintenant s'il veut vraiment pour une raison obscure, savoir comment faire une boucle de suppression de lignes dans le sens qu'il veut avec for, il doit juste s'armer en conséquence avec une variable compteur qui s'incrémente dans la condition à l'intérieur de la boucle For i (IF condition -> supprimer ligne c - ELSE c +1). Ce qui n'a pas d'intérêt si la boucle For vise juste à supprimer des lignes, autrement pour passer outre les limitations de For se tourner vers Do ... Loop [ Until | Wend | <,>,<=,>= ]

  7. #7
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,

    Comme on ne pourras pas changer la logique de VBA sur Excel, dans ce cas là autant changer la méthode de suppression de ligne, ce que je proposais en vba et expliquais aussi par Marc puis moi à faire manuellement prenant moins de 2 minutes

    PS : mettre le code entre balise avec la touche # pour la lisibilité de celui-ci - cf lien dans ma signature
    Dans le code donner en lien peu de chose à changer (Bien sur pour comprendre le code, utiliser le pas à pas avec la fenêtre des variables locales pour voir à quoi correspond les variables et l'aide VBA))

    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
    Sub Demo()
    Dim DL As Long, Col As Integer, V
        DL = Cells(Rows.Count, 1).End(xlUp).Row 'Dernière ligne remplie
        Col = Cells(1).CurrentRegion.Columns.Count + 1 ' Numéro de la colonne après la dernière colonne utilisé
       Application.ScreenUpdating = False
        With Range(Cells(1, Col), Cells(DL, Col))
            .FormulaLocal = "=SI($A1 = ""X"";1;0)" 'on applique la formule sur la colonne supplémentaire
            .Value = .Value
        End With
        With Cells(1).CurrentRegion
            .Sort Columns(Col), xlAscending, Header:=xlNo 'on trie dans l'ordre croissant les données via la colonne supplémentaire ou l'on a mis la formule
            V = Application.Match(1, .Columns(Col), 0) 'on repère ou se trouve le 1er "1" dans la colonne supp
            If Not IsError(V) Then
                Rows(V & ":" & .Rows.Count).EntireRow.Clear 'on efface l'ensemble des lignes dont la valeur est 1 dans la colonne supp. précédemment triée
            End If
            .Columns(Col).Clear 'on efface la colonne supplémentaire
        End With
        Application.ScreenUpdating = True
       ' PS : et tout cela peut se faire manuellement comme expliqué dans les posts ci-dessus
    End Sub
    Edit : Corr. d'orthographe
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

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