Problème lenteur macro

joelpelle

XLDnaute Junior
Bonjour à tous,

Grâce à l'aide du Forum, j'ai pu réaliser une macro afin de copier des colonnes, les regrouper en une seule, puis faire un tri sur cette colonne.

Vous la trouverez dans le fichier joint allégé, et ci-dessous (soyez indulgents, je débute!)

Sub Transfert()
Dim Col%, tc, ligne&, m&, n&
tc = Array(3, 6, 9)
Range("A1:A5000").ClearContents
ligne = 1
For n = 0 To UBound(tc)
Col = tc(n)
For m = 1 To Cells(5000, Col).End(xlUp).Row
If Cells(m, Col) <> 0 Then
Cells(ligne, 1) = Cells(m, Col)
ligne = ligne + 1
End If
Next m
Next n
Columns("A:A").Select
ActiveWorkbook.Worksheets("Plan").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Plan").Sort.SortFields.Add Key:=Range("A1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Plan").Sort
.SetRange Range("A1:A500")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub



J'ai un soucis de rapidité.
En effet, mon fichier final, comporte plus de trente colonne et 1200 lignes.
Alors ça rame un peu.

Je pense que c'est du à ma macro qui fonctionne mais rame, et qu'il doit y avoir un moyen d'accélérer tout ça, mais je sêche !

Merci de m'apporter vos lumières.

Cordialement

Joël
 

Pièces jointes

  • Exemple codes2.zip
    45.2 KB · Affichages: 19

joelpelle

XLDnaute Junior
Re : Problème lenteur macro

Bonjour Mercant46, bonjour le fil,

Je gagne du temps sur mon fichier, mais ça rame toujours dans le fichier originel.

Il faut que je trouve une astuce pour repérer et ne copier que les cellules calculées qui affichent un résultat dans les colonnes, parce que je pense que la macro teste tous les champs calculés et que c'est ça qui ralenti le tout.

Je continue à chercher donc, et merci à tous ceux qui m'apporteront leur aide.

Cordialement

Joël
 

smotty

XLDnaute Occasionnel
Re : Problème lenteur macro

Bonjour à tous,

essaie ce code, car la problème de ton code c'est que tu teste cellule par cellule.
PHP:
Dim Col%, tc, ligne&, m&, n&
    Dim champs As Range
    Dim C As Range
    Dim T()
    Dim a, x As Long
    
    
    tc = Array(3, 6, 9)
    Range("A:A").ClearContents
    a = -1
    For n = 0 To UBound(tc)
        
        Col = Val(tc(n))
        
        Set champs = Range(Cells(3, Col), Cells(5000, Col))
        Set C = champs.Find("?", , xlValues)
        If Not C Is Nothing Then
            adrdeb = C.Address
            Do
                a = a + 1
                ReDim Preserve T(a)
                T(a) = C.Value
                Debug.Print C.Value
                Set C = champs.FindNext(C)
            Loop While Not C Is Nothing And C.Address <> adrdeb
        End If
    Next n
    application.screenupdating=false
    Range("A:A").Clear
    For x = 0 To a
        Range("A" & x + 1) = T(x)
    Next x
application.screenupdating=true

En espérant que ça t'aidera

smotty
 

joelpelle

XLDnaute Junior
Re : Problème lenteur macro

Bonsoir Smottty, bonsoir le Forum,

Je te remercie pour ton intervention Smotty, et avant de répondre, j'ai testé.

Si la macro ne renvoie pas d'erreur, en revanche, rien ne se passe :confused:

Je dois dire que je sèche là !

Par ailleurs, j'ai amélioré nettement la rapidité de ma première macro en désactivant et réactivant le calcul automatique avec Application.Calculation = xlManual vu que j'ai beaucoup de champs calculés.

Néanmoins, j'aimerais bien comprendre pourquoi ta macro ne fonctionne pas ?!

Passe une excellente soirée.

Cordialement

Joël
 
Dernière édition:

smotty

XLDnaute Occasionnel
Re : Problème lenteur macro

Bonsoir Joel,

voici le fichier avec la macro. Je l'ai testée et ça fonctionne.

L'avantage c'est que ça ne teste pas les cellules une par une (1500 cellules!)


bonne soirée également

Eric
 

Pièces jointes

  • Exemple codes3.zip
    43.4 KB · Affichages: 19
Dernière édition:

joelpelle

XLDnaute Junior
Re : Problème lenteur macro

Bonsoir Smotty,

Ca fonctionne nickel.:cool:

Néanmoins dans mon fichier qui pèse 7 MO (nettoyé) et comporte plus de 25 000 champs, :D je dois d'abord me mettre en calcul manuel en lançant la macro.

C'est donc exactement ce que je souhaitais.:)

Je te remercie infiniment pour ton aide. :rolleyes:

Toujours aussi sympa ce Forum.

Bon week-end

Cordialement

Joël
 

Discussions similaires

Réponses
3
Affichages
626
Réponses
11
Affichages
491

Statistiques des forums

Discussions
312 520
Messages
2 089 297
Membres
104 092
dernier inscrit
karbone57