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 SubBonjour 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
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 !!