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 macro ?


Sujet :

Macros et VBA Excel

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Dataminer
    Inscrit en
    Juillet 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Dataminer

    Informations forums :
    Inscription : Juillet 2008
    Messages : 54
    Par défaut Optimisation macro ?
    Bonjour,

    J'ai réalisé une macro mais je pense qu'elle n'est pas optimisée car sont temps de traitement est extrèmement long.

    Principe de la macro : pour chaque dossier, la macro parcours toute la liste et dit si c'est un dossier sans duplication, et le cas contraire, elle dit si c'est le dossier d'origine ou le dossier dupliqué. Dans ce dernier cas, la macro rappatrie, pour le dossier d'origine, la convention du dossier dupliqué. C'est le principe des recherchev imbriquées mais en VBA.

    Pour 20 lignes ça va. Mais à 100 000 lignes ça met 5h.

    N'y a-t-il pas un autre type de code me permettant de réduire ce temps de traitement ?

    Merci par avance pour vos réponses.

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Private Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
    Private Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
     
    Sub detection_duplication()
    Dim Debut As Currency, Fin As Currency, Freq As Currency
    QueryPerformanceCounter Debut
     
    Sheets(1).Shapes(1).Visible = False
    Sheets(1).Shapes(2).Visible = True
     
    i = 2
     
    j = 2
     
    Cells.Replace What:="=", Replacement:="", LookAt:=xlPart
     
    'détermine la dernière ligne du fichier
    While Range("A" & j) <> ""
        j = j + 1
    Wend
     
    fin_de_fichier = j
     
    Range("G2:I" & fin_de_fichier).ClearContents
     
    While Range("A" & i) <> ""
     
        'colonne numéro
        Range("G" & i) = Right(Range("B" & i), 10)
     
        'colonne origine dossiers
        If Range("G" & i) = "" Then
            Range("H" & i) = "dossier sans duplication"
        Else
            If Range("C" & i) = Range("G" & i) Then
                Range("H" & i) = "dossier origine"
            Else
                If Range("C" & i) <> Range("G" & i) And Range("G" & i) <> "" Then
                    Range("H" & i) = "dossier dupliqué"
                End If
            End If
        End If
     
        'colonne dossier dupliqué
        j = i + 1
        If Range("B" & i) <> "" Then
            trouve = False
            valeur = Range("B" & i)
            While Range("A" & j) <> "" And trouve = False
                If Range("B" & j) = valeur Then
                    Range("I" & i) = Range("D" & j)
                    trouve = True
                    j = j + 1
                Else
                    j = j + 1
                End If
            Wend
        End If
     
        i = i + 1
     
    Wend
     
    Sheets(1).Shapes(1).Visible = True
    Sheets(1).Shapes(2).Visible = False
     
    QueryPerformanceCounter Fin
    QueryPerformanceFrequency Freq
    MsgBox "Durée de la procédure = " & Format(((Fin - Debut) / Freq), "0.00") & " s"
    End Sub
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [XL-2010] Optimisation macro onglet
    Par nubed dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/09/2014, 13h32
  2. [XL-2010] Optimiser macro : problème d'Euler n°12
    Par mayeux67 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 18/07/2014, 09h39
  3. Optimisation macro comparaison / Plantage
    Par Geoffray69 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/07/2013, 10h00
  4. optimisation macro de traitement d'un fichier de données
    Par jalinn dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/07/2008, 20h00
  5. {VBA Excel} Optimiser macro si possible
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/06/2007, 16h06

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