Rendre code plus rapide question générique

Bonsoir :)

J'ai commencé à évoluer depuis quelques semaines et je m'en sors pas mal disons... j'aimerais toutefois comprendre comment accélérer mes codes qui mettent des trentaines de seconde parfois pour fonctionner !!! J'ai lu qu'il faut mettre Aplication.Calculation=....manuel puis la remettre Application.Calculation=....automatique OK mais est ce que cette manœuvre se fait sur toute la sub ou uniquement avant et après une boucle dans la sub ?

Hello,

Généralement j'utilise ca pour optimiser mon code :

Sub test()

Application.Screenupdating = False
Application.Calculation = Xlmanual
'
'
'ton code
'
'
Application.screenupdating = True
Application.Calculation = XlAutomatic

End sub

Comme tu l'as mentionné, cela sera actif à partir du moment ou tu le mets en places dans ton code et ça se désactivera quand tu diras dans le code que tu le réactives, tu peux l'utiliser plusieurs fois dans ton code c'est pas dérangeant. C'est comme un interrupteur, tu l'éteins et après tu le rallumes. Si tu veux l'allumer plusieurs fois et l'éteindre plusieurs fois entre temps tu peux aussi c'est pas interdit :)

J'espère que je suis clair ;)

@+

Justement quand je le place au tout début et à la fin d code j'ai un user userform vide qui s'affiche... c'est pourquoi j'ai songé et proposé à le placer seulement là où ily à une boucle ... dans ce cas je vais alors essayer de le mettre plusieurs fois à dives endroits et je reviens vous dire le résultat :)

Bah non ça met 15 ou 17 secondes pour se faire !! Voici en fait le code :

Private Sub CommandButton2_Click()

Sheets("Formulaire").Cells(18, 3) = TextBox3

With Sheets("For")
Sheets("Formulaire").Range("B21:G41").Copy
Sheets("For").Cells(1, 2).PasteSpecial Paste:=xlPasteValues
End With

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

'Trie 
Range("A1:G21").Select
    ActiveWorkbook.Worksheets("For").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("For").Sort.SortFields.Add Key:=Range("A1:A21"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("For").Sort
        .SetRange Range("A1:G21")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
End With

'Insertion de lignes vides pour une meilleure présentation sur la listBox du userform
Dim sh As Worksheet
 Dim i As Integer
 'bon on va travailler sur la feuille
 'active au moment du lancement
 Set sh = Sheets("For")
 i = 2
 While sh.Cells(i, 1) <> ""
  If sh.Cells(i - 1, 1) <> sh.Cells(i, 1) Then
    sh.Cells(i, 1).EntireRow.Insert Shift:=xlShiftDown
    i = i + 1
  End If
 i = i + 1
 Wend

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

'Là c'est une copie du trie avec insertions dans un autre feuillet pour facilité de manoeuvre (Rowsource du Listbox)

With Sheets("Formulaire")
Sheets("For").Range("A1:G30").Copy
Sheets("Formulaire").Cells(21, 20).PasteSpecial Paste:=xlPasteValues
End With

Dim LastRw As Long
With Sheets("Formulaire")
LastRw = Sheets("Formulaire").Cells(Rows.Count, 10).End(xlUp).Row
Sheets("Formulaire").Range("J22:O" & LastRw).FillDown
End With

UserForm2.Show

End Sub

Il y a des copie/Coller ok met je pense que c le trie et l'insertion de lignes vides qui ralentissent le code ...

Si y des conseils je serais preneur

Merci :)

bonjour,

vous voulez faire quoi dans cette macro ? Il y a quoi dans la plage A1:A20 de "For" ?

Surtout, il faut minimaliser les interactions avec la feuille, cela coût du temps, faire tout en mémoire.

en fait ce que j'ai copié dans la feuille "formulaire" qui est Range("B21:G41").Copy je l'ai collé dans une autre feuille que j'ai appelé "For" pour effectuer mon trie et insertion de lignes vides librement. C'est comme du bricolage.

puis le résultat que j'ai après tri et insertion dans la feuille de bricolage "For" je le copie et colle de nouveau dans une autre plage dans "Formlaire" qui sera l'origine de ma listbox.

Je ne vois pas comment utiliser et déclarer des tableaux en mémoire. J'ai lu le cours vba du site traitant de ce sujet, que j'ai un peu compris, mais je ne vois pas comment l'appliquer à mon cas ...

Voici la plage excel pour laquelle je voudrais faire un tableau VBA miroir et y faire le trie suivant N° Compte : [B21:G30]

exemple2

C'est possible de m'aider s'il vous plait ?

Merci

Rechercher des sujets similaires à "rendre code rapide question generique"