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 :

Calcul plus long si lancé en fin de macro [XL-2010]


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
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut Calcul plus long si lancé en fin de macro
    Bonjour,

    Je ne comprends pas pourquoi mes Vlookup (255 max) prennent autant de temps dans ma macro, quand je teste juste l'insertion des formules j'en ai pour quelques secondes, quand je le fait vers la fin de la macro c'est plusieurs minutes ... (voire même plantage)
    J'ai essayé de mettre le calcul en manuel, pas de changement, de copier les colonnes par valeurs dès qu'elles étaient remplies, idem
    Si quelqu'un a une idée pour résoudre ou contourner mon problème je suis preneur.

    juste les 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
    With ThisWorkbook.Sheets("data")
    Workbooks.Open Filename:=Range("data_mprec")
    dl = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("O1") = "pena_MSprecdt"
    .Range("P1") = "pena2_MSprecdt"
    .Range("Q1") = "dec_MSprecdt"
    .Range("O2:O" & dl).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-14],pena.xlsx!C1:C39,36,0),0)"
    .Range("P2:P" & dl).FormulaR1C1 = "=iferror(VLOOKUP(RC[-15],pena.xlsx!C1:C39,35,0),0)"
    .Range("Q2:Q" & dl).FormulaR1C1 = "=iferror(VLOOKUP(RC[-16],pena.xlsx!C1:C39,16,0),0)"
    .Range("O2:Q" & dl).Copy
    .Range("O2:Q" & dl).PasteSpecial xlValues
    Application.CutCopyMode = False
    Workbooks("pena.xlsx").Close False
    end with
    Avec le reste:
    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    With ThisWorkbook.Sheets("data")
    .Cells.ClearContents
    Workbooks.Open Filename:=Range("data")
    Workbooks("pena.xlsx").Sheets("pena").Range("A1").CurrentRegion.AdvancedFilter _
             Action:=xlFilterCopy, _
             CriteriaRange:=ThisWorkbook.Sheets("TO DO").Range("police_num"), _
             CopyToRange:=.Range("A1"), _
             Unique:=False
    Workbooks("pena.xlsx").Close False
    dl = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("O1").FormulaR1C1 = "aléa"
    .Range("O2:O" & dl).FormulaR1C1 = "=RAND()"
    .Columns("O").Copy
    .Columns("O").PasteSpecial xlValues
    Application.CutCopyMode = False
     
     
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=Range("C2:C" & dl), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SortFields.Add Key:=Range("O2:O" & dl), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SetRange Range("A1:O" & dl)
        .Sort.Header = xlYes
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
     
    .Columns("O").ClearContents
    c = 0
    deb = dl
    For i = dl To 2 Step -1
        If .Cells(i, 2) = .Cells(i - 1, 2) Then
            c = c + 1
        Else
            If c >= 5 Then
                .Range(.Cells(deb, 1), .Cells(i + 5, 1)).EntireRow.Delete
                deb = i - 1
                c = 0
            Else
                deb = i - 1
                c = 0
            End If
        End If
    Next i
    Workbooks.Open Filename:=Range("data_mprec")
    .Range("O1") = "pena_MSprecdt"
    .Range("P1") = "pena2_MSprecdt"
    .Range("Q1") = "dec_MSprecdt"
    .Range("O2:O" & dl).FormulaR1C1 = "=IFERROR(VLOOKUP(RC[-14],pena.xlsx!C1:C39,36,0),0)"
    .Range("P2:P" & dl).FormulaR1C1 = "=iferror(VLOOKUP(RC[-15],pena.xlsx!C1:C39,35,0),0)"
    .Range("Q2:Q" & dl).FormulaR1C1 = "=iferror(VLOOKUP(RC[-16],pena.xlsx!C1:C39,16,0),0)"
    .Range("O2:Q" & dl).Copy
    .Range("O2:Q" & dl).PasteSpecial xlValues
    Application.CutCopyMode = False
    Workbooks("pena.xlsx").Close False

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Problème trouvé, j'avais oublié de recalculer la dernière ligne, donc ce n'était pas 245 mais plusieurs milliers de Vlookup d'où le temps de calcul long.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/01/2016, 13h10
  2. [Oracle 9i] Traitement plus long après calcul de statistique
    Par iSylvain dans le forum Administration
    Réponses: 8
    Dernier message: 04/03/2009, 11h08
  3. temps de calculs extremement long !!
    Par salseropom dans le forum C++
    Réponses: 9
    Dernier message: 19/01/2005, 20h12
  4. tyoe d'entier plus long que 32 bits
    Par LIMODIN dans le forum MFC
    Réponses: 4
    Dernier message: 13/01/2004, 20h08

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