VBA - macro très lente sur certains onglets

Bonjour,

Je suis actuellement en train de construire un outil de suivi de gains pour différents projets.

Dans ce cadre, j'ai créé un tableau de suivi regroupant divers objectifs et projets associés.

J'essaie d'automatiser l'ajout de projets et d'actions associé afin de normaliser le tout.

J'ai donc créé une procédure sur VBA permettant de parcourir un tableau et de mettre à jour une liste de projets sur un onglet différent (code ci-dessous). Cette procédure fonctionne plutôt bien lorsque je suis sur ce nouvel onglet (nommé "listes projets").

Mais lorsque j'essaie de mettre un bouton activant cette procédure sur l'onglet contenant le tableau de suivi (nommé "Axe 1"), celle-ci met plusieurs secondes (une dizaine) pour s'éxécuter, contre a peine une demi-seconde lorsque je suis sur l'onglet "listes projets". Excel passe d'ailleurs même en mode "Excel ne répond pas" pendant une à deux secondes.

Avez-vous une idée de la raison et d'une manière d'optimiser cette macro?

Mille mercis d'avance

Code :

Public Sub majlisteprojets()

Dim L, i, j As Integer, table1(1) As Variant

Dim numprojet, nomprojet As String

Worksheets("listes projets").Range("B4:C20").ClearContents

j = 1

L = Worksheets("Axe 1").Range("C" & Rows.Count).End(xlUp).Row

For i = 1 To L

If Worksheets("Axe 1").Range("E" & (5 + i)).Value = "Projet" Then

numprojet = CStr(Worksheets("Axe 1").Range("C" & (5 + i)))

nomprojet = CStr(Worksheets("Axe 1").Range("F" & (5 + i)))

Worksheets("listes projets").Cells(3 + j, 2) = numprojet

Worksheets("listes projets").Cells(3 + j, 3) = nomprojet

j = j + 1

End If

Next

End Sub

bonjour,

Ya pas de billets de groupe pour les déclarations : elles se font individuellement :

Public Sub majlisteprojets()
Dim i As Integer, j As Integer
Dim numprojet As String, nomprojet As String
Dim WsA As Worksheet, WsL As Worksheet
Set WsA = Worksheets("Axe 1")
Set WsL = Worksheets("listes projets")
WsL.Range("B4:C20").ClearContents
j = 1
For i = 1 To WsA.Range("C" & Rows.Count).End(xlUp).Row
   If WsA.Range("E" & (5 + i)).Value = "Projet" Then
      numprojet = CStr(WsA.Range("C" & (5 + i)))
      nomprojet = CStr(WsA.Range("F" & (5 + i)))
      WsL.Cells(3 + j, 2) = numprojet
      WsL.Cells(3 + j, 3) = nomprojet
      j = j + 1
   End If
Next
End Sub

Bonjour Ldep, bonjour le forum,

Attention, tu peux déclarer plusieurs variables sur la même ligne mais il te faux spécifier le type de chacune d'entre elles. Essaie comme ça :

Public Sub majlisteprojets()
Dim OS As Worksheet, OD As Worksheet
Dim L As Integer, i As Integer, j As Integer, TV As Variant

Set OS = Worksheets("Axe 1")
Set OD = Worksheets("listes projets")
OD.Range("B4:C20").ClearContents
L = OS.Range("C" & Rows.Count).End(xlUp).Row
TV = OS.Range("A1:F" & L)
j = 1
For i = 1 To UBound(TV, 1)
    If TV(i + 5, 5) = "Projet" Then
        Worksheets("listes projets").Cells(3 + j, 2) = TV(i + 5, 3)
        Worksheets("listes projets").Cells(3 + j, 3) = TV(i + 5, 6)
        j = j + 1
    End If
Next i
End Sub

[Édition]

Bonjour Galopin nos posts se sont croisés...

Merci à vous pour cette précision Je vais essayer.

Il y a un intérêt particulier à déclarer le nom des Worksheets ?

J'en profite pour poser une autre question, je ne sais pas si comme ça vous aurez la réponse :

Je manipule donc des tableaux (pour le moment de l'ordre d'une vingtaine de lignes, pas plus), et ceux-ci sont sources de beaucoup de lenteur dans mon fichier... Dès que j'insère une ligne à la main par exemple, Excel monte tout de suite a 30% d'utilisation du processeur, et ce pendant un moment (20-30 secondes je dirais).

C'est assez handicapant, surtout quand mes tableaux sont toujours relativement petits pour le moment...

Avez-vous une idée d'où ça peut provenir ?

Merci d'avance !!

Rechercher des sujets similaires à "vba macro tres lente certains onglets"