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 :

accélération de traitement [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut accélération de traitement
    bonjour,

    j'ai un code qui met plus de 7 minutes à tourner juster pour remplir en boucle une plage de 8000 lignes.
    pour accelerer le traitement j'ai cru bon de faire la mise à jour de l'écran qu'à la fin de l'execution à l'aide de la ligne de code suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = False
    mais bon ça dure toujours autant pourtant le code est simple.

    comment peut on par ailleurs accelerer le traitement ?
    avez vous une idée ?
    toute contribution est la bienvenue!
    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Par défaut
    Bonjour et si tu nous montrais ton code

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2012
    Messages : 54
    Par défaut
    le voici:

    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
    Private Sub CommandButton6_Click()
     
     
    Dim i As Integer, cel As Range
     
    Worksheets("préparation déclaration FUE").Select
     
     
     
    Application.ScreenUpdating = False
     
    'boucle sur toutes les cellules des colonnes A et B
     
    For Each cel In Worksheets("préparation déclaration FUE").Range("A6:B" & Worksheets("préparation déclaration FUE").Range("B" & Worksheets("préparation déclaration FUE").Rows.Count).End(xlUp).Row)
     
        'si la cellule est vide, elle prend la valeur de la cellule du dessus
     
        If cel.Value = "" Then cel.Value = cel.Offset(-1, 0).Value
     
    Next cel 'prochaine cellule des colonnes A et B
     
     
     
    End Sub
    merci d'avance!

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 55
    Par défaut
    bonjour

    J'ai essayé ton code dans un module et le temps d'execution est de 4 seconde !!!!!!!!

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Essai de cette façon :
    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
     
    Private Sub CommandButton6_Click()
     
        Dim Plage As Range
        Dim Cel As Range
     
        With Worksheets("préparation déclaration FUE")
     
            'défini la plage de A6 à Bx
            Set Plage = .Range(.Cells(6, 1), .Cells(.Rows.Count, 2).End(xlUp))  'de A6 à Bx
     
        End With
     
        For Each Cel In Plage
     
            'si la cellule est vide, elle prend la valeur de la cellule du dessus
            If Cel.Value = "" Then Cel.Value = Cel.Offset(-1, 0).Value
     
        Next Cel
     
    End Sub
    Hervé.

  6. #6
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    Quelque-soit le résultat du chrono, les boucles sont chronophages, il est donc inutile de parcourir une plage entière, limite la boucle aux éléments visés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub gogo()
    Dim cell As Range
    Dim MaPlage As Range
     
    'set MaPlage = Ce que tu vises
    For Each cell In MaPlage.SpecialCells(xlCellTypeBlanks)
        cell.Value = cell.Offset(-1, 0).Value
    Next cell
    End Sub
    Cordialement,

    Ps : si le côté technique de la réponse = OK ou pas => pensez à cliquer sur les pouces et quand question résolue à la taguer résolue, et chaque action vous rapporte des points

    Didier

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

Discussions similaires

  1. Accélération d'un traitement dans une boucle
    Par mobi_bil dans le forum Langage
    Réponses: 4
    Dernier message: 15/06/2009, 12h57
  2. Durée d'un traitement temps réel
    Par Almex dans le forum C
    Réponses: 5
    Dernier message: 29/03/2003, 14h15
  3. [directsound] boucle de traitement de son
    Par gargle dans le forum DirectX
    Réponses: 5
    Dernier message: 24/03/2003, 10h47
  4. Rafraichissement de la fenetre pendant le traitement
    Par Bobx dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/02/2003, 15h13
  5. Matrice de filtrage ?
    Par gimlithedwarf dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 24/08/2002, 09h44

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