Microsoft 365 Chiffre compris entre 2 chiffres.

Stefck

XLDnaute Nouveau
Bonjour à tous,

Je cherche une repose à ma recherche.
J'ai une case avec plusieurs chiffres comme ceci :
1579722756332.png
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
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir 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.
 

Jacky67

XLDnaute Barbatruc
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
Bonjour,
Avec une fonction perso. peut être
Dans un module standard
VB:
Function Rechercher(Cellule, nombre)
Rechercher = IIf(Cellule Like "*" & nombre & "*", "OUI", "NON")
End Function
Dans une cellule
=Rechercher(A1;55106)

Dans l'exemple les chiffres se trouvent en A1
 

Stefck

XLDnaute Nouveau
merci pour cette réponse.
Effectivement je n'ai assez donné d'explications.
c'est une chaine de caractère. A la base ce sont des des numéros de series. quand on a un chiffre seul c'est que ca concerne ce numéro de série. quand on a un "-" ca doit être compris entre les 2.
Effectivement la difficulté c'est que toutes ces données sont dans une case.
exemple :

1579725120785.png
 

job75

XLDnaute Barbatruc
Bonjour Stefck, sylvanu, Jacky67,

Voyez cette fonction VBA, à placer impérativement dans un module standard (Module1) :
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
Elle est utilisée en C2 du fichier joint =SI(TrouveVal(A2;B2;", ";"-");"Oui";"Non")

A+
 

Pièces jointes

  • Classeur(1).xlsm
    18 KB · Affichages: 4

job75

XLDnaute Barbatruc
Hello merinos,

Pour mettre en évidence l'item en colonne A utiliser cette fonction qui renvoie une matrice :
VB:
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
La coloration rouge étant obtenue par cette macro placée dans le code de la feuille :
VB:
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
Fichier (2).
 

Pièces jointes

  • Classeur(2).xlsm
    21.3 KB · Affichages: 9

Stefck

XLDnaute Nouveau
Bonsoir 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.
merci pur cette réponse et effectivement vous avez raison car si c'est une chaine de caractère ca n'a aucun sens
 

Stefck

XLDnaute Nouveau
Bonjour Stefck, sylvanu, Jacky67,

Voyez cette fonction VBA, à placer impérativement dans un module standard (Module1) :
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
Elle est utilisée en C2 du fichier joint =SI(TrouveVal(A2;B2;", ";"-");"Oui";"Non")

A+

Merci à tous et Job75 ca marche très bien c'est ce qu'il me fallait. merci aussi merinos sylvanu et Jacky67.
encore une grand merci pour vos recherches !!!
 

Statistiques des forums

Discussions
311 711
Messages
2 081 799
Membres
101 818
dernier inscrit
tiftouf5757