Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

Cappadoce

XLDnaute Nouveau
Bonjour,

J'ai une colonne avec des données du type :
Ligne 1 "[1-10]"
Ligne 2 "[1-5] [12-15] [17-999]"
Ligne 3 "[1-2] [8-999]"
etc


J'aimerais pouvoir sélectionner les lignes à partir d'un nombre donné, à condition qu'il soit contenu dans l'un des intervalles définis dans les []. Les espaces entre les [] correspondent à des OU.

Exemples :
. Je tape "15" dans une case, cela doit sélectionner les lignes 2 et 3
. Je tape "6" dans une case, cela doit sélectionner uniquement la ligne 1
. Je tape "9" dans une case, cela doit sélectionner les lignes 1 et 3


Merci pour votre aide !
 

Pièces jointes

  • Exemple.xls
    18 KB · Affichages: 126
  • Exemple.xls
    18 KB · Affichages: 128
  • Exemple.xls
    18 KB · Affichages: 129

JHA

XLDnaute Barbatruc
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

Bonjour Cappadoce, le forum,

Je te propose une fonction Si(ou(et())); puis un format conditionnel

Dis nous si cela te va.

JHA
 

Pièces jointes

  • Exemple.xls
    25 KB · Affichages: 182
  • Exemple.xls
    25 KB · Affichages: 190
  • Exemple.xls
    25 KB · Affichages: 203

Cappadoce

XLDnaute Nouveau
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

Merci JHA,
ça marche pour le petit exemple, mais le fichier réel fait 30.000 lignes !

Il faudrait donc pouvoir automatiser cette formule avec
"[x-y] [z-t]"
-> si ((a>=x et a<=y) OU (a>=z et a<=t)) alors "yes" sinon "no"

Est-ce que ça peut marcher sans macro ?
Merci
 

Tibo

XLDnaute Barbatruc
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

Bonjour,

Peux-tu nous préciser combien d'intervalles il peut y avoir au maximum ?

Par formule, ce n'est pas impossible, mais ça rique d'être un peu lourd.

A te (re)lire avec les précisions demandées.

@+
 

Lii

XLDnaute Impliqué
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

Bonjour,

Un exemple en séparant les cas(1, 2 ou 3 intervalles) mais comme le dit Tibo, cela peut devenir "lourd".
 

Pièces jointes

  • Intervalle s.zip
    4 KB · Affichages: 77

Cappadoce

XLDnaute Nouveau
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

Eh, c'est là que le bas blesse : il peut y avoir théoriquement une infinité d'intervalles !
Pour le moment, on peut fonctionner avec 10 intervalles, mais c'est déjà très lourd à gérer par formule (cf. fichier joint, où je gère uniquement 2 intervalles).

Une solution : peut-on créer une macro qui identifie chaque ligne qui contient plus de 2 intervalles et la duplique et laissant les 2 premières intervalles sur la première ligne, et les suivantes sur la nouvelle ligne ?

Ex :
Ligne 1 "[1-5] [10-15] [18-50]"

devient
Ligne 1 "[1-5] [10-15]"
Ligne 1bis "[18-50]"


Est-ce faisable ?
Merci.
 

Pièces jointes

  • Exemplev2.xls
    24 KB · Affichages: 102
  • Exemplev2.xls
    24 KB · Affichages: 99
  • Exemplev2.xls
    24 KB · Affichages: 94

JHA

XLDnaute Barbatruc
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

Re à tous,

pas sur d'avoir tout compris mais un exemple avec des plages nommées.

JHA
 

Pièces jointes

  • Exemple.xls
    30.5 KB · Affichages: 127
  • Exemple.xls
    30.5 KB · Affichages: 126
  • Exemple.xls
    30.5 KB · Affichages: 126

Cappadoce

XLDnaute Nouveau
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

re-

Mon problème est qu'il peut y avoir en théorie une infinité d'intervalles par ligne et qu' il y a 30.000 lignes environ,
-> j'aimerais avoir une seule formules que je peux copier-coller d'une ligne à l'autre (cf. l'exemple que j'ai posté précédemment).

La solution avec une macro pourrait fonctionner, mais je ne sais pas faire tourner VBA :

pour i=3 à 9
si la case Bi contient plus de 3 fois le caractère "["
alors
copier la ligne i et l'insérer juste en-dessous
dans la case Bi supprimer les caractères suivant le 3e "[" et l'espace qui précède ce "["
dans la case B(i+1) supprimer les caractères précédent le 3e "[" et l'espace qui précède ce "["
sinon passer au i suivant

C'est faisable en VBA ?

Merci !
 

Pièces jointes

  • Exemplev2.xls
    26.5 KB · Affichages: 104
  • Exemplev2.xls
    26.5 KB · Affichages: 106
  • Exemplev2.xls
    26.5 KB · Affichages: 115
Dernière édition:

Tibo

XLDnaute Barbatruc
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

re,

Je joins une tentative de réponse basée sur 3 intervalles.

En une seule formule, c'est, pour moi, probablement impossible.

Je te laisse regarder si ça convient avec 3 intervalles.

Sinon, quand tu dis une infinité d'intervalles, ça peut être combien ?

@+
 

Pièces jointes

  • Cappadoce.zip
    4.6 KB · Affichages: 61

Cappadoce

XLDnaute Nouveau
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

C'est propre et ça répond au besoin, au moins jusqu'à ~10 intervalles différents.
Ca me permet de construire une première maquette, en attendant de l'automatiser par une macro.

Merci !
 

Tibo

XLDnaute Barbatruc
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

re,

Nouvelle version jusqu'à 10 intervalles.

Les formules se répètent.


Je te laisse regarder et tester

@+
 

Pièces jointes

  • Cappadoce2.zip
    9.1 KB · Affichages: 86

TooFatBoy

XLDnaute Barbatruc
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

Essaye cette macro qui devrait fonctionner quelque soit le nombre de lignes du tableau et quelque soit le nombre d'intervalles à tester dans chaque cellule de la colonne B :
Code:
Sub OuiNon()
Dim ColDeb As Integer
Dim LigDeb As Double
Dim Ligne As Double
Dim OK As Boolean
Dim IntRest As String
Dim IntAct As String
Dim PosEspace As Double
Dim PosTiret As Double
Dim BorneMin As Double
Dim BorneMax As Double

ColDeb = 2
LigDeb = 3

Ligne = LigDeb
While Cells(Ligne, ColDeb) <> ""
    IntRest = Cells(Ligne, ColDeb)
    OK = False
    Do
        PosEspace = InStr(IntRest, " ")
        If PosEspace = 0 Then
            IntAct = IntRest
        Else
            IntAct = Left$(IntRest, PosEspace - 1)
            IntRest = Right$(IntRest, Len(IntRest) - PosEspace)
        End If
        PosTiret = InStr(IntAct, "-")
        BorneMin = Val(Mid$(IntAct, 2, PosTiret - 2))
        BorneMax = Val(Mid$(IntAct, PosTiret + 1, Len(IntAct) - PosTiret - 1))
        If Cells(LigDeb - 1, ColDeb + 1) >= BorneMin And Cells(LigDeb - 1, ColDeb + 1) <= BorneMax Then OK = True
    Loop Until (PosEspace = 0 Or OK = True)
    Cells(Ligne, ColDeb + 1) = OK
    Ligne = Ligne + 1
Wend

End Sub
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Re : Comment identifier si une valeur est contenue dans un intervalle "[x-y]" ?

Je ne sais pas quel code tu as utiliser, mais si c'est celui que j'ai posté, peux-tu me dire quels ajustements il a fallu apporter s'il te plait car chez moi ça semblait fonctionner correctement ? Mais il est vrai que j'avais peut-être mal saisi le problème.
 
Dernière édition:

Discussions similaires

Réponses
9
Affichages
114