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