Tri automatique + repetition ligne en debut de pages
Bonjour à tous,
Bonjour peresh95,
Effectivement, j'avais bien pensé à traiter ce type d'erreur puis, au fil des modifications du code, ça a fini par m'échapper.
Il suffit donc de rajouter la ligne : Target = LCase(Target)
N'étant pas sous XL2007 pour le moment, je t'envoie la copie complète du code au lieu du fichier.
Private Sub Worksheet_Change(ByVal Target As Range)
' Cette procédure se rapporte à la feuille de présence
' Elle se déclenche chaque fois qu'une cellule est modifiée
'----------------------------------------------------------------------------
' La condition suivante teste si la sélection comporte plusieurs cellules _
si c'est le cas, la macro n'est pas déclenchée pour éviter une erreur VBA
If Target.Count > 1 Then Exit Sub
'----------------------------------------------------------------------------
' La condition suivante teste si la cellule est dans la plage nommée "Noms" _
si c'est le cas, le tri est lancé et la macro se termine sur cette action
If Not Intersect(Range("Noms"), Target) Is Nothing Then
Tri
Exit Sub
End If
'----------------------------------------------------------------------------
' Cette condition teste si la cellule est vide : si oui, la macro se termine _
pour éviter une erreur VBA
If Target = "" Then Exit Sub
'----------------------------------------------------------------------------
' La ligne suivante désactive la détection d'événement pour éviter de tourner en boucle
Application.EnableEvents = False
' La condition suivante teste si la cellule est dans le tableau des horaires _
si c'est le cas, le formatage de la cellule est lancé
If Not Intersect(Range("B3:AO" & Range("Noms").Cells.Count + 2), Target) Is Nothing Then
Target = LCase(Target) ' Passe les caractères majuscules en minuscules ("H" ---> "h")
' Si le dernier caractère de droite de la cellule est un 'h' ajout de "00" à la fin
If Right(Target.Value, 1) = "h" Then Target.Value = Target.Value & "00"
' Remplacement du "h" dans la cellule par ":" pour qu'Excel considère la valeur comme une heure
' L'affichage au format voulu se fait par l'option de mise en forme de la cellule
Target.Value = CDate(Replace(Target.Value, "h", ":"))
End If
' La ligne suivante rétablit la détection d'événement
Application.EnableEvents = True
End Sub
Sub Tri()
' Cette procédure effectue le tri sur la colonne A de la feuille active (Feuille de présence mater)
' La ligne suivante détecte le n° de la dernière colonne du tableau des heures
dcol = Range("1:2").Find("Presence Matin S1", LookIn:=xlValues, lookat:=xlWhole).Column - 2
' La ligne suivante désactive le rafraîchissement d'écran, ce qui permet de gagner en _
rapidité et de supprimer le scintillement. A partir de là, l'écran reste figé
Application.ScreenUpdating = False
' Les lignes suivantes appliquent les paramètres de tri
With ActiveSheet.Sort
' supprime tous les réglages précédents
.SortFields.Clear
' applique le tri sur la zone "Noms" correspondant à la plage E3:E72
.SortFields.Add Key:=Range("Noms" & dlg), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
' étend la plage de tri jusqu'à la colonne AO (41ème colonne)
.SetRange Range("Noms").Resize(Range("Noms").Rows.Count, Range("Noms").Columns.Count + dcol)
' Indique que la plage de tri ne comporte pas de ligne d'en-tête
.Header = xlGuess
' Indique que le tri ne tient pas compte de la casse des carctères
.MatchCase = False
' Indique que le tri se fera de manière ascendante, du haut vers le bas
.Orientation = xlTopToBottom
' Effectue le tri
.Apply
End With
' Réactive le rafraîchissement d'écran : à partir de ce moment, le résultat du tri s'affiche
Application.ScreenUpdating = True
End SubCordialement.
p
SUPER !!!! Merci beaucoup