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 :

Application.VLookUp en boucle [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut Application.VLookUp en boucle
    Bonjour,

    J'essaie d'utiliser Application.VLookUp plutôt que Find pour une longue recherche de quelques 2000 codes dans une liste de 30000 codes.

    En utilisant Find, ça prend environ 4 minutes et j'essaie d'accélérer le tout.
    J'utilise ScreenUpdating = False et Calculation = xlCalculationManual pour réduire le temps d'exécution au max.

    En essayant avec Application.VLookUp, ça semble aller plus vite, mais ça plante après 225 lignes (ou codes) avec le message "Exécution interrompue".
    Si je clique sur Continuer, ça continue pour quelques autres lignes puis ça recommence.

    Quelqu'un aurait une réponse à ce problème ?
    Et éventuellement une solution ?

    Merci !

  2. #2
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Bonsoir,
    n'y aurait-il pas un gestionnaire activé quelque part?

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Merci de t'intéresser au cas...

    Qu'entends-tu par "gestionnaire" ?

  4. #4
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Mille excuses.
    Je penses à un gestionnaire d'évènement ou d'erreur.
    Si ce n'est pas le cas, peux tu poster le code afin de qu'un ou des regards neufs puissent ...

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    J'ai aussi essayé avec Application.Match (Equiv) et le résultat est le même... Exécution interrompue...
    Et ça arrête toujours à la 218e ligne, donc 218 * 20 itérations = 4360 passages par la fonction VLookUp


    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
    Sub TestCalculOut()
        Dim I As Long, J As Long, nbLignes As Long, LigneOut As Long
        Dim Cnt As Long, CntMax As Long
        Dim Temps As Double
     
        Temps = Timer
     
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
     
        nbLignes = Sheets("SFF").Cells(Rows.Count, "B").End(xlUp).Row
        LigneOut = Sheets("Suivi OUT").Cells(Rows.Count, "B").End(xlUp).Row
     
        Sheets("SFF").Range("AX5:AX" & nbLignes).ClearContents
     
        For I = 5 To nbLignes
            Application.StatusBar = "Lecture de la ligne " & I & " sur " & nbLignes
            Cnt = 0
     
            If IsFrais(Sheets("SFF").Range("E" & I)) Then
                CntMax = 13
            Else
                CntMax = 20
            End If
     
            For J = CntMax To 1 Step -1
                If IsError(Application.VLookup(Sheets("SFF").Range("A" & I) & J, Sheets("Suivi OUT").Range("B2:B" & LigneOut), 1, False)) Then
                    Sheets("SFF").Range("AX" & I) = Cnt
                    Exit For
                Else
                    Cnt = Cnt + 1
                End If
            Next
            If CntMax = Cnt Then Sheets("SFF").Range("AX" & I) = CntMax
        Next
     
        Application.StatusBar = False
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
     
        MsgBox "Terminé en" & vbCrLf & Timer - Temps & " sec."
    End Sub

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    J'ai finalement résolu le problème.
    J'ai rebooté mon PC...

    Ça prend donc 40 secondes avec Application.VLookUp plutôt que 4 minutes et plus avec des Find...

  7. #7
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Bien j'allais justement te dire d'essayer éventuellement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.EnableCancelKey = xlDisabled
    Car le message Exécution interrompue vient d'une commande d'interruption, activée quand et par quoi ?

    Edit:
    40 s. C'est un temps qui peut être considérablement réduit en passant par d'autres voies.
    Je rappelle comme tu as dû le constater: Find est pratique pour des traitements courts moins récursifs. VLook semble pratique, mais reste tout de même lourd pour un traitement massif sous VBA.
    Si à défaut d'inspiration autre que les VLook ou CountIf ..., pour des traitements lourds, il vaut mieux construire la formule destinée à une plage du tableur qui fera le calcul instannément.

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

Discussions similaires

  1. [XL-2010] VBA Optimisation et gain de temps Application.vlookup
    Par jeremy75018 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/02/2015, 18h00
  2. [XL-2010] Application Vlookup/Application Match
    Par jeremy75018 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/12/2014, 14h40
  3. Utiliser le script vlookup en boucle
    Par diego45 dans le forum MATLAB
    Réponses: 9
    Dernier message: 17/09/2014, 18h09
  4. [XL-2003] Application.VLookup
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/12/2009, 09h36
  5. les boucles qui bloquent l'application
    Par niouze dans le forum VB.NET
    Réponses: 5
    Dernier message: 18/07/2007, 08h51

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