Regrouper données plusieurs feuilles dans une seule feuille
Bonjour à tous,
Je travaille sur une macro me permettant de regrouper toutes les données de plusieurs feuilles dans une seule feuille (toutes les feuilles en question se trouvant dans le même fichier Excel), avec quelques détails d'affichage du résultat. Voici toutes les étapes dont j'ai besoin :
1. Regrouper toutes les données des feuilles du fichier dans une seule feuille "Liste"
2. Mise en forme : supprimer les lignes vides qui ont pu être collées dans la feuille "Liste", et supprimer la mise en forme des bordures de tableau
3. Tri sur la colonne "C" qui contient des dates, de la plus ancienne à la plus récente
4. Compter le nombre de lignes de la feuille "Liste" pour afficher le nombre total dans une cellule
Et il faudrait que tout ce listing soit remplacé par le nouveau à chaque activation de la macro.
J'ai déjà un gros pavé de code, qui est le résultat d'un regroupement de plusieurs macros trouvées ici et là sur le web :roll: :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| Sub Liste_Résultats()
Dim dlgR As Integer, dlgi As Integer
Dim i As Byte
'Sélectionne la feuille récapitulative et supprime les résultats précédents
Sheets("Liste").Activate
Range("A:D").Cells.Clear
'Liste les données de toutes les autres feuilles dans la feuille "Liste"
For i = 1 To Worksheets.Count
If UCase(Sheets(i).Name) <> "Liste" Then
dlgR = Sheets("Liste").Range("A" & Rows.Count).End(xlUp).Row
With Sheets(i)
dlgi = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A2:D" & dlgi).Copy Sheets("Liste").Range("A" & dlgR + 1)
End With
End If
Next
'Supprime les éventuelles lignes vides
Range("A1:A65536").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'Supprime les bordures de tableau
Cells.Select
With Selection
.Borders(xlDiagonalDown).LineStyle = xlNone
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlEdgeLeft).LineStyle = xlNone
.Borders(xlEdgeTop).LineStyle = xlNone
.Borders(xlEdgeBottom).LineStyle = xlNone
.Borders(xlEdgeRight).LineStyle = xlNone
.Borders(xlInsideVertical).LineStyle = xlNone
.Borders(xlInsideHorizontal).LineStyle = xlNone
.Interior.ColorIndex = xlNone
End With
'Tri par date, de la plus ancienne à la plus récente
Columns("C:C").Select
ActiveWorkbook.Worksheets("Liste").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Liste").Sort.SortFields.Add Key:=Range("C1"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Liste").Sort
.SetRange Range("A1:D65536")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWindow.SmallScroll Down:=-15
'Compte le nombre de lignes pour inscrire le résultat
Dim NbLig As Integer
NbLig = Cells.SpecialCells(xlCellTypeLastCell).Row
Worksheets("Liste").Range("K:K").Cells.Clear
Worksheets("Liste").Range("K5").Value = "Total : " & NbLig
End Sub |
Problème : tout fonctionne, sauf que les résultats des différentes feuilles apparaissent plusieurs fois dans la feuille "Liste", ce qui devraient évidemment ne pas être le cas.
Si quelqu'un a le courage de se pencher sur mon patchwork de code... Merci beaucoup d'avance ! :D