Sub copie()
Application.ScreenUpdating = False
' *** Effacer les lignes précédentes
With Sheets("Edition")
If .Range("A50") <> "" Then
.Range("A50:A" & .Range("A50").End(xlDown).Row).EntireRow.Delete
Range("A51").EntireRow.Copy 'récupérer une ligne "perdue" lors de l'affichage des sous-totaux
Range("A51").Insert shift:=xlDown
End If
Application.CutCopyMode = False
End With
With Sheets("Titularisation")
nblig = Application.CountA(.Range("G15:G10000")) - 1 'combien de lignes à insérer? (sur base des noms en colonne G)
Sheets("Edition").Range("51:" & 51 + nblig).Insert 'insertion des lignes
For Each c In .Range("G15:G" & 15 + nblig) 'pour chaque cellule de la plage
.Range("K" & c.Row).Copy
Sheets("Edition").Range("A" & 50 + lig).PasteSpecial Paste:=xlValues 'coller les valeurs (sinon formules en erreur)
Sheets("Edition").Range("A" & 50 + lig).PasteSpecial Paste:=xlPasteFormats 'coller le format
.Range("M" & c.Row).Copy
Sheets("Edition").Range("B" & 50 + lig).PasteSpecial Paste:=xlValues
Sheets("Edition").Range("B" & 50 + lig).PasteSpecial Paste:=xlPasteFormats
.Range("L" & c.Row).Copy
Sheets("Edition").Range("C" & 50 + lig).PasteSpecial Paste:=xlValues
Sheets("Edition").Range("C" & 50 + lig).PasteSpecial Paste:=xlPasteFormats
.Range("AW" & c.Row).Copy
Sheets("Edition").Range("D" & 50 + lig).PasteSpecial Paste:=xlValues
Sheets("Edition").Range("D" & 50 + lig).PasteSpecial Paste:=xlPasteFormats
.Range("BD" & c.Row).Copy
Sheets("Edition").Range("E" & 50 + lig).PasteSpecial Paste:=xlValues
Sheets("Edition").Range("E" & 50 + lig).PasteSpecial Paste:=xlPasteFormats
lig = lig + 1
Next c
End With
Application.CutCopyMode = False
' *** Tri sur 3 clés
With Sheets("Edition")
.Range("A50").CurrentRegion.Sort key1:=.Range("A51"), order1:=xlAscending, _
key2:=.Range("B51"), order2:=xlAscending, key3:=.Range("C51"), order3:=xlAscending, Header:=xlYes
' *** Insertion lignes pour sous-totaux
cpt = 1
.Range("A" & 51 + nblig) = "Nombre d'agents remplissant les conditions par grade" 'dernier sous-total
.Range("A" & 51 + nblig).Resize(1, 5).Interior.Color = RGB(210, 210, 210) 'plage en gris
.Range("A" & 51 + nblig).Resize(1, 4).HorizontalAlignment = xlCenterAcrossSelection
.Range("A" & 51 + nblig).Resize(1, 4).VerticalAlignment = xlCenter
.Range("A" & 51 + nblig).Resize(1, 4).WrapText = False
.Range("A" & 51 + nblig).Resize(1, 4).Orientation = 0
.Range("A" & 51 + nblig).Resize(1, 4).AddIndent = False
.Range("A" & 51 + nblig).Resize(1, 4).IndentLevel = 0
.Range("A" & 51 + nblig).Resize(1, 4).ShrinkToFit = False
.Range("A" & 51 + nblig).Resize(1, 4).ReadingOrder = xlContext
.Range("A" & 51 + nblig).Resize(1, 4).MergeCells = False
For g = 50 + nblig To 51 Step -1 'pour insérer des lignes, on commence par la fin du tableau
If .Range("C" & g) <> .Range("C" & g - 1) Then 'si le grade est différent de celui au-dessus
Rows(g).Insert shift:=xlDown 'on insère une ligne
.Range("A" & g) = "Nombre d'agents remplissant les conditions par grade"
.Range("A" & g).Resize(1, 5).Interior.Color = RGB(210, 210, 210)
.Range("A" & 51 + nblig).Resize(1, 4).HorizontalAlignment = xlCenterAcrossSelection
.Range("A" & 51 + nblig).Resize(1, 4).VerticalAlignment = xlCenter
.Range("A" & 51 + nblig).Resize(1, 4).WrapText = False
.Range("A" & 51 + nblig).Resize(1, 4).Orientation = 0
.Range("A" & 51 + nblig).Resize(1, 4).AddIndent = False
.Range("A" & 51 + nblig).Resize(1, 4).IndentLevel = 0
.Range("A" & 51 + nblig).Resize(1, 4).ShrinkToFit = False
.Range("A" & 51 + nblig).Resize(1, 4).ReadingOrder = xlContext
.Range("A" & 51 + nblig).Resize(1, 4).MergeCells = False
cpt = cpt + 1 'compteur de lignes insérées
End If
Next g
' *** calculs des sous-totaux
For n = 50 To (50 + nblig + cpt) ' de la ligne 50 à la ligne correspondant à 50 +nbre de lignes copiées + nbre de lignes de sous-totaux
nb = nb + 1 'compteur de grades
If .Range("A" & n) = "Nombre d'agents remplissant les conditions par grade" Then 'si on est en ligne de sous-total
.Range("E" & n) = nb - 1
nb = 0
End If
Next n
With .Range("A50:E" & 50 + nblig + cpt)
.Borders.LineStyle = xlContinuous
.Font.Size = 8
.WrapText = True
.EntireRow.AutoFit
End With
End With
End Sub