Sub Supprimer_intervalle()
Dim DateDepuis As Long ' colonne contenant date est considérée ici comme long car calculs plus fiables
Dim DateJusquà As Long ' même si colonne date est bel et bien au format date
Dim LigneDepuis As Long
Dim LigneJusquà As Long
'--- Rechercher la date mini et la date maxi présentes dans la feuille "Origine"
With Sheets("Origine").UsedRange
DateDepuis = WorksheetFunction.Min(.Columns(1)) ' colonne 1 contient la date
DateJusquà = WorksheetFunction.Max(.Columns(1))
End With
MsgBox "La date la plus ancienne est le " & CDate(DateDepuis) & " et la date la plus récente est le " & CDate(DateJusquà)
' Cdate() pour transformer le chiffre en date
'--- Déterminer les lignes correspondant à l'intervalle vu plus haut
With Sheets("Destination").UsedRange
.Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlYes ' on trie par date car les les lignes doivent être en ordre croissant pour fonction Match
LigneDepuis = WorksheetFunction.Match(DateDepuis - 1, .Columns(1), 1) + 1
LigneJusquà = WorksheetFunction.Match(DateJusquà, Columns(1), 1)
' Match fonctionne comme suit :
' a) Si le terme cherché n'existe pas, alors Excel prend la valeur immédiatement suivante
' b) Si le terme cherché existe plusieurs fois, Excel retient la dernière occurrence
' donc
' LigneJusquà : rien de particulier, avec Match critère 1, si le terme recherché apparaît plusieurs fois, c'est le ' dernier qui est retenu
' LigneDepuis : on se positionne sur le terme recherché inférieur (en ayant écrit DateDepuis - 1) et on ajoute 1 pour se mettre finalement sur le bon élément
If LigneDepuis <= LigneJusquà Then
MsgBox "Le bloc à supprimer va de la ligne n° " & LigneDepuis & " à la ligne n° " & LigneJusquà
.Range(.Rows(LigneDepuis), .Rows(LigneJusquà)).Delete
Else
MsgBox "L'intervalle présent dans la feuille Origine allant du " & CDate(DateDepuis) & " au " & CDate(DateJusquà) & " n'existe pas dans la feuille Destination"
End If
End With
End Sub