[VBA] [RÉSOLU] Possibilité d'accélérer copie de lignes?

skye.in.sky

XLDnaute Nouveau
Bonjour tout le monde!
Suite à mon sujet résolu (cf. https://www.excel-downloads.com/threads/resolu-code-ne-fonctionne-pas-avec-fichier-partage.209238/)

J'essaye d’accélérer mon code de copie de lignes non vide de plusieurs feuilles et de les copier dans la feuille "Consolidation"

Code:
     t = Timer()
   For Each ws In Worksheets
      If ws.Name <> "Consolidation" And ws.Name <> "Graphs" Or ws.Name <> "listes" And _
      ws.Name <> "DroitsUsers" And ws.Name <> "Vierge" Then
         For i = 3 To ws.Range("A65000").End(xlUp).Row
             If ws.Cells(i, 13) <> "" Then ws.Rows(i).Copy Destination:=Sheets("Consolidation").Range("A65000").End(xlUp).Offset(1, 0)
         Next i
      End If
   Next ws
  
      MsgBox Timer() - t

Mon timer affiche au dessus de 65sec. Serait ce à cause des feuilles exceptions qu'Excel rallonge ?
Je mettais près d'1 sec avec 6/7 feuilles j'en ai aujourd'hui 13.

Si quelqu'un à une idée, je suis prenante.

Merci d'avance,
Jennifer
 
Dernière édition:

skye.in.sky

XLDnaute Nouveau
Re : [VBA] Possibilité d'accélérer copie de lignes?

ça n'a pas beaucoup de changement de le remttre en =true.

Peut être légérement.
Aurait-il pas une autre façon de copier les feuilles?
Sachant aussi que je serais en fichier partagé donc .selection interdit..
(oui je cherche compliqué je sais..)
 

Pierrot93

XLDnaute Barbatruc
Re : [VBA] Possibilité d'accélérer copie de lignes?

Bonjour,

si formules et procédures événementielles dans le classeur, tu peux utiliser ceci :
Code:
With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
End With
'ton code
With Application
    .Calculation = xlCalculationAutomatic
    .EnableEvents = True
    .ScreenUpdating = True
End With

bon après midi
@+
 

skye.in.sky

XLDnaute Nouveau
Re : [VBA] Possibilité d'accélérer copie de lignes?

Est ce que si je fais une copie seulement valeur dans l'onglet "consolidation" aiderait ?

Voici le fichier en PJ :)

ID : jennifer
MDP : pass
 

Pièces jointes

  • CONSOLIDATION_LONGUE.xlsm
    337.2 KB · Affichages: 98
  • CONSOLIDATION_LONGUE.xlsm
    337.2 KB · Affichages: 98
  • CONSOLIDATION_LONGUE.xlsm
    337.2 KB · Affichages: 99

Robert

XLDnaute Barbatruc
Repose en paix
Re : [VBA] Possibilité d'accélérer copie de lignes?

Bonjour le fil, bonjour le forum,

Peut-être comme ça (non testé) :
Code:
Sub Macro1()
Dim ws As Object
Dim dest As Range

t = Timer()
Application.ScreenUpdating = False
For Each ws In Worksheets
    Select Case ws.Name
        Case "Consolidation", "Graphs", "listes", "DroitsUsers", "Vierge"
        Case Else
            Set pl = ws.Range("A1").CurrentRegion
            Set pl = pl.Offset(2, 0).Resize(pl.Rows.Count - 2, pl.Columns.Count)
            ws.Range("A1").AutoFilter Field:=13, Criteria1:="<>"
            Set dest = Sheets("Consolidation").Range("A65000").End(xlUp).Offset(1, 0)
            pl.SpecialCells(xlCellTypeVisible).Copy dest
            ws.AutoFilter
    End Select
Next ws
Application.ScreenUpdating = True
MsgBox Timer() - t
End Sub
 

skye.in.sky

XLDnaute Nouveau
Re : [VBA] Possibilité d'accélérer copie de lignes?

Bonjour le fil, bonjour le forum,

Peut-être comme ça (non testé) :
Code:
Sub Macro1()
Dim ws As Object
Dim dest As Range

t = Timer()
Application.ScreenUpdating = False
For Each ws In Worksheets
    Select Case ws.Name
        Case "Consolidation", "Graphs", "listes", "DroitsUsers", "Vierge"
        Case Else
            Set pl = ws.Range("A1").CurrentRegion
            Set pl = pl.Offset(2, 0).Resize(pl.Rows.Count - 2, pl.Columns.Count)
            ws.Range("A1").AutoFilter Field:=13, Criteria1:="<>"
            Set dest = Sheets("Consolidation").Range("A65000").End(xlUp).Offset(1, 0)
            pl.SpecialCells(xlCellTypeVisible).Copy dest
            ws.AutoFilter
    End Select
Next ws
Application.ScreenUpdating = True
MsgBox Timer() - t
End Sub

Il me dit erreur 'utilisation incorrecte de la propriété' sur Autofilter
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : [VBA] Possibilité d'accélérer copie de lignes?

Bonjour le fil, bonjour le forum,

Je ne dispose chez moi que de la version Excel 2003 et je ne peux malheureusement pas modifier le code pour l'adapter à 2007. J'ai remplacé la boucle sur toutes les lignes par un filtre automatique des cellules non vides de la colonne M. Ensuite j'ai copié la plage visible dans dest. Essaie d'adapter à 2007, je pense que ça doit être un peu plus rapide que la boucle...
 

Pierrot93

XLDnaute Barbatruc
Re : [VBA] Possibilité d'accélérer copie de lignes?

Re, bonsoir Robert:)

Sous 2010, peut même pas accéder au projet vba de ton fichier.... est vérouillé.... ton bouton consolider me plante excel.... pas top non plus les fichiers protégés par mot de passe sur le forum....
 

Dranreb

XLDnaute Barbatruc
Re : [VBA] Possibilité d'accélérer copie de lignes?

Bonsoir à tous

Moi je proposerais bien de remplacer la petite boucle par quelque chose de ce genre :
VB:
ws.[M3:M65000].SpecialCells(xlCellTypeConstants, 23).EntireRow.Copy Destination:=Sheets("Consolidation").Range("A65000").End(xlUp).Offset(1, 0)
À tester.
 

Discussions similaires

Réponses
7
Affichages
312
Réponses
7
Affichages
319

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 810
dernier inscrit
mohammedaminelahbali