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 :

Programme VBA super lent !


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut Programme VBA super lent !
    Ce programme s'execute sur une feuille excel de 1500l et 26 colonnes et supprime des caractères speciaux dans 3 colonnes et il est super lent, pc qui rame comme pas possible qd je l execute et j'en vois pas la fin

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Private Sub CommandButton1_Click()
        Dim Cell As Variant, i, j, k
        i = 1 ' SP
        j = 1 'FITCH
        k = 1 'MOODY
     
        Sheets("BBG").Select
        Do While Cells(1, i).Value <> "RTG_SP"
        i = i + 1
        Loop
        Cells(1, i).Select
        Range(Selection, Selection.End(xlDown)).Select
        For Each Cell In Selection
            Cell.Value = Replace(Cell.Value, "/*+", "")
            Cell.Value = Replace(Cell.Value, "/*-", "")
            Cell.Value = Replace(Cell.Value, "/*", "")
            Cell.Value = Replace(Cell.Value, "#N/A N.A.", "NR")
            Cell.Value = Replace(Cell.Value, "#N/A N Ap", "NR")
            Cell.Value = Replace(Cell.Value, "#N/A Sec", "NR")
            Cell.Value = Replace(Cell.Value, "e", "")
            Cell.Value = Replace(Cell.Value, "(P)", "")
            Cell.Value = Replace(Cell.Value, " ", "")
        Next Cell
     
        Do While Cells(1, j).Value <> "RTG_FITCH"
        j = j + 1
        Loop
        Cells(1, j).Select
        Range(Selection, Selection.End(xlDown)).Select
        For Each Cell In Selection
            Cell.Value = Replace(Cell.Value, "/*+", "")
            Cell.Value = Replace(Cell.Value, "/*-", "")
            Cell.Value = Replace(Cell.Value, "/*", "")
            Cell.Value = Replace(Cell.Value, "#N/A N.A.", "NR")
            Cell.Value = Replace(Cell.Value, "#N/A N Ap", "NR")
            Cell.Value = Replace(Cell.Value, "#N/A Sec", "NR")
            Cell.Value = Replace(Cell.Value, "e", "")
            Cell.Value = Replace(Cell.Value, "(P)", "")
            Cell.Value = Replace(Cell.Value, " ", "")
        Next Cell
        Do While Cells(1, k).Value <> "RTG_MOODY"
        k = k + 1
        Loop
        Cells(1, k).Select
        Range(Selection, Selection.End(xlDown)).Select
        For Each Cell In Selection
            Cell.Value = Replace(Cell.Value, "/*+", "")
            Cell.Value = Replace(Cell.Value, "/*-", "")
            Cell.Value = Replace(Cell.Value, "/*", "")
            Cell.Value = Replace(Cell.Value, "#N/A N.A.", "NR")
            Cell.Value = Replace(Cell.Value, "#N/A N Ap", "NR")
            Cell.Value = Replace(Cell.Value, "#N/A Sec", "NR")
            Cell.Value = Replace(Cell.Value, "e", "")
            Cell.Value = Replace(Cell.Value, "(P)", "")
            Cell.Value = Replace(Cell.Value, " ", "")
        Next Cell
    End Sub
    Qu est ce que je pourrais faire pour ameliorer ce code ?

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par solal57 Voir le message
    Ce programme s'execute sur une feuille excel de 1500l et 26 colonnes et supprime des caractères speciaux dans 3 colonnes et il est super lent, pc qui rame comme pas possible qd je l execute et j'en vois pas la fin
    Qu est ce que je pourrais faire pour ameliorer ce code ?
    Tu supprimes toutes tes selections,
    Ensuite en début de macro tu mets déjà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.screenUpdating = False
    et en fin de macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.screenUpdating = True
    et tu nous dis ce que ça donne
    A+

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Par défaut
    Bonjour,

    1/Essaies déjà de figer l'écran
    application.screenupdating=false
    m^me punition en fin de macro mais avec True

    2/ Evite les "select" très très lents...
    au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Cells(1, i).Select
        Range(Selection, Selection.End(xlDown)).Select
    essaies
    derlig=cells(i,1).xl(down).row
    for each cell in range(cells(1,i),cells(derling,i))
    ...

    3/ pas trop le temps de fouiner mais il y a des boucles qui semblent inuile

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Par défaut
    Et bing! une bosse!

    Bonjour, Ouskelnord.

    cordialement

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour Michel, content que tu ré-apparaisses

  6. #6
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Tu peux rassembler tes 3 boucles en 1 seules en mettant des OR ou AND.
    J'ai rajouter les modifications données par ouskel'n'or et Michel_M

    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
     
    Private Sub CommandButton1_Click()
        Dim Cell As Variant, i
        Dim valeur As String
        i = 1
     
        Application.ScreenUpdating = False
     
        Sheets("BBG").Select
     
        valeur = Cells(1, i).Value
     
        Do While valeur <> "RTG_SP" Or valeur <> "RTG_FITCH" Or valeur <> "RTG_MOODY"
        i = i + 1
        Loop
     
        derlig = Cells(i, 1).xl(down).Row
        For Each Cell In Range(Cells(1, i), Cells(derling, i))
            Cell.Value = Replace(Cell.Value, "/*+", "")
            Cell.Value = Replace(Cell.Value, "/*-", "")
            Cell.Value = Replace(Cell.Value, "/*", "")
            Cell.Value = Replace(Cell.Value, "#N/A N.A.", "NR")
            Cell.Value = Replace(Cell.Value, "#N/A N Ap", "NR")
            Cell.Value = Replace(Cell.Value, "#N/A Sec", "NR")
            Cell.Value = Replace(Cell.Value, "e", "")
            Cell.Value = Replace(Cell.Value, "(P)", "")
            Cell.Value = Replace(Cell.Value, " ", "")
        Next Cell
     
        Application.ScreenUpdating = True
     
    End Sub
    Je n'ai pas tester

  7. #7
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Ma boucle n'ai pas bonne. Je n'avais pas bien lu tes commentaires sur le fait que tes 3 valeurs sont sur 3 colonnes différentes mais tu peux quand même améliorer tes boucles et créer une fonction pour remplacer les caractere


    Je viens de remarquer qu'il n'y a pas de fin préciser donc la boucle risque de tourner en boucle indéfiniment.

    Rajoute une condition avec une fin genre quand que fin de ligne <> de 1500.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    Ok merci je vais tester ca
    Je vous dirais si ca marche!

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    Bizzare ca marche pas :/

    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
    Private Sub CommandButton1_Click()
        Dim Cell As Variant, i, derlig
       i = 1
     
        Application.ScreenUpdating = False
     
        Sheets("BBG").Select
     
        Do While Cells(1, i).Value <> "RTG_SP"
        i = i + 1
        Loop
     
        Cells(1,i).select
        derlig = Range(Cells(1,i), Cells(derlig, i + 2)).Select
        Range(Cells(1, i), Cells(derlig, i + 2)).Select
        For Each Cell In Selection
            Cell.Value = Replace(Cell.Value, "/*+", "")
            Cell.Value = Replace(Cell.Value, "/*-", "")
            Cell.Value = Replace(Cell.Value, "/*", "")
            Cell.Value = Replace(Cell.Value, "#N/A N.A.", "NR")
            Cell.Value = Replace(Cell.Value, "#N/A N Ap", "NR")
            Cell.Value = Replace(Cell.Value, "#N/A Sec", "NR")
            Cell.Value = Replace(Cell.Value, "e", "")
            Cell.Value = Replace(Cell.Value, "(P)", "")
            Cell.Value = Replace(Cell.Value, " ", "")
        Next Cell
     
        Application.ScreenUpdating = True
     
    End Sub
    j'ai mis i+2 car les 3 colonnes sont tjrs les unes apres les autres.

  10. #10
    Membre confirmé Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    C'est normal que ca ne marche pas. Tu utilise derlig sans qu'il ne soit alimenter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         derlig = Range(Cells(1,i), Cells(derlig, i + 2)).Select
    en claire derlig = derlig donc ca plante.

    Ca ne serait pas plutot ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         derlig = Range(Cells(1,i), Cells(1, i + 2)).Select

  11. #11
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Par défaut
    Exact, j'avais pas fait gaffe ! Merci !
    Bon la ca tourne depuis un moment wait & see !

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/08/2006, 10h22
  2. Réponses: 11
    Dernier message: 27/06/2006, 17h04
  3. Accès outlook par programmation VBA depuis access
    Par STOUPI dans le forum Access
    Réponses: 1
    Dernier message: 05/06/2006, 18h22
  4. [JavaMail] Mail avec javamail super lent ?
    Par Baptiste Wicht dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 19/01/2006, 12h59
  5. Programme un peu lent
    Par gege2061 dans le forum GTK+
    Réponses: 4
    Dernier message: 08/07/2004, 17h42

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