Macros sur certaines feuilles seulement
Bonjour à toutes et tous,
Tout d'abord, tous mes voeux et surtout la santé à l'équipe du forum !
J'ai un petit problème :
- Je souhaite récupérer des données provenant de 20 feuilles sur une feuille récapitulative à l'aide d'une macro.
- Mon classeur comprend plusieurs dizaines de feuilles.
Sub Récupération()
Dim i As Integer, Derlign As Integer
Application.ScreenUpdating = False
Derlign = 1
For i = ThisWorkbook.Worksheets.Count To 2 Step -1
Worksheets(i).Range("u6:ab6").Copy
Worksheets("Récupération").Range("b" & Derlign).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Worksheets(i).Range("dn6:dv6").Copy
Worksheets("Récupération").Range("k" & Derlign).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
'Saut de ligne'
Derlign = Derlign + 1
'Changement de page'
Next i
Range("A1:A55").Select
ActiveWorkbook.Worksheets("Récupération").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Récupération").Sort.SortFields.Add Key:=Range("A1" _
), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Récupération").Sort
.SetRange Range("A1:A55")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("a1:S55").Select
ActiveWorkbook.Worksheets("Récupération").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Récupération").Sort.SortFields.Add Key:=Range("A1" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Récupération").Sort
.SetRange Range("A1:S55")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End SubSimplement, avec mon code, je récupère également des données de feuilles que je ne souhaite pas et qui rend le traitement... extrêmement long !
Merci par avance de vos lumières !
Cordialement,
Bonjour Lachatovsky, bonjour le forum,
Une piste avec le code ci-dessous. Commence par créer un tableau (ici TF) avec les index des onglets que tu veux utiliser puis :
Sub Récupération()
Dim i As Integer, Derlign As Integer, TF As Variant, OS As Worksheet, OD As Worksheet
Application.ScreenUpdating = False
Set OD = Worksheets("Récupération")
TF = Array(1, 3, 4, 5, 6, 9, 15, 18) 'par exemple
For i = 0 To UBound(TF)
Derlign = 1
Set OS = Worksheets(TF(i))
OS.Range("u6:ab6").Copy
OD.Range("b" & Derlign).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
OS.Range("dn6:dv6").Copy
OD.Range("k" & Derlign).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Derlign = Derlign + 1
Next i
Range("A1:A55").Select 'de quel onglet et pourquoi cette sélection?
ActiveWorkbook.OD.Sort.SortFields.Clear
ActiveWorkbook.OD.Sort.SortFields.Add Key:=Range("A1" _
), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.OD.Sort
.SetRange Range("A1:A55")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("a1:S55").Select
ActiveWorkbook.OD.Sort.SortFields.Clear
ActiveWorkbook.OD.Sort.SortFields.Add Key:=Range("A1" _
), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.OD.Sort
.SetRange Range("A1:S55")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End SubLa règle d'or en VBA c'est d'éviter autant que tu le peux les Select ou Activate qui ne font que ralentir l'exécution du code et sont source de nombreux bugs...