Sauf erreur de ma part, Cstr effectue une conversion.Quelle différence y a t-il entre un format texte avec @ et avec CStr ?
Ça = Replace(Ça, ",", ".")
Private Sub CommandButton2_Click()
Dim Cel As Range
Dim FlgTrouvé As Boolean
Dim Ça As Double
Ça = Range("B1")
FlgTrouvé = False
For Each Cel In ActiveSheet.Range("A1:A13") 'Attrape la plage
If Cel.Value = Ça Then FlgTrouvé = True: Exit For
Next Cel
If FlgTrouvé Then MsgBox "Trouvé en ligne " & Cel.Row Else MsgBox "Pas trouvé " & Ça
End Sub
Private Sub CommandButton2_Click()
Dim Ça
Dim lig As Variant
Ça = Range("B1").Value2 'nombre décimal
lig = Application.Match(Ça, Range("A1:A13"), 0)
If IsNumeric(lig) Then MsgBox "Trouvé en ligne " & lig Else MsgBox "Pas trouvé " & Ça
End Sub
Même avec une boucle exécutée 5 fois la fonction Match est plus rapide, teste ces 2 macros :sur une plage aussi petite même si la fonction match(équivalente à EQUIV en excel) est facile d'utilisation
elle sera certainement plus lourde que la boucle
Private Sub CommandButton1_Click() 'job75
Dim Ça
Dim lig As Variant
Dim t, i&
Ça = Range("B1").Value2 'nombre décimal
t = Timer
For i = 1 To 1000000
lig = Application.Match(Ça, Range("A1:A13"), 0)
Next i
MsgBox "Durée " & Format(Timer - t, "0.00") & " microsecondes"
If IsNumeric(lig) Then MsgBox "Trouvé en ligne " & lig Else MsgBox "Pas trouvé " & Ça
End Sub
Private Sub CommandButton2_Click() 'BrunoM45
Dim Cel As Range
Dim FlgTrouvé As Boolean
Dim Ça As Double
Dim t, i&
Ça = Range("B1")
FlgTrouvé = False
t = Timer
For i = 1 To 1000000
For Each Cel In ActiveSheet.Range("A1:A13") 'Attrape la plage
If Cel.Value = Ça Then FlgTrouvé = True: Exit For
Next Cel, i
MsgBox "Durée " & Format(Timer - t, "0.00") & " microsecondes"
If FlgTrouvé Then MsgBox "Trouvé en ligne " & Cel.Row Else MsgBox "Pas trouvé " & Ça
End Sub
Bonsoir SylvanuBonjour Marcham, TooFatBoy,
Avec Ça = CStr(Ça), la leur en B1 traitée est : "-34,95" , or en A1 c'st "-34.95"
Donc essayez ça, cela donne bien "-34.95" :
VB:Ça = Replace(Ça, ",", ".")
Bonsoir BrunoBonjour Marcham,
Une boucle For Next peut être traiter plus rapidement qu'un Find
VB:Private Sub CommandButton2_Click() Dim Cel As Range Dim FlgTrouvé As Boolean Dim Ça As Double Ça = Range("B1") FlgTrouvé = False For Each Cel In ActiveSheet.Range("A1:A13") 'Attrape la plage If Cel.Value = Ça Then FlgTrouvé = True: Exit For Next Cel If FlgTrouvé Then MsgBox "Trouvé en ligne " & Cel.Row Else MsgBox "Pas trouvé " & Ça End Sub
Edit salut Sylvanu
Moi non plus je ne vois pas de point mais bien des virgules, que ce soit en nombre ou en texte.Même avec un espion, je n'ai jamais pu voir ce (et ces) point(s).
Private Sub CommandButton2_Click()
Dim LaDedans As Range
Dim TrouveÇa As Range
Dim Ça As String
Ça = Range("B1").Formula
Set LaDedans = Range("A1:A13") 'Attrape la plage
Set TrouveÇa = LaDedans.Find(Ça, LookIn:=xlFormulas, LookAt:=1) 'Cherche le nombre
If Not TrouveÇa Is Nothing Then MsgBox "Trouvé en ligne " & TrouveÇa.Row Else MsgBox "Pas trouvé " & Ça
End Sub