Oups !!! C'est comme à l'école : quand tu lis mal la consigne tu te plantes.une formule vba
Function TrouverDernier(Plage, C$)
tablo = Plage
For i = 1 To UBound(tablo)
If tablo(i, 1) = C Then TrouverDernier = i
Next i
End Function
=TrouverDernier(Plage de recherche;Chaine à trouver)
par exemple
=TrouverDernier(B1:B16;"x")
Sub TrouverDernierOccurence()
Chaine = "x"
tablo = Sheets("Feuil2").Range("B1:B20")
For i = 1 To UBound(tablo)
If tablo(i, 1) = Chaine Then L = i
Next i
MsgBox "Dernier " & Chaine & " trouvé en ligne " & L
End Sub
=MAX(LIGNE(A1:A10)*(A1:A10="x"))
Oups !!! C'est comme à l'école : quand tu lis mal la consigne tu te plantes.une formule vba
Function TrouverDernier(Plage, C$)
tablo = Plage
For i = 1 To UBound(tablo)
If tablo(i, 1) = C Then TrouverDernier = i
Next i
End Function
=TrouverDernier(Plage de recherche;Chaine à trouver)
par exemple
=TrouverDernier(B1:B16;"x")
Sub TrouverDernierOccurence()
Chaine = "x"
tablo = Sheets("Feuil2").Range("B1:B20")
For i = 1 To UBound(tablo)
If tablo(i, 1) = Chaine Then L = i
Next i
MsgBox "Dernier " & Chaine & " trouvé en ligne " & L
End Sub
si ..Bonjour Messieurs,
Ses formules fonctionnent sur vba?
J'ai un doute
Cordialement.
Hello sylvanu,Oups !!! C'est comme à l'école : quand tu lis mal la consigne tu te plantes.
Une fonction perso :
Syntaxe dans la feuille :VB:Function TrouverDernier(Plage, C$) tablo = Plage For i = 1 To UBound(tablo) If tablo(i, 1) = C Then TrouverDernier = i Next i End Function
ou encore en module :Code:=TrouverDernier(Plage de recherche;Chaine à trouver) par exemple =TrouverDernier(B1:B16;"x")
Code:Sub TrouverDernierOccurence() Chaine = "x" tablo = Sheets("Feuil2").Range("B1:B20") For i = 1 To UBound(tablo) If tablo(i, 1) = Chaine Then L = i Next i MsgBox "Dernier " & Chaine & " trouvé en ligne " & L End Sub
Function FindLast(Cible As String, Source As Range, Optional InRange = False)
Dim R As Range
Set R = Source.Find(Cible, Source.Cells(1), xlValues, xlWhole, , xlPrevious)
Select Case True
Case R Is Nothing: FindLast = ""
Case InRange: FindLast = R.Row - Source.Cells(1).Row + 1
Case Else: FindLast = R.Row
End Select
End Function
Sub Test()
MsgBox FindLast("x", [A1:A7])
End Sub
Function Find_LastRowWithValue(rng As Range, valeur)as variant
Set cel = rng.Resize(Cells(Rows.Count, rng.Column).End(xlUp).Row).Find(valeur, LookIn:=xlValues, SearchDirection:=xlPrevious)
If Not cel Is Nothing Then Find_LastRowWithValue = cel.Row Else Find_LastRowWithValue = Empty
End Function
Sub test()
MsgBox Find_LastRowWithValue([A1:A20], "x")
End Sub
Sub test1()
MsgBox Find_LastRowWithValue([B:B], "x")
End Sub
vous l'avez remarqué je prend tout la colonne dans la formule=Find_LastRowWithValue(A:A;"x")
Function TrouverDernierVpat(tablo, V$)
Dim qb&, qh&, i&
For i = 1 To UBound(tablo)
If tablo(UBound(tablo) - (i - 1), 1) = V Then qb = (UBound(tablo) + 1) - i
If tablo(i, 1) = V Then qh = i
TrouverDernierVpat = qh
If qb > qh And qh > 0 Then TrouverDernierVpat = qb: Exit For
Next i
MsgBox i & " tours de boucle"
End Function
Sub testq1()
'formule : =TrouverDerniervpat(A1:A80000;"X")
MsgBox TrouverDernierVpat(Feuil1.Range("A1:A80000").Value, "X")
End Sub
'*********************************************************
'*********************************************************
Function TrouverDernier(Plage, C$)
tablo = Plage
For i = 1 To UBound(tablo)
If tablo(i, 1) = C Then TrouverDernier = i
Next i
MsgBox i & " tours de boucle"
End Function
Sub testq2()
'formule : =TrouverDernier(A1:A80000;"X")
MsgBox TrouverDernier(Feuil1.Range("A1:A80000"), "X")
End Sub
Sub ChercheX()
Dim Chaine, DL, N, Segment, i
Chaine = "x"
Application.ScreenUpdating = False
DL = Range("A65500").End(xlUp).Row ' Dernière ligne
Segment = Int(DL) / 8 ' On segmente en 8 paquets ( mais 8 est il l'optimum ? )
For N = 8 To 2 Step -1 ' On regarde dans chaque paquet si "Chaine" existe en partant de la fin
Existe = Application.CountIf(Range("A" & (N - 1) * Segment & ":A" & N * Segment), Chaine)
If Existe > 0 Then Exit For ' S'il existe on sort
Next N
tablo = Range("A" & 1 + (N - 1) * Segment & ":A" & N * Segment) ' On charge le bon paquet en array
For i = UBound(tablo) To 1 Step -1 ' On cherche dans cet array la "Chaine"
If tablo(i, 1) = Chaine Then L = i: Exit For ' Si elle existe on sort
Next i
' La chain se trove en position : (N - 1) * Segment + i
MsgBox "Dernier " & Chaine & " trouvé en ligne " & (N - 1) * Segment + i
End Sub
Sub xx()
'juste pour remplir la colonne avec un x au hazard
[A1:A80000] = "a"
Randomize
Cells(Round(1 + (Rnd * 79999)), 1) = "x"
End Sub
Sub ChecheX()
Dim pioche As Boolean, i&, e&, maligne&, segment, t#, Chaine
tbl = [A1].Resize(ActiveSheet.UsedRange.Rows.Count, 1).Value
partie = UBound(tbl) / 10
Chaine = "x"
t = Timer
For i = UBound(tbl) To 1 Step -partie
deb = Application.Max(1, i - partie)
If Application.CountIf(Range(Cells(i, 1), Cells(deb, 1)), Chaine) Then
segment = Range(Cells(i, 1), Cells(deb, 1)).Address(0, 0)
pioche = True
For e = i To i - partie Step -1
If tbl(e, 1) = Chaine Then maligne = e: Exit For
Next
End If
If pioche Then Exit For
Next
MsgBox "x trouvé en ligne " & maligne & " dans le segment " & segment & vbCrLf & "en " & Format(Timer - t, "#0.000 sec")
End Sub