2 votes

Aide Macro : Trouver une solution de remplacement pour Cut et Delete for Speed

Je cherche un moyen de contourner l'utilisation des commandes

.supprimer

.coupe

Dans mes macros Excel. Je constate que ces processus ralentissent considérablement la procédure (jusqu'à 20 minutes) pour le plus de données qu'il faut couper, coller et supprimer. De plus, ces processus semblent désactiver les mises à jour de ma barre d'état dans la macro.

J'utilise ces commandes pour déplacer une ligne (de la 1ère colonne à la 374ème colonne) de données dans une autre feuille de calcul si elle répond à un certain critère.

Voici le processus de macro que j'utilise avec ces commandes : Les principales lignes de préoccupation que j'ai sont avec 350, 353 et 357

328      j = 0
329      FinalRowMF = Worksheets("Main Frame").Cells(Rows.Count, 8).End(xlUp).Row
330      FinalRowAr = Worksheets("Archive").Cells(Rows.Count, 8).End(xlUp).Row

331      For k = 7 To FinalRowMF
332          Application.StatusBar = "Ignore = " & Ignore & "                    Current File " & ImportDate - FirstDateImport + 1 & " of " & LastDateImport - FirstDateImport + 1 & " = " & fileName & "                    Loop k = " & k - 6 & " of " & FinalRowMF - 6
333          If Worksheets("Main Frame").Cells(k, 6).Value = "" Then
334              j = j + 1
335          End If
336      Next k
337      Worksheets("Archive").Activate
338      If j = 0 Then
339      Worksheets("Archive").Range(Cells(7, 9 + DaysOffset), Cells(FinalRowAr, 9 + DaysOffset)).Interior.ThemeColor = xlThemeColorAccent4
    GoTo NoInactives:
340      End If
341      ActiveWindow.ScrollColumn = DaysOffset
342      Worksheets("Archive").ListObjects("Table24").Resize Range("$F$6:NJ" & FinalRowAr + j)
343      With Worksheets("Archive").Range("$I$" & FinalRowAr + 1 & ":NJ" & FinalRowAr + j).Interior
344                                                                                      .Pattern = xlNone
345                                                                                      .TintAndShade = 0
346                                                                                      .PatternTintAndShade = 0
347      End With

348      m = j
349      For n = 7 To FinalRowMF - j
350      Application.StatusBar = "Ignore = " & Ignore & "                    Current File " & ImportDate - FirstDateImport + 1 & " of " & LastDateImport - FirstDateImport + 1 & " = " & fileName & "          Finding and Moving ID " & j - m + 1 & " of " & j & "                    Loop n = " & n - 6 & " of " & FinalRowMF - 6
351          If Worksheets("Main Frame").Cells(n, 6).Value = "" Then
352              FinalRowAr = Worksheets("Archive").Cells(Rows.Count, 8).End(xlUp).Row
353              Worksheets("Main Frame").Rows(n).Cut Destination:=Worksheets("Archive").Range(Cells(FinalRowAr + 1 - m, 1), Cells(FinalRowAr + 1 - m, 374))
354              Worksheets("Archive").Range(Cells(FinalRowAr + 1 - m, 1), Cells(FinalRowAr + 1 - m, 374)).Borders(xlEdgeTop).LineStyle = xlNone
355              Worksheets("Archive").Cells(FinalRowAr + 1 - m, 8).Borders(xlEdgeTop).ThemeColor = 1
356              Worksheets("Archive").Cells(FinalRowAr + 1 - m, 8).Borders(xlEdgeTop).TintAndShade = -0.249977111117893
357              Worksheets("Main Frame").Rows(n).Delete Shift:=xlUp
358              If m = 0 Then
359              Else
360              n = n - 1
361              m = m - 1
362              End If
363          End If
        If m = 0 Then GoTo LastReplaced:
364      Next n

LastReplaced:

365      Application.StatusBar = "Ignore = " & Ignore & "                    Current File " & ImportDate - FirstDateImport + 1 & " of " & LastDateImport - FirstDateImport + 1 & " = " & fileName & "                    Loop k Counter Result j = " & j
366      Worksheets("Archive").Range(Cells(7, 9 + DaysOffset + 1), Cells(FinalRowAr, 9 + DaysOffset + 1)).Interior.ThemeColor = xlThemeColorAccent4
367      ArDateChange = ImportDate - 1
368      ArSort = True
    GoTo SetMonth:

ArSort:

369      With ActiveWorkbook.Worksheets("Archive").ListObjects("Table24").Sort
370              .SortFields.Clear
371              .SortFields.Add(Range("Table24[[#All],[" & DayValue & " - " & MonthName & "]]"), xlSortOnCellColor, xlAscending, xlSortNormal).SortOnValue.ColorIndex = xlNone
372                  .Header = xlYes
373                  .MatchCase = False
374                  .Orientation = xlTopToBottom
375                  .SortMethod = xlPinYin
376                  .Apply
377              .SortFields.Clear
378              .SortFields.Add(Range("Table24[[#All],[" & DayValue & " - " & MonthName & "]]"), xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = 65535
379                  .Header = xlYes
380                  .MatchCase = False
381                  .Orientation = xlTopToBottom
382                  .SortMethod = xlPinYin
383              .SortFields.Clear
384              .SortFields.Add(Range("Table24[[#All],[" & DayValue & " - " & MonthName & "]]"), xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = 49407
385                  .Header = xlYes
386                  .MatchCase = False
387                  .Orientation = xlTopToBottom
388                  .SortMethod = xlPinYin
389                  .Apply
390              .SortFields.Clear
391              .SortFields.Add(Range("Table24[[#All],[" & DayValue & " - " & MonthName & "]]"), xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = 230
392                  .Header = xlYes
393                  .MatchCase = False
394                  .Orientation = xlTopToBottom
395                  .SortMethod = xlPinYin
396                  .Apply
397              .SortFields.Clear
398              .SortFields.Add(Range("Table24[[#All],[" & DayValue & " - " & MonthName & "]]"), xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color = 16711935
399                  .Header = xlYes
400                  .MatchCase = False
401                  .Orientation = xlTopToBottom
402                  .SortMethod = xlPinYin
403                  .Apply
404              .SortFields.Clear
405      End With

NoInactives:

PS Si quelqu'un sait aussi comment raccourcir le tri, ce serait formidable.

3voto

Lance Roberts Points 8483

En général, le moyen le plus rapide de transférer des données est l'affectation :

Sheets("Sheet2").Range("A1:C10").Formula =  
  Sheets("Sheet1").Range("A1:C10").Formula
Sheets("Sheet2").Range("A1:C10").Interior.Color =  
  Sheets("Sheet1").Range("A1:C10").Interior.Color

Notez que vous n'avez pas besoin d'affecter des valeurs, si vous affectez la formule.

Je ne vois pas comment vous allez sortir de .delete .

En fin de compte, il peut être plus simple de remanier votre feuille de calcul de manière à ce que l'option .delete n'a pas besoin de se produire.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X