[VBA] Optimisation de code

Optimisation de code [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 07-09-2012 à 15:53:38    

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 :
  1. Public Sub FindManagementPFS()
  2. Dim Trouve As Range
  3. Dim Adresse1 As String
  4. Dim domaine As String
  5. Dim ColonneCopie As Range
  6. Dim MaLigne As Variant
  7. Dim MaPlage As Range
  8. Dim LaPlage As Range
  9.     'On sélectionne la colonne domaine de la phase ciblée
  10.     Set MaPlage = Range("PlageDomainePFS" )
  11.     'On sélectionne le domaine recherché
  12.     domaine = "Management"
  13.     'On associe le fait de trouver le domaine recherché à une variable
  14.     Set Trouve = MaPlage.Find(domaine)
  15.     'On initialise le compteur qui nous permettra d'insérer les lignes au bon endroit
  16.     ComptMan = 0
  17.    
  18.     If Not Trouve Is Nothing Then
  19.         Adresse1 = Trouve.Address
  20.         Do
  21.             'On sélectionne l'onglet source
  22.             With Sheets("DS PFS" )
  23.                 'On sélecionne les 3 cellules que l'on veut copier
  24.                 Set LaPlage = Application.Union(Cells(Trouve.Row, 3), Cells(Trouve.Row, 4), Cells(Trouve.Row, 6), Cells(Trouve.Row, 7))
  25.                 Range(LaPlage.Address).Copy
  26.             End With
  27.             'On sélectionne l'onglet de destination
  28.            
  29.             With Sheets("DS PFS-FS-DEF-C0-C1-C2-D" ).Range("PlageManMulti" )
  30.             'Sheets("DS PFS-FS-DEF-C0-C1-C2-D" ).Select
  31.                 MaLigne = .Address
  32.                 MaLigne = Range(MaLigne).Row
  33.                 'On décale la sélection
  34.             End With
  35.            
  36.             Sheets("DS PFS-FS-DEF-C0-C1-C2-D" ).Select
  37.             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
  38.      
  39.            
  40.             ActiveSheet.Paste
  41.             'On coche la phase où se déroule la tâche
  42.             Sheets("DS PFS-FS-DEF-C0-C1-C2-D" ).Cells(MaLigne + ComptMan, 7).Value = "x"
  43.                
  44.             'On boucle pour supprimer les doublons lorsque l'on réexécute le programme
  45.             While Sheets("DS PFS-FS-DEF-C0-C1-C2-D" ).Cells(MaLigne + ComptMan + 1, 3).Value <> "arc"
  46.                 Sheets("DS PFS-FS-DEF-C0-C1-C2-D" ).Rows(MaLigne + ComptMan + 1).Delete
  47.             Wend
  48.            
  49.             'On ajoute une ligne où sera copier la tâche suivante
  50.             Sheets("DS PFS-FS-DEF-C0-C1-C2-D" ).Cells(MaLigne + ComptMan + 1, 3).EntireRow.Insert Shift:=xlUp
  51.             ComptMan = ComptMan + 1
  52.             Set Trouve = MaPlage.FindNext(Trouve)
  53.         Loop While StrComp(Adresse1, Trouve.Address) <> 0
  54.     End If
  55.    
  56. End Sub


Message édité par bat001 le 07-09-2012 à 15:56:16
Reply

Marsh Posté le 07-09-2012 à 15:53:38   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed