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 :

Boucles for imbriquées, macro trop lente


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Boucles for imbriquées, macro trop lente
    Bonjour,

    J’ai réalisé un programme vba qui est beaucoup trop lent ! J’aimerais avoir vos conseils concernant de possibles évolutions !

    Les données se présentent de la façon suivante : une colonne, représentant des objets, et une autre, donnant des dates de réalisation d’opérations liées à ces objets.
    Il peut y avoir plusieurs opérations et donc plusieurs dates par objet.

    Le but du programme est :
    - Dans un 1er temps, de trouver pour chaque objet la date la plus ancienne;
    - Dans un 2nd temps, de comparer ces dates et de donner la date la plus récente et son objet associé.

    Le programme que j’ai réalisé fonctionne mais est très lent (seulement 100 à 200 lignes de données à traiter et plusieurs minutes d’exécution).

    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
    Sub D_DatesDebutMsn()
     
    Application.ScreenUpdating = False
     
    Worksheets("Feuil3").Range("A:B").ClearContents
    Worksheets("data").Columns("D:G").NumberFormat = "General"
    LastRow = Worksheets("data").Range("A60000").End(xlUp).Row
     
    For i = 2 To LastRow
        If Worksheets("data").Cells(i, 8).Value = "Oui" Then
            first = Worksheets("data").Cells(i, 6).Value
            vMsn = Worksheets("data").Cells(i, 2).Value
            For j = 2 To LastRow
                If j <> i Then
                    If Worksheets("data").Cells(j, 2).Value = Worksheets("data").Cells(i, 2).Value Then
                        If Worksheets("data").Cells(j, 6).Value < Worksheets("data").Cells(i, 6).Value Then
                            If Worksheets("data").Cells(j, 6).Value > 0 Then
                                first = Worksheets("data").Cells(j, 6).Value
                                vMsn = Worksheets("data").Cells(j, 2).Value
                            End If
                        End If
                    End If
                End If
                If first <> 0 Then
                    Worksheets("Feuil3").Cells(i, 1).Value = vMsn
                    Worksheets("Feuil3").Cells(i, 2).Value = first
                End If
            Next j
        End If
    Next i
     
     
    Worksheets("data").Columns("D:G").NumberFormat = "m/d/yyyy"
    Worksheets("Feuil3").Columns("B:B").NumberFormat = "m/d/yyyy"
    Application.ScreenUpdating = True
     
     
    End Sub
    Si vous avez des pistes pour l’améliorer ou même une méthode différente (peut être avec des recherchev ?? je ne vois pas trop comment faire..), ce serait génial !
    Merci d’avance et bonne soirée !

  2. #2
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Bonjour,

    Essaie de travailler avec des tableaux plutôt qu'avec des plages ou des cellules.
    L'exemple donné à ce sujet en introduction de ce tutoriel: http://silkyroad.developpez.com/vba/tableaux/ est très parlant.

    Cordialement.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    En effet, c'est ce qui m'a aussi été conseillé par ailleurs! Je vais étudier ça.

    Merci pour ta réponse et bonne soirée!

Discussions similaires

  1. Boucles for imbriquées
    Par The eye dans le forum ASP
    Réponses: 2
    Dernier message: 19/07/2007, 12h00
  2. Boucle for imbriqué
    Par boula dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 18/07/2007, 12h42
  3. 2 boucles for imbriquées
    Par karimphp dans le forum Langage
    Réponses: 8
    Dernier message: 02/12/2006, 14h46
  4. Batch - Deux boucle For imbriquées plus un FC
    Par Lorponos dans le forum Windows
    Réponses: 17
    Dernier message: 27/07/2006, 14h58
  5. [Syntaxe] Boucle For imbriquées en 1.5
    Par Piolet dans le forum Langage
    Réponses: 5
    Dernier message: 09/01/2005, 00h49

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