Bonjour,Bonjour à tous,
Je cherche une repose à ma recherche.
J'ai une case avec plusieurs chiffres comme ceci :
Regarde la pièce jointe 1052315 c'est à dire 50010-50019, 55002-55016, 55020-55021, 55023, 55025, 55027, 55029-55030, 55032-55034, 55036, 55038-55046, 55050-55057, 55064-55067, 55071-55073, 55076, 55078-55079, 55082-55083, 55086, 55088, 55090, 55092-55095, 55097-55100, 55102-55105
Explication : le "-" veut dire "entre".
J'aimerai savoir si le numero 55106 fait parti de cette case.
J'ai essayé avec les fonctions SI ET STXT mais quand tout est dans la meme case pas facile.
=SI(ET(A1>(STXT(F8;TROUVE("-";F8)-5;5));A1<(STXT(F8;TROUVE("-";F8)+1;5)));VRAI;FAUX)
Merci à vous
Function Rechercher(Cellule, nombre)
Rechercher = IIf(Cellule Like "*" & nombre & "*", "OUI", "NON")
End Function
=Rechercher(A1;55106)
Function TrouveVal(t As String, v As String, sep1 As String, sep2 As String) As Boolean
Dim n, s1, i%, x$, s2, n1, n2
n = Val(v) 'valeur numérique
s1 = Split(t, sep1)
For i = 0 To UBound(s1)
x = s1(i)
If x = v Then TrouveVal = True: Exit Function
s2 = Split(x, sep2)
If UBound(s2) Then
n1 = Val(s2(0)): n2 = Val(s2(1))
If n >= n1 And n <= n2 Or n <= n1 And n >= n2 Then TrouveVal = True: Exit Function
End If
Next
End Function
Function TrouveVal(t As String, v As String, sep1 As String, sep2 As String)
Dim a(), n, s1, i%, x$, s2, n1, n2
ReDim a(1 To 2)
TrouveVal = a 'matrice (vecteut ligne)
n = Val(v) 'valeur numérique
s1 = Split(t, sep1)
For i = 0 To UBound(s1)
x = s1(i)
If x = v Then a(1) = True: a(2) = x: TrouveVal = a: Exit Function
s2 = Split(x, sep2)
If UBound(s2) Then
n1 = Val(s2(0)): n2 = Val(s2(1))
If n >= n1 And n <= n2 Or n <= n1 And n >= n2 Then a(1) = True: a(2) = x: TrouveVal = a: Exit Function
End If
Next
End Function
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Range("A2:A" & Rows.Count).Font
.ColorIndex = xlAutomatic 'RAZ
.Bold = False 'non gras
End With
Set Target = Intersect(ActiveCell, [A:A])
If Target Is Nothing Then Exit Sub
Dim x As String
x = TrouveVal(CStr(Target), CStr(Target(1, 2)), ", ", "-")(2)
If x = "" Then Exit Sub
With Target.Characters(InStr(Target, x), Len(x)).Font
.ColorIndex = 3 'rouge
.Bold = True 'gras
End With
End Sub
merci pur cette réponse et effectivement vous avez raison car si c'est une chaine de caractère ca n'a aucun sensBonsoir Stefck,
Qu'entendez vous par " fait parti de cette case. " ?
Si la chaîne fait partie de la grande chaîne, ou si le nombre est dans les intervalles donnés ?
Si c'est dans les intervalles, comment interprété : 55023 puisqu'il est seul ?
Vous sembler vouloir faire des séparations de chaines. Mais il faut savoir que STXT renvoie une chaine de caractère pas un nombre. ( pour XL "1234" et 1234 ne représente pas la même chose.
Donc A1> STXT(....) ne veut rien dire pour XL. Il faut faire A1> CNUM(STXT(....)) CNUM transforme une chaine de caractères formée de chiffres en nombre.
Bonjour Stefck, sylvanu, Jacky67,
Voyez cette fonction VBA, à placer impérativement dans un module standard (Module1) :
Elle est utilisée en C2 du fichier joint =SI(TrouveVal(A2;B2;", ";"-");"Oui";"Non")VB:Function TrouveVal(t As String, v As String, sep1 As String, sep2 As String) As Boolean Dim n, s1, i%, x$, s2, n1, n2 n = Val(v) 'valeur numérique s1 = Split(t, sep1) For i = 0 To UBound(s1) x = s1(i) If x = v Then TrouveVal = True: Exit Function s2 = Split(x, sep2) If UBound(s2) Then n1 = Val(s2(0)): n2 = Val(s2(1)) If n >= n1 And n <= n2 Or n <= n1 And n >= n2 Then TrouveVal = True: Exit Function End If Next End Function
A+