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
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 2
    Points
    2
    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
    Points : 15 543
    Points
    15 543
    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 éprouvé

    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
    Points : 1 116
    Points
    1 116
    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
    Michel_M

  4. #4
    Membre éprouvé

    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
    Points : 1 116
    Points
    1 116
    Par défaut
    Et bing! une bosse!

    Bonjour, Ouskelnord.

    cordialement
    Michel_M

  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
    Points : 15 543
    Points
    15 543
    Par défaut
    Bonjour Michel, content que tu ré-apparaisses

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 148
    Points
    148
    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
    C'est tout un art de savoir programmer. Passant des heures à chercher une solution avec plaisir et joie.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 148
    Points
    148
    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.
    C'est tout un art de savoir programmer. Passant des heures à chercher une solution avec plaisir et joie.

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

  9. #9
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 2
    Points
    2
    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 habitué Avatar de scully2501
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Points : 148
    Points
    148
    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
    C'est tout un art de savoir programmer. Passant des heures à chercher une solution avec plaisir et joie.

  11. #11
    Candidat au Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 2
    Points
    2
    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