Trouver la première et la dernière ligne correspondant à un critère donné

Sebast

XLDnaute Impliqué
Bonjour à toutes et à tous,

quelqu'un sait-il comment identifier la première et la dernière ligne d'une liste, certes triée, mais sans que le critère de tri permettre de déterminer un min() et un max() ?

Je m'explique :
Dans la feuille BASE se trouvent des données triées selon le critère "Période" (ici le mois)
Je cherche à identifier le n° de la première et de la dernière ligne correspondant à ce critère, par exemple Février
Quand j'ai une date précise, avec max() et min() puis MATCH(), j'y arrive, mais ici, il n'y a pas de notion de max ou min …

Quelqu'un connaît-il la méthode VBA qui retourne la première et la dernière ligne correspondant à un critère donné (ici pour Février, première = 1019 et dernière = 1911)

Merci d'avance pour votre aide
 

Pièces jointes

  • Question.xlsm
    153.7 KB · Affichages: 91
  • Question.xlsm
    153.7 KB · Affichages: 99
  • Question.xlsm
    153.7 KB · Affichages: 98

Paf

XLDnaute Barbatruc
Re : Trouver la première et la dernière ligne correspondant à un critère donné

Bonjour Sebast, R@chid

Une macro si cela peut convenir
Code:
Sub DebFin()

Dim DerLig As Long, i As Long, Compt As Integer, Deb As Integer, Fin As Integer, Mois As String

Mois = InputBox("Entrez le mois recherché")
If Mois = "" Then Exit Sub

DerLig = Worksheets("Base").Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To DerLig
    If Trim(Cells(i, 4)) = Mois Then
        Compt = Compt + 1
        If Compt = 1 Then Deb = i
    End If
Next
Fin = Deb + Compt - 1
MsgBox "Plage du mois de " & Mois & " lignes " & Deb & " à " & Fin
End Sub

A+
 

Sebast

XLDnaute Impliqué
Re : Trouver la première et la dernière ligne correspondant à un critère donné

Bonjour Rachid, bonjour Paf,

merci beaucoup pour vos réponses, qui font le job sans problème. Je penche plus pour la solution VBA car je l'insère dans un projet existant.
Mais en l'adaptant à ce projet, je me suis rendu compte que je suis confronté à un problème de capacité.
Ma base fait environ 900 000 lignes et du coup, ça s'arrête avec le message "Erreur d'exécution 6" 'Dépassement de capacité' ...

En fait, je voulais adapter le code de Paf en sélectionnant ainsi le Range obtenu pour le supprimer, plutôt que d'utiliser une boucle et supprimer ligne à ligne quand il y a correspondance ...

Avez-vous une idée pour s'affranchir de ce problème ? (j'essaie du côté de FIND() mais je ne suis pas expert) !

Encore merci
 

Sebast

XLDnaute Impliqué
Re : Trouver la première et la dernière ligne correspondant à un critère donné

Bonjour,

ta suggestion était la bonne ! ça marche sans problème, pour m'en convaincre j'ai même artificiellement augmenté le nombre de lignes jusqu'à arriver au maximum (> 1 million de lignes) et ça travaille sans broncher.

Un grand merci pour ta clairvoyance
 

Sebast

XLDnaute Impliqué
Re : Trouver la première et la dernière ligne correspondant à un critère donné

Bonjour à toutes et à tous,

j'ai investigé un peu plus et ai trouvé une méthode ULTRA rapide pour identifier la première et la dernière ligne d'un Range en fonction d'un critère.
La rapidité tient au fait qu'on ne balaie pas la base au moyen d'une boucle mais qu'on identifie directement les éléments, pourvu que la table soit triée.
Les excelliens se diront qu'il n'y a rien de nouveau sous le soleil mais pour moi qui ne suis pas chevronné …

C'est particulièrement utile quand on doit identifier un Range à supprimer et à remplacer par un autre, actualisé.
A toutes fins utiles, le code

Code:
Sub PremièreEtDernièreLigne()
Dim LigneDébut As Long
Dim LigneFin As Long
Dim MoisCherché As String

MoisCherché = InputBox("Précisez le mois cherché")

LigneDébut = WorksheetFunction.Match(MoisCherché, Columns(4), 0)
'  0 signifie qu'il doit y avoir correspondance

LigneFin = WorksheetFunction.Match(MoisCherché, Columns(4), 1)
' 1 pour la valeur la plus élevée qui est inférieure ou égale à MoisCherché

MsgBox "La 1ère ligne du mois de " & MoisCherché & " est la n° " & LigneDébut & " et la dernière est la n° " & LigneFin

End Sub

Comme je ne suis pas expert, dites-moi si vous y voyez des limites …
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 207
Membres
103 157
dernier inscrit
youma