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 :

Optimisation temporelle d'une boucle


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2019
    Messages : 27
    Points : 17
    Points
    17
    Par défaut Optimisation temporelle d'une boucle
    Bonjour,
    je viens de finaliser une programmation assez longue d'une gestion de base de données professionnelle.
    Les boucles For Next que j'utilise sont gourmandes en temps.
    En effet je dois comparer un fichier de données référentielles avec une extraction sous forme Excel d'un logiciel de suivi de matériel.
    J'ai 450 références à comparer à quelque 9000 sur l'extraction. Une référence peut être trouvée plusieurs fois sur l'extraction et la comparaison est élargie à plusieurs cellule de la ligne.
    Cela fait donc plus de 4 million de comparaisons.
    N'utilisant jusqu'à présent que ce type de boucles imbriquées, j'aimerais savoir s'il existe une solution plus rapide.
    Ci dessous le code de cette boucle.
    Merci de votre attention.
    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
        nombredeligneRéférences = WKST_Références.Range("A65536").End(xlUp).Row
        nombredelignefeuil1 = WKST_Feuil1.Range("A65536").End(xlUp).Row
            For lignefeuil1 = nombredelignefeuil1 To 2 Step -1
                For ligneRéférences = nombredeligneRéférences To 2 Step -1
                    If WKST_Feuil1.Cells(lignefeuil1, 6).Value <> "" And WKST_Feuil1.Cells(lignefeuil1, 9).Value <> "" And WKST_Feuil1.Cells(lignefeuil1, 6).Value = WKST_Références.Cells(ligneRéférences, 5).Value And WKST_Feuil1.Cells(lignefeuil1, 7).Value = WKST_Références.Cells(ligneRéférences, 1).Value Then
                        WKST_Feuil1.Cells(lignefeuil1, 2).Value = WKST_Références.Cells(ligneRéférences, 3).Value & " n°" & WKST_Feuil1.Cells(lignefeuil1, 9).Value
                        WKST_Feuil1.Cells(lignefeuil1, 4).Value = WKST_Références.Cells(ligneRéférences, 6).Value
                        WKST_Feuil1.Cells(lignefeuil1, 5).Value = WKST_Références.Cells(ligneRéférences, 4).Value & " n°" & WKST_Feuil1.Cells(lignefeuil1, 9).Value
                        Exit For
                    End If
                    If WKST_Feuil1.Cells(lignefeuil1, 6).Value = WKST_Références.Cells(ligneRéférences, 5).Value And WKST_Feuil1.Cells(lignefeuil1, 7).Value = WKST_Références.Cells(ligneRéférences, 1).Value Then
                        WKST_Feuil1.Cells(lignefeuil1, 2).Value = WKST_Références.Cells(ligneRéférences, 3).Value
                        WKST_Feuil1.Cells(lignefeuil1, 4).Value = WKST_Références.Cells(ligneRéférences, 6).Value
                        WKST_Feuil1.Cells(lignefeuil1, 5).Value = WKST_Références.Cells(ligneRéférences, 4).Value
                        Exit For
                    End If
                Next ligneRéférences
            Next lignefeuil1

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MULTON Voir le message
    Bonjour,

    Pour faire ce genre de comparaison, je fais une extraction de la base 2 dans un onglet à l'aide d'une recherche avancée et maintenant avec Power Query avec les conditions indiquées dans votre code. La table à comparer est considérablement restreinte et la mise à jour par la recherche avancée ou Power Query est quasi immédiate.

    Cela n'a rien à voir avec votre exemple, mais vous avez un exemple d'extraction avec Power Query dans ce message sur le forum Word : publipostage-nombre-champs-variables

    Au lieu de changer manuellement la cellule qui actualise la table Power Query, c'est à votre code de la modifier.

    Nb : Il faut seulement prendre la précaution de décocher Requête en arrière plan dans les propriétés Power Query.

  3. #3
    Membre à l'essai
    Homme Profil pro
    retraité
    Inscrit en
    Septembre 2019
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Septembre 2019
    Messages : 27
    Points : 17
    Points
    17
    Par défaut
    Merci Eric pour votre aide,
    je vais étudier cela et essayer.

Discussions similaires

  1. Optimisation code avec une boucle For
    Par latour500 dans le forum jQuery
    Réponses: 7
    Dernier message: 11/04/2014, 15h02
  2. optimiser mon code avec une boucle for?
    Par Invité dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 16/11/2007, 08h33
  3. Réponses: 11
    Dernier message: 19/06/2006, 16h54
  4. Réponses: 4
    Dernier message: 17/01/2006, 19h17
  5. [Debutant] Optimisation d'une boucle
    Par Javatator dans le forum Langage
    Réponses: 3
    Dernier message: 25/10/2004, 18h50

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