[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:
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 |