Macro rame, mais une fois finie! ^^ ??

Résolu
BIOoOAG123 - 10 avril 2013 à 16:46
 BIOoOAG123 - 11 avril 2013 à 11:43
Bonjour, j'ai une macro qui fonctionne très bien, mais un fois la dernière commande effectuée, ça rame sévère. Je comprend pas pour le coup!


Private Sub btnValiderAnalyse_Click()
Dim NbLigneBDDDe As Integer
Dim NbLigneBDDDeAn As Integer
Dim NbLigneMAJ As Integer
Dim NbColonneBDDDeAn As Byte
Dim Somme As Long
Dim Moyenne As Long




NbColonneBDDDeAn = Sheets(6).Cells(2, Columns.Count).End(xlToLeft).Column

Sheets(6).Range("A3:AA500").clear
NbLigneBDDDe = Sheets(5).Cells(15000, 1).End(xlUp).Row


'************Recherche des info client**************************************
For i = 2 To NbLigneBDDDe Step 1
    If ComboBox1.Value = Sheets(5).Cells(i, 1).Value Then
        Worksheets(6).Rows(3).Insert
        With Sheets(5)
        .Activate
        .Range("A" & i & ":D" & i).Copy Destination:=Worksheets(6).Range("B3:E3")
        .Range("E" & i).Copy Destination:=Worksheets(6).Range("G3")
        .Range("F" & i & ":G" & i).Copy Destination:=Worksheets(6).Range("I3:J3")
        End With
    
    End If
Next

Sheets(6).Activate
'***********Calcul % d'évolution********************************************
NbLigneBDDDeAn = Sheets(6).Cells(300, 2).End(xlUp).Row
For i = 3 To NbLigneBDDDeAn Step 1

    If Sheets(6).Range("E" & i) 0 Or Sheets(6).Range("D" & i) 0 Then
    GoTo Suivant
    End If
    
    Worksheets(6).Range("F" & i).Value = ((Sheets(6).Range("E" & i).Value - Sheets(6).Range("D" & i).Value) / Sheets(6).Range("D" & i).Value)
Suivant:



'*********Mise en page******************************************************
Worksheets(6).Range("F" & i).NumberFormat = "#0.0 %"

Next


With Sheets(6).Range("B3:AA" & NbLigneBDDDeAn)
            .RowHeight = 17
            .Interior.ColorIndex = xlColorIndexNone
            .Font.Bold = False
            .Font.Size = 12
End With


Ps il n'y a pas la fin du code mais ça fait la même chose rien qu'avec ça..
Si quelque à déjà eu ce problème. Jme demande si c'est pas la variable du ComboBox qui se "décharge" à la fin(ou rien à voir! :) )?

11 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 avril 2013 à 18:06
Bonjour,
1) et ton autres discussion ? quelle suite lui-as-tu donnée ?
2) inhibe donc l'affichage au début et rétablis-le ensuite (ouvrir ton aide VBA sur le mot ScreenUpdating).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
3
Pardon j'ai oublié à la fin il y à juste un :

Unload Me
Exit sub
0
Utilisateur anonyme
10 avril 2013 à 18:37
Bonjour,

Et pourquoi ce machin-là ?

If Sheets(6).Range("E" & i) 0 Or Sheets(6).Range("D" & i) 0 Then
    GoTo Suivant
End If


Ouvre ton aide au plus sacrant et regarde ce qu'ils disent pour IF. Il y a moyen pas mal plus intelligent (Else) d'utiliser un IF pour effectuer, ou ne pas effectuer, une opération quand une condition est, ou n'est pas, vérifiée.
0
L'autre discution, je dois le finir aujourd'hui, mais il y avait ça de plus urgent! :)

Pour le GoTo suivant c'est pour que s'il me trouve 0 il ne me calcule pas le % (que ça aille plus vite) A moins qu'il y ai une autre méthode plus simple sans GoTo ou plus rapide ?

Du style (j'avais testé ça marche po mais un code dans le genre)
For i = 2 to 5 step 1
If ..... Then
Next 
Else 
instruction
End if
Next
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ps :
Merci pour la réponse, je vais essayer de voir le "ScreenUpdating"
0
ça marche vraiment bien le ScreenUpdating ça a divisé le temps d'exécution par 3! :) Il y a-t-il d'autres méthodes comme celle-ci pour améliorer la vitesse d'exécution des macros?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 avril 2013 à 09:38
Pour le GoTo suivant c'est pour que s'il me trouve 0 il ne me calcule pas le % (que ça aille plus vite) A moins qu'il y ai une autre méthode plus simple sans GoTo ou plus rapide ?

Enlève donc ton Goto et mets ton End If juste avant le Next, pardi !
Cela n'ira pas plus vite, mais sera nettement plus orthodoxe
Il y a-t-il d'autres méthodes comme celle-ci pour améliorer la vitesse d'exécution des macros?

Tout dépend du cas, cas par cas !
¨pur ta deuxième boucle For, par exemple : je serais personnellement passé par un tableau dynamique plutôt que de travailler directement syur les cellules lues.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Ca améliorer bien toutes mes macro :), mais je reviens sur ce que je viens de dire, en fait la macro rame(20 seconde tout de même) lorsqu'elle rencontre le End Sub?
C'est pas une histoire de cache ou un truc dans le genre?

Ps : je ne me suis pas penché sur les Array encore. (je vais y penser)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 avril 2013 à 10:39
20 seconde tout de même

Les mises en forme sont toujours très gourmandes dans Excel. On ne doit pas en abuser.
Ce n'est pas VBA, qui est lent, mais bel et bien Excel lui-même.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Euuu je comprends pas, tout seul il a accéléré et j'ai plus ce problème à la fin.. Oo
Vraiment bizarre!
0
Bon en fait c'est cette partie qui me fait ramer. Je ne sais pas ou.
Sacahnt que NbLigneBDDDe est égal à 5500 environ, il y a moyen d'optimiser ce code?



Private Sub btnValiderAnalyse_Click()
Dim Valeur As String
Dim NbLigneBDDDe As Integer



Application.ScreenUpdating = False



NbLigneBDDDe = Worksheets(5).Cells(10000, 2).End(xlUp).Row



Worksheets(6).Range("A3:Z500").clear
Valeur = ComboBox1.Value

For i = 3 To NbLigneBDDDe Step 1
    If Worksheets(5).Range("B" & i).Value = Valeur Then
    Worksheets(6).Rows(3).Insert
    With Worksheets(5)
    .Activate
    .Range("A" & i & ":D" & i).Copy Destination:=Worksheets(6).Range("B3:E3")
    .Range("E" & i).Copy Destination:=Worksheets(6).Range("G3")
    .Range("F" & i & ":G" & i).Copy Destination:=Worksheets(6).Range("I3:J3")
    End With
    End If
Next
Unload Me

'*************Filtres*******************************************************
P5_ChoixDates.Show



Application.ScreenUpdating = True
Application.CutCopyMode = False


End Sub


Dsl mais je galère un peu
0
Rejoignez-nous