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 :

Probleme de lenteur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Par défaut Probleme de lenteur
    Bonjour,

    J'ai un probleme de lenteur sur la petite macro suivante
    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
    Dim a As Integer
            a = 2
            While Not Cells(a, 2) = ""
                If Cells(a, 2) > 0 Then
                    Dim B As String
                    B = Cells(a, 1)
                    Dim c As Integer
                    c = 2
                    Windows("Test gestion IO.xls").Activate
                    Sheets("Temp IO").Select
                        While Not Cells(c, 7) = ""
                              If Cells(c, 7) = B Then
                              Range(Cells(c, 1), Cells(c, 12)).Copy
                              Sheets(B).Range("A2").Insert shift:=xlDown
                              Application.CutCopyMode = False
                              End If
                              c = c + 1
     
                              Sheets("Temp IO").Select
                        Wend
                 End If
                 a = a + 1
                 Windows("Reference.xls").Activate
                 Sheets("Liste controller").Select
            Wend
    Mon fichier "Temp IO" comprend environ 2300 lignes.

    Il existe peut etre un autre code???

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Tu peux tester ceci stp
    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
    Sub test()
    Dim WStemp As Worksheet, WSlc As Worksheet
    Dim i As Integer, j As Integer, B As String
     
    Set WStemp = Workbooks("Test gestion IO.xls").Sheets("Temp IO")
    Set WSlc = Workbooks("Reference.xls").Sheets("Liste controller")
     
    For i = 2 To WSlc.Cells(Rows.Count, 2).End(xlUp).Row
        If WSlc.Cells(i, 2) > 0 Then
            B = WSlc.Cells(i, 2)
            With WStemp
                For j = 2 To .Cells(Rows.Count, 7).End(xlUp).Row
                    If .Cells(j, 7) = B Then
                        .Range(.Cells(j, 1), .Cells(j, 12)).Copy
                        .Sheets(B).Range("A2").Insert shift:=xlDown
                    End If
                Next j
            End With
        End If
    Next i
     
    End Sub

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 288
    Par défaut
    Tu peux aussi désactiver certaines fonctions avant le traitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Application.EnableCancelKey = xlDisabled
    Application.ScreenUpdating = false
    Application.DisplayAlerts = false
    Application.Interactive = false
    Application.Calculation = xlCalculationManual
     
    ... ton traitement...
     
    Et les réactiver après le traitement :
    Application.ScreenUpdating = true
    Application.DisplayAlerts = true
    Application.Interactive = true
    Application.Calculation = xlCalculationAutomatic
    Surtout efficace s'il y a beaucoup d'écritures dans le classeur, moins si ce n'est que de la consultation.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 103
    Par défaut
    Merci pour votre aide, mais le gain de temps n'etait pas flagrant. J'ai opté pour le code suivant:
    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
    Dim B As String, a As Integer
        a = 2
        Sheets("parametres").Select
        B = Cells(a, 1)
     
     
        While Not Cells(a, 1) = ""
            If Cells(a, 1) > 0 Then
                B = Cells(a, 1)
                Sheets("Temp IO").Select
                Selection.AutoFilter Field:=7, Criteria1:=B
                Range("A2").Select
                Range(Selection, Selection.End(xlToRight)).Select
                Range(Selection, Selection.End(xlDown)).Select
                Selection.Copy
                Windows("Test gestion IO.xls").Activate
                Sheets(B).Select
                Range("A2").Select
                ActiveSheet.Paste
                Application.CutCopyMode = False
            End If
            a = a + 1
            Sheets("parametres").Select
        Wend
    Avec ce code je passe de 10 min a moins d'une minute.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RMI]Probleme de lenteur (DNS?)
    Par anthyme dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 11/07/2006, 18h15
  2. Probleme de lenteur 2 for imbriquer
    Par sirbaldur dans le forum Langage
    Réponses: 2
    Dernier message: 22/06/2006, 19h09
  3. [Perf]Probleme de lenteur connexion
    Par mermoz dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 09/11/2005, 17h53
  4. [interbase 6]probleme de lenteur
    Par macadam314 dans le forum InterBase
    Réponses: 2
    Dernier message: 27/06/2005, 09h48
  5. [Sybase]probleme de lenteur
    Par MASSAKA dans le forum Sybase
    Réponses: 3
    Dernier message: 19/03/2003, 22h58

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