[COLOR="DarkSlateGray"]Sub TRI_SELECTION()
Dim catLst, i As Integer, oCel As Range, tmp
catLst = Array(Array("M", "MONTE"), Array("O", "OBSTACLE"), Array("P", "PLAT"), Array("T", "TROT")) [COLOR="SeaGreen"][B]'3 :
'Donne la correspondance entre la clé de tri et la feuille.[/B][/COLOR]
Application.ScreenUpdating = False [COLOR="SeaGreen"]'4[/COLOR]
With Sheets("COURSES") [COLOR="SeaGreen"][B]'5 : Déclare la feuille de référence.[/B][/COLOR]
With .Range(.Cells(1, 8), .Cells(Rows.Count, 1).End(xlUp)) [COLOR="SeaGreen"][B]'6 : Décrit la plage de données qui est
'"A1:Hn" où n est le rang de la dernière ligne qui contient des données. Ici, elle décrite de façon
'inhabituelle : "H1:An". C'est .Cells(1,8) qui correspond à "H1" et .Cells(Rows.Count, 1).End(xlUp) qui
'correspond à la dernière cellule de la colonne A contenant une donnée.[/B][/COLOR]
.AutoFilter Field:=8, Criteria1:="=" [COLOR="SeaGreen"][B]'7 : Filtre sélectionnant dans la plage "A1:Hn" les lignes
'où la colonne H est vide.[/B][/COLOR]
For i = 0 To UBound(catLst) [COLOR="SeaGreen"][B]'8 : Démarre un boucle ou i indexe les arguments de la liste catLst.
'Un élément de cette liste est lui-même une liste de deux éléments. Par exemple, catLst(0) est la liste
'Array("M", "MONTE").[/B][/COLOR]
tmp = catLst(i) [COLOR="SeaGreen"][B]'9 : tmp prend l'élément de rang i de catLst[/B][/COLOR]
.AutoFilter Field:=3, Criteria1:=tmp(0)[COLOR="SeaGreen"][B] '10 Filtre sélectionnant dans les ligne de la plage
'"A1:Hn" où la colonne H est vide celles dont la troisième colonne contient le premier élément de la
'liste tmp. (Pour i=0, c'est "M", pour i=1, c'est "O",etc.)
' On va ensuite copier ces lignes sélectionnées dans la feuille correspondante.[/B][/COLOR]
If IsEmpty(Sheets(tmp(1)).Cells(14, 1)) Then [COLOR="SeaGreen"][B]'11 : On regarde la valeur de la cellule "A14"
'de la feuille tmp(1), c'est-à-dire de la feuille dont le nom figure dans le deuxième élément de la
'liste tmp. (Pour i=0, c'est "MONTE", pour i=1, c'est "OBSTACLE",etc.)[/B][/COLOR]
.Offset(1, 0).Copy Destination:=Sheets(tmp(1)).Cells(14, 1) [COLOR="SeaGreen"][B]'12 :'Si cette cellule est
'vide on colle la sélection à partir de la cellule "A14", pour préserver la zone réservée au dessus
'de la ligne 14.[/B][/COLOR]
Else [COLOR="SeaGreen"][B]'13 : Sinon...[/B][/COLOR]
.Offset(1, 0).Copy Destination:=Sheets(tmp(1)).Cells(Sheets(tmp(1)).Rows.Count, 1). _
End(xlUp).Offset(1, 0) [COLOR="SeaGreen"][B]'14 :...on colle la sélection à partir de la première ligne vide
'en dessous de la line 14. Dans .Offset(1, 0).Copy, la valeur de décalage (offset) d'une ligne évite de
'la ligne 1 (intitulés des champs) dela feuille "COURSES".[/B][/COLOR]
End If [COLOR="SeaGreen"]'14[/COLOR]
Next i [COLOR="SeaGreen"][B]'15: On boucle sur tous les éléments de catLst.[/B][/COLOR]
.AutoFilter [COLOR="SeaGreen"][B]'16 : Supprime le filtre.[/B][/COLOR]
With .Resize(.Rows.Count - 1, 1).Offset(1, 7) [COLOR="SeaGreen"][B]'17 : Décrit la partie de la colonne H "H2:Hn".[/B][/COLOR]
For Each oCel In .Cells [COLOR="SeaGreen"][B]'18 : Cette boucle (lignes 18 à 20) place la date et l'heure dans
'toutes les cellules vides de la plage "H2:Hn".[/B][/COLOR]
If IsEmpty(oCel.Value) Then oCel.Value = Format(Now(), "ddddd ttttt") '1 + WorksheetFunction.Max(.Cells)
Next oCel [COLOR="SeaGreen"]'20[/COLOR]
End With [COLOR="SeaGreen"]'21[/COLOR]
End With [COLOR="SeaGreen"]'22[/COLOR]
End With [COLOR="SeaGreen"]'23[/COLOR]
Application.ScreenUpdating = True
End Sub[/COLOR]