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

evilrico Messages postés 33 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 9 août 2011 - 30 déc. 2009 à 08:55
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 30 déc. 2009 à 09:27
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 déc. 2009 à 09:06
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
30 déc. 2009 à 09:24
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.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
30 déc. 2009 à 09:27
certes.

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


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Rejoignez-nous