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 :

Vitesse d'execution : quelle méthode choisir?


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Vitesse d'execution : quelle méthode choisir?
    Bonjour,

    Je me suis inscrit pour poser une question un peu technique :
    J'ai à parcourir plusieurs feuilles d'un classeur et sur chaque feuille rechercher et remplacer une chaîne de caractère (en l'occurence toutes les occurences d'un chemin d'acces).
    J'ai à peu près 20 feuilles d'une centaine de lignes chacune et l'opération totale prend plusieurs minutes! C'est bien trop pour mes spécifications.

    Actuellement, j'ai une boucle qui modifie ligne par ligne la cellule contenant la formule grâce à la fonction Replace.
    J'aimerais savoir si sélectionner toutes mes cellules dans un Range (toujours par une boucle, vu que le nombre de lignes à modifier n'est pas constant...trop facile sinon) permettrait un gain de temps à l'execution.

    NB : il me semble également que l'attribut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    n'ait aucun effet .
    Je l'ai utilisé très souvent par le passé, et c'est toujours un gros point fort dans l'optimisation du temps d'execution... Savez vous ce qui pourrait annuler son effet sans que je le sache?

  2. #2
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour Haoru45 le forum l'ideal serait de voir ta macro pour pouvoir l' optimiser!!

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A1:E" & Range("A65536").End(xlUp).Row).Replace What:="A", Replacement:="B", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
    C'est comme ça que tu fais un Replace sur un Range. Et oublie ta boucle, c'est ce qui te fait perdre du temps à force d'aller de ligne en ligne. Comme ça, cela suffit, c'est dynamique. Toutes les valeurs dans la Range A1 à Ex où x est la dernière ligne non vide de la colonne A seront prises en compte. Trop facile as-tu dit ? Sûrement, mais ça existe et ça marche

    Tu auras alors effectivement un GROS gain de temps : à vue de nez, tu vas passer de 5 minutes à 10 secondes

    Sinon,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    se place au tout début de ton code et tu dois mettre un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    à la toute fin. Si ça ne marche pas comme ça, c'est que tu en as d'autres perdus au sein de ton code. Bref, vérifie bien que t'en aies un à False au début et un à True à la fin.

    Allez, bonne chance et à plus tard !

    EDIT : tu devras quand même garder une boucle pour passer tes différentes feuilles en revue !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 274
    Points : 357
    Points
    357
    Par défaut
    Bonjour,

    La fonction Replace est bien la meilleure...

    Cependant, en plus du ScreenDating, je supprimerai également le calcul...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual
    End With
     
    'ton code
     
    With Application
        .ScreenUpdating = True
        .Calculation = xlCalculationAutomatic
    End With
    Comme tu modifies le chemin d'accès, Excel recalcule la nouvelle valeur à chaque modification...

    Un Seul calcul en fin de code serait suffisant....

    Bonne journée

  5. #5
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re , bonjour DeaD78 mapeh le forum on ausssi rajoute DisplayAlerts
    peut faire gagne un peu de temps

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub essai()
      With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
    .DisplayAlerts = False
    'ton code
    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
    .DisplayAlerts = True
     End With
     End Sub
    par contre boucle obligatoire sur feuilles
    sur chaque feuille on peu optimiser le code en passant par un (tablo) beaucoup plus rapide
    exemple replace virgule par point a adapter

    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
    Sub test10()
    Dim X As Variant, r As Long, c As Long
    With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
    .Calculation = xlCalculationManual
    X = Range("a1:f" & Range("a65536").End(xlUp).Row).Value
     For r = 1 To UBound(X, 1)
     For c = 1 To UBound(X, 2)
    If IsNumeric(X(r, c)) And X(r, c) <> "" Then
    X(r, c) = Replace(X(r, c), ",", ".")
     End If: Next c: Next r
     Range("a1:f" & Range("a65536").End(xlUp).Row).Value = X
    .ScreenUpdating = True
    .DisplayAlerts = True
    .Calculation = xlCalculationAutomatic
    End With
    End Sub

Discussions similaires

  1. Quelle méthode choisir ?
    Par ExoplanèteS2M dans le forum Méthodes Agiles
    Réponses: 1
    Dernier message: 05/03/2014, 11h06
  2. Réponses: 7
    Dernier message: 11/01/2011, 19h53
  3. [Architecture] Quelle méthode choisir?
    Par aneugnot dans le forum Général Java
    Réponses: 2
    Dernier message: 15/05/2007, 17h56
  4. Quelle méthode choisir ? MySql, CSV,PHP
    Par redvivi dans le forum Linux
    Réponses: 1
    Dernier message: 25/12/2006, 19h38
  5. Réponses: 4
    Dernier message: 05/06/2005, 15h05

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