Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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:
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..)
 
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
@+
 
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

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
 
Re : [VBA] Possibilité d'accélérer copie de lignes?


Il me dit erreur 'utilisation incorrecte de la propriété' sur Autofilter
 
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...
 
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....
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
477
Réponses
7
Affichages
702
Réponses
4
Affichages
645
Réponses
7
Affichages
880
Réponses
33
Affichages
3 K
Réponses
8
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…