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 :

Réduction du temps de la macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mai 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 61
    Par défaut Réduction du temps de la macro
    Bonjour à tous!

    Je cherche à réduire le temps de ma maro parce que je travaille avec beaucoup de ligne et quand je fais tourner ma macro elle prend un temps fou à calculer ce que je veux lui faire faire..

    En gros c'est assez simple.
    J'ai une liste de nombre en colonne A
    J'ai une liste de nombre en colonne B

    Je veux sortir tous les chiffre de B qui ne sont pas dans A.
    Par contre je ne veux pas les chiffres de A qui ne sont pas dans B
    (Donc ce n'est pas juste prendre tous les doublons...)

    Voici mon code

    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
    Sub customer()
     
    Sheets("blabla").Select
     
    k = 1
    For j = 1509 To 3008
    f = 0
        For i = 1 To 1509
     
            Sheets("blabla").Select
            If Cells(j, 5).Value = Cells(i, 5).Value Then
                f = f + 1
            End If
     
            If f = 0 Then
                Sheets("customer").Select
                Cells(k, 1).Value = Cells(j, 5).Value
                k = k + 1
            End If
        Next i
    Next j
     
     
     
    End Sub
    Merci pour vos idées !

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Les classiques :

    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
    Sub customer()
     
    Application.ScreenUpdating = False
     
    Sheets("blabla").Select
     
    k = 1
    For j = 1509 To 3008
    f = 0
        For i = 1 To 1509
     
            With Sheets("blabla")
                If .Cells(j, 5).Value = .Cells(i, 5).Value Then
                    f = f + 1
                End If
            End With
     
            If f = 0 Then
                With Sheets("customer")
                    .Cells(k, 1).Value = .Cells(j, 5).Value
                    k = k + 1
                End With
            End If
        Next i
    Next j
     
    Application.ScreenUpdating = True
     
    End Sub

  3. #3
    Membre actif
    Inscrit en
    Mai 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 61
    Par défaut
    Merci!

    Mais ca continue de tourner super lentement. La macro doit tourner pendant 3min au moins...
    En meme temps je comprends..il cherche un nombre parmi 1509 et il repete l'opération 1509 fois.

    Il n'y a pas une application sous vba permet de voir si un chiffre apparait dans un tableau de maniere plus rapide?

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour.

    Une boucle pour parcourir la colonne B et utilisation de la méthode Find appliquée à un Range pour comparer avec la colonne A …

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Une autre solution utilisant des tableaux intermédiaires (temps d'exécution < 10 sec).

    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
     
    Sub customer()
     
    Dim k As Integer
    Dim i As Integer
    Dim j As Integer
    Dim f As Integer
     
    Dim tabACol5 As Variant
    Dim tabBCol1 As Variant
    Dim tabBCol5 As Variant
     
    'copie les cellules utiles vers des tableaux
    tabACol5 = Sheets("blabla").Range("E1:E3008")
    tabBCol1 = Sheets("customer").Range("A1:A3008")
    tabBCol5 = Sheets("customer").Range("E1:E3008")
     
     
    k = 1
    For j = 1509 To 3008
        f = 0
        For i = 1 To 1509
            If tabACol5(j, 1) = tabACol5(i, 1) Then
                f = f + 1
            End If
     
            If f = 0 Then
                tabBCol1(k, 1) = tabACol5(j, 1)
                k = k + 1
            End If
        Next i
    Next j
     
    'recopie les tableaux vers les feuilles
    Sheets("blabla").Range("E1:E3008") = tabACol5
    Sheets("customer").Range("A1:A3008") = tabBCol1
    Sheets("customer").Range("E1:E3008") = tabBCol5
     
     
    End Sub

  6. #6
    Membre actif
    Inscrit en
    Mai 2011
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 61
    Par défaut
    Merci ca marche!

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

Discussions similaires

  1. Réduction du temps d’exécution d'une Macro
    Par lapatatarte dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/05/2012, 12h11
  2. Temps d'exécution macro s'allonge avec le temps
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/06/2011, 14h48
  3. [XL-2007] Oter une protection sur feuille le temps d'une macro
    Par jose_67 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/02/2010, 20h13
  4. Réponses: 1
    Dernier message: 30/07/2009, 14h26
  5. Réduction du Temps de Travail
    Par FullOver dans le forum Droit du travail
    Réponses: 4
    Dernier message: 05/03/2008, 11h44

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