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 :

Optimiser un bout de code VB


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut Optimiser un bout de code VB
    Bonjour à tous,

    J'ai ecrit le ptit bout de code suivant...Il est appellé via une procédure "Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)"
    ...
    Feuille1 et Feuille2 contiennent environ 1000 lignes, du coup la moindre modification prend des plombes sur mon vieux coucou!

    Auriez vous quelques conseils, avis ou idée pour améliorer cela! Optimiser en quelque sorte?

    lastline_FeuilleX, X=[1,2], est la dernière ligne remplie de la feuille FeuilleX

    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
    For i = 3 To lastline_Feuille1
                For j = 3 To lastline_Feuille2
                If Sheets("Feuille1").Range("A" & i) = Sheets("Feuille2").Range("A" & j) Then
                    If Sheets("Feuille1").Range("B" & i) = Sheets("Feuille2").Range("B" & j) Then
                        For k = 3 To lastline_Feuille2
                        If (Sheets("Feuille1").Range("K" & i) = Sheets("Feuille2").Range("E" & k)) Then
                            Bool = 1
                            Exit For
                        Else
                            Bool = 0
                        End If
                        Next
                        If Bool = 0 Then
                            Sheets("Feuille1").Select
                            Sheets("Feuille1").Rows(i).Select
                            Selection.Copy
                            ' Copie de la ligne depuis la feuille Cobol
                            Sheets("Feuille2").Select
                            Rows(i).Select
                            Selection.Insert Shift:=xlDown
                            ' Insertion de la ligne dans Feuille2
                            j = lastline_Feuille2
                            ' Sortie de la boucle 2
                            Range("C" & i).Select
                            Application.CutCopyMode = False
                            Selection.Delete Shift:=xlToLeft
                            Range("C" & i).Select
                            Application.CutCopyMode = False
                            Selection.Delete Shift:=xlToLeft
                            Range("E" & i).Select
                            Application.CutCopyMode = False
                            Selection.Delete Shift:=xlToLeft
                            Range("E" & i).Select
                            Application.CutCopyMode = False
                            Selection.Delete Shift:=xlToLeft
                            Range("E" & i).Select
                            Application.CutCopyMode = False
                            Selection.Delete Shift:=xlToLeft
                            Range("E" & i).Select
                            Application.CutCopyMode = False
                            Selection.Delete Shift:=xlToLeft
                            End If
                        End If
                        Exit For
                        End If
                Next
    Next
    D'avance merci!
    Bonne fin d'a-m

    Ted

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    556
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 556
    Par défaut
    Pour optimiser du code, faut déjà comprendre à quoi il sert

    Pourrais-tu dire ce que tu veux faire exactement ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut à tous
    Citation Envoyé par helios77 Voir le message
    Pour optimiser du code, faut déjà comprendre à quoi il sert
    Pourrais-tu dire ce que tu veux faire exactement ?
    +1
    et si tu veux réellement optimiser un code, ne donne pas un lambeau de code, donne toute la macro.
    A+

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    Oui evidemment...

    Feuill1 contient
    Colonne A: des noms de programme
    Colonne B: leur type
    Colonne C: contient "Oui" ou "Non"
    Colonne E: une référence de modification
    Colonne K: une date de modification
    Les colonnes D,F,G,H,I,J contiennent des informations qui ne m'interessent pas dans le cadre de cette macro

    Feuill2 est un historique de Feuill1 qui contient
    Colonne A: des noms de programme
    Colonne B: leur type
    Colonne C: une référence de modification
    Colonne D: une date de modification

    L'algo serait donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Parcourir Feuille1
    Si Colonne C de feuille1 contient "Oui"
    Si Référence de modification de feuille1non vide
               Parcourir Feuille 2
                     Si on trouve le même composant, du même type avec une référence de modification différente
                         Copie de la ligne de feuille1 vers Feuille2

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    556
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 556
    Par défaut
    ce qui est long, c'est la copie de ligne
    au lieu de faire 10 copier coller, je te conseille plutôt de répérer les lignes à copier pour ne fair qu'un seul copie... tu gagneras déjà pas mal de temps tu verras

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 278
    Par défaut
    J'ai fait le test avec des cas où il y a peu de ligne à copier (moins de 10) et l'exécution reste très longue...

  7. #7
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour tlm,

    D'après moi une des causes de la lenteur d'exécution provient du fait que tu as 3 boucles imbriquées, dans ce cas il vaut mieux mixer une boucle avec la fonction FIND

    Tu as un exemple d'utilisation de cette fonction dans ton aide (F1)
    En cherchant un peu sur le forum, tu pourras également trouver plusieurs exemples d'utilisation d'une boucle + Find

Discussions similaires

  1. Optimisation d'un bout de code
    Par Décembre dans le forum MATLAB
    Réponses: 6
    Dernier message: 13/10/2011, 23h47
  2. optimisation d'un bout de code
    Par ol9245 dans le forum MATLAB
    Réponses: 8
    Dernier message: 15/12/2010, 18h54
  3. Réponses: 9
    Dernier message: 02/10/2010, 12h43
  4. Optimisation d'un bout de code
    Par Lost in dans le forum MATLAB
    Réponses: 3
    Dernier message: 29/04/2008, 22h58

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