bat001 | 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 :
- 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
|
Message édité par bat001 le 07-09-2012 à 15:56:16
|