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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| Option Explicit
Sub AjoutPersonne()
'--- Ajout d'une personne
Dim sFeu As String, sCat As String, sSec As String
Dim sGra As String, sNom As String, sPre As String
sFeu = Range("E5") '--- feuille à traiter
sCat = Range("E7") '--- catégorie
sSec = Range("E9") '--- section
sGra = Range("E11") '--- grade
sNom = Range("E13") '--- nom
sPre = Range("E15") '--- prénom
'--- problème: le tri n'est pas alphabétique ---!
Dim rSect As Range, kR As Long
Sheets(sFeu).Select
Set rSect = Columns("B:B").Cells.Find(What:=sSec, After:=Range("B23"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
'--- ajoute une ligne 2 ligne + bas que la ligne début de section
'--- présume qu'il y a au moins déjà 2 lignes dans chaque section
kR = rSect.Row + 2
Rows(kR).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Range("A" & kR) = sCat
Range("B" & kR) = sSec
Range("C" & kR) = sGra
Range("D" & kR - 1).Copy Range("D" & kR) '--- pour copier la formule de la celulle
Range("E" & kR) = sNom
Range("F" & kR) = sPre
Range("E" & kR).Select
'--- tri
Tri_SecGra_Nom_Prenom
'--- retrouve la personne
'--- présume qu'il n'y a pas 2 personnes ayant le même nom dans la même section
Set rSect = Columns("B:B").Cells.Find(What:=sSec, After:=Range("B23"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
Set rSect = Columns("E:E").Cells.Find(What:=sNom, After:=Range("E" & rSect.Row), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
rSect.Activate
End Sub
Sub Tri_SecGra_Nom_Prenom()
'--- Tri selon colonnes Section+Gra, Nom, Prenom
Dim LastRow As Long
LastRow = Cells(Rows.Count, 1).End(xlUp).Row '--- n° de la dernière ligne en colonne 1
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("D24:D" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("E24:E" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range("F24:F" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range("A23:NH" & LastRow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
Sub SupprimerPersonnel()
'--- supprimer une personne
Dim sFeu As String, sCat As String, sSec As String
Dim sGra As String, sNom As String, sPre As String
sFeu = Range("E5") '--- feuille à traiter
sCat = Range("E7") '--- catégorie
sSec = Range("E9") '--- section
sGra = Range("E11") '--- grade
sNom = Range("E13") '--- nom
sPre = Range("E15") '--- prénom
'---
Dim rPers As Range, kR As Long
Sheets(sFeu).Select
'--- retrouve la personne
'--- présume qu'il n'y a pas 2 personnes ayant le même nom dans la même section
Set rPers = Columns("B:B").Cells.Find(What:=sSec, After:=Range("B23"), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
Set rPers = Columns("E:E").Cells.Find(What:=sNom, After:=Range("E" & rPers.Row), LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)
rPers.Activate
kR = rPers.Row
Rows(kR).Select
If MsgBox("Voulez-vous vraiment supprimer cet agent ?", vbYesNo + vbDefaultButton2, "A confirmer") = vbYes Then
Selection.Delete Shift:=xlUp
End If
End Sub |
Partager