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 :

[VBA] Optimisation de code [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Par défaut [VBA] Optimisation de code
    Bonjour,
    Je suis novice en VBA, mais j'ai des bases en programmation.
    Pour la mise en contexte, je souhaite prendre des données d'un onglet, et les transférer dans un autre onglet tout en les réorganisant.
    J'ai créé une macro qui scan dans une plage voulu les données à copier, puis qui copie les cellules sélectionnées dans l'autre onglet.
    De plus, lorsque je réexécute le code, les données ayant été déplacé lors de la première exécution sont toujours présentent, et celle de l'exécution actuelle s'y rajoute... je dois donc supprimer les données une par une avant chaque exécution.

    Le problème que j'ai est que lorsque j'exécute le code, le temps d'exécution est d'au moins 30secondes...
    Est ce que il y aurait moyen d'optimiser mon code pour gagner en temps d'exécution ???

    Je ne sais pas si j'ai été bien claire, mais si quelqu'un arrive à me répondre merci d'avance !!!

    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
     
    Public Sub FindManagementPFS()
     
    Dim Trouve As Range
    Dim Adresse1 As String
    Dim domaine As String
    Dim ColonneCopie As Range
    Dim MaLigne As Variant
    Dim MaPlage As Range
    Dim LaPlage As Range
     
        'On sélectionne la colonne domaine de la phase ciblée
        Set MaPlage = Range("PlageDomainePFS")
        'On sélectionne le domaine recherché
        domaine = "Management"
        'On associe le fait de trouver le domaine recherché à une variable
        Set Trouve = MaPlage.Find(domaine)
        'On initialise le compteur qui nous permettra d'insérer les lignes au bon endroit
        ComptMan = 0
     
        If Not Trouve Is Nothing Then
            Adresse1 = Trouve.Address
            Do
                'On sélectionne l'onglet source
                With Sheets("DS PFS")
                    'On sélecionne les 3 cellules que l'on veut copier
                    Set LaPlage = Application.Union(Cells(Trouve.Row, 3), Cells(Trouve.Row, 4), Cells(Trouve.Row, 6), Cells(Trouve.Row, 7))
                    Range(LaPlage.Address).Copy
                End With
                'On sélectionne l'onglet de destination
     
                With Sheets("DS PFS-FS-DEF-C0-C1-C2-D").Range("PlageManMulti")
                'Sheets("DS PFS-FS-DEF-C0-C1-C2-D").Select
                    MaLigne = .Address
                    MaLigne = Range(MaLigne).Row
                    'On décale la sélection
                End With
     
                Sheets("DS PFS-FS-DEF-C0-C1-C2-D").Select
                Sheets("DS PFS-FS-DEF-C0-C1-C2-D").Range("PlageManMulti").Offset(ComptMan).Select 'offset à incrémenter selon le nombre de passage ds la boucle
     
     
                ActiveSheet.Paste
                'On coche la phase où se déroule la tâche
                Sheets("DS PFS-FS-DEF-C0-C1-C2-D").Cells(MaLigne + ComptMan, 7).Value = "x"
     
                'On boucle pour supprimer les doublons lorsque l'on réexécute le programme
                While Sheets("DS PFS-FS-DEF-C0-C1-C2-D").Cells(MaLigne + ComptMan + 1, 3).Value <> "arc"
                    Sheets("DS PFS-FS-DEF-C0-C1-C2-D").Rows(MaLigne + ComptMan + 1).Delete
                Wend
     
                'On ajoute une ligne où sera copier la tâche suivante
                Sheets("DS PFS-FS-DEF-C0-C1-C2-D").Cells(MaLigne + ComptMan + 1, 3).EntireRow.Insert Shift:=xlUp
                ComptMan = ComptMan + 1
                Set Trouve = MaPlage.FindNext(Trouve)
            Loop While StrComp(Adresse1, Trouve.Address) <> 0
        End If
     
    End Sub

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Par défaut
    Bonjour à tous.

    D'abord, pour diminuer le temps d'exécution, placer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpDating=False
    juste après la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not Trouve Is Nothing Then
    puis mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpDating=True
    juste avant
    Cordialement.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 2
    Par défaut
    Bon béh problème de temps d'exécution résolu !!!
    Un grand merci

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

Discussions similaires

  1. VBA Optimisation de code, Select Case et requete SQL
    Par Secco dans le forum VBA Access
    Réponses: 7
    Dernier message: 06/05/2008, 21h05
  2. Optimisation de code VBA
    Par MartinezGarcia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/02/2008, 13h11
  3. Réponses: 13
    Dernier message: 20/04/2006, 15h37
  4. [VBA] [Word] processmessage et optimisation de code
    Par Stef.web dans le forum VBA Word
    Réponses: 2
    Dernier message: 14/12/2005, 19h18

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