Récupérer le N° de ligne de la dernière occurrence d'un doublon

Signaler
Messages postés
33
Date d'inscription
vendredi 2 mai 2003
Statut
Membre
Dernière intervention
9 août 2011
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour à toutes et à tous


récupérer le N° de ligne de la dernière occurrence d'un doublon
je précise :
sur la colonne A par exemple, j'ai

A1=test1
A2=test1
A3=test1
A4=test1
A5=test1
A5=test1
A6=test1
A7=test1
A8=test1
A9=test1
A10=test1 ==>dans la fonction je dois récupérer :10 pour l'occurence test1
A11=test3
A12=test3
A13=test3
A14=test3
A15=test3 ==>dans la fonction je dois récupérer :15 pour l'occurence test3
A16=test2
A17=test2
A18=test2
A19=test2
A20=test2 ==>dans la fonction je dois récupérer :20 pour l'occurence test2

la fonction ci dessous me permet de connaitre le nombre de fois que revient une occurence dans la colonne,
mais je n'arrive pas à récupérer le n° de ligne de la dernière occurrence
si quelqu'un voit ou se trouve mon erreur dans le code si dessous
ou une autre proposition, je suis prenneur, et je lui serai infiniment reconnaissant.

merci d'avance et bonne fête de fin d'année

à savoir 'MsgBox Item.Row, me renvoie la ligne de chaque occurence


Function total()
Dim Spinner As Integer
Dim totaligne As Integer
Dim i As Integer
Dim tabl() As Integer
Spinner = 0

Set plageCherche = Worksheets("feuil1").Range("H2:H" & totalignes(Worksheets("feuil1").Range("B65536")))
ReDim tabl(Worksheets("feuil40").Range("M1").Value)
For i = 1 To Worksheets("feuil40").Range("M1").Value
ValCherchee = Worksheets("feuil40").Range("M" & i + 1).Text
For Each Item In plageCherche
If (StrComp(Item.Value, ValCherchee, vbTextCompare) 0) Then Spinner Spinner + 1
'MsgBox Item.Row
Next Item

tabl(i) = CStr(Spinner)


Spinner = 0
Next i
total = tabl
End Function

3 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
Public Function GetLastOccurrence(ByRef vsWhat As String, Optional ByVal vnInColumn As Long = 1) As Range
Dim oRange As Range
    Set oRange = Cells(1, vnInColumn)
    Do Until Nothing Is oRange
        If StrComp(oRange.Text, vsWhat, vbTextCompare) = 0 Then
            Set GetLastOccurrence = oRange
        ElseIf Not Nothing Is GetLastOccurrence Then
            Exit Do
        End If
        If oRange.Row = &H10000 Then
            Exit Do
        End If
        Set oRange = oRange.Offset(1)
    Loop
End Function


Résultats:
? GetLastOccurrence("test1").Row
 10 
? GetLastOccurrence("test2").Row
 20 
? GetLastOccurrence("test3").Row
 15 



Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,

et en allant du bas vers le haut ? (on éviterait alors de boucler jusqu'à plus là..., le premier trouvé étant le dernier présent)



____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
certes.

pas bête, j'y avais même pas pensé ^^


Renfield - Admin CodeS-SourceS - MVP Visual Basic