Trouver intervalle à partir d'une saisie

Bonjour,

Je souhaiterai savoir si il est possible de faire comprendre à excel la recherche d'intervalles.

Dans le fichier que j'ai mis en PJ qui sert d'exemple, est-il possible d'écrire une valeur dans userform et en cliquant sur le bouton "rechercher", excel fasse un tri des données du tableur ?

Par exemple si je marque 6, il doit me trouver l'intervalle 3 à 9.

Je n'ai pas vu de post comme celui-ci.

Je pense que cela doit être compliqué à réaliser.

Merci d'avance pour vos réponses

Bonjour Floflo, bonjour le forum,

Mais quel est le critère ? Pourquoi 6 devrait renvoyer 3 à 9 (qui n'existe même pas dans ton tableau) ? Je ne vois pas le rapport entre ton énoncé et ton fichier exemple...

Rebonjour,

Par rapport à mon tableau il s'agit d'un filtre que je veux faire, si je marque 3 dans le userform.

Il doit me filtrer mon tableur en gardant les les lignes 2,3,9 et 10 car il doit comprendre que 3 est compris entre 1 à 6; 2 à 12 ; 2 à 21; 3 à 6.

C'est plus clair pour vous ?

Bonjour Floflo, bonjour l forum,

Heu... Pas que pour moi je pense ! Ça n'a rien a voir avec ton premier post...

C'est assez complexe mais on devrait y arriver. Je regarde ça se soir car a présent je n'ai pas le temps...

Oui pas de soucis, limite je t'enverrai mon fichier de projet plus tard je suis pas sur le bon PC en t'expliquant plus clairement ce que j'aimerai avoir.

Bonjour Floflo, bonjour le forum,

Une solution mais je n'ai pas le temps de commenter le code... À la maison je prendrai le temps de mieux tester et de commenter.

11floflo-v01.xlsm (24.03 Ko)

Bonsoir Floflo, bonsoir le forum,

Comme promis le code légèrement amélioré et commenté :

Private Sub CommandButton1_Click()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As Variant 'déclare la variable tc (Tableau de Cellules)
Dim I As Integer 'déclare la variable I (Incrément de ligne)
Dim VL(1 To 2) As Long 'déclare le tableau de variables VL (Valeurs Limites)
Dim TL() As Variant 'déclare la variable TL (Tableau de Lignes)

Set O = Sheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
TC = O.Range("A1").CurrentRegion 'définit le tableau de cellules TC (à adapter à ton cas)
K = 1 'initialise K
For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes I du tableau de cellules TC (en partant de la seconde)
    VL(1) = CLng(Split(TC(I, 1), "à")(0)) 'définit la limite inférieure de l'intervale VL(1)
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    VL(2) = CLng(Split(TC(I, 1), "à")(1)) 'définit la limite supérieure de l'intervale VL(2) (génère ujne erreur si "infini")
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err = 0 'annule l'erreur
        VL(2) = 2147483647 'redéfinit la limite suppérieur VL(2) (c'est le maximum d'une variasble de type long)
    End If 'fin de la condition
    'condition si la valeur de la TextBox1 (convertie en Long) est comprise entre les deux limites VL(1) et VL(2)
    'génère une erreur si texte ou dépacement de capacité dans la TextBox1
    If CLng(Me.TextBox1.Value) >= VL(1) And CLng(Me.TextBox1.Value) <= VL(2) Then
        If Err <> 0 Then 'condition : si une erreur a été générée
            Err = 0 'annule l'erreur
            MsgBox "Valeur non valide !" 'message
            With Me.TextBox1 'prend en compte la Textbox1
                'sélectionne le textte
                .SelStart = 0 'début de la selection
                .SelLength = .TextLength 'longueur de la sélection
                .SetFocus 'place le curseur
                Exit Sub 'sort de la procédure
            End With 'fin de la prise en compte de la TextBox1
        End If 'fin de la condition
        On Error GoTo 0 'annule la gestion des erreurs
        ReDim Preserve TL(1 To 1, 1 To K) 'redimensionne le tableau de lignes TL
        TL(1, K) = TC(I, 1) 'récupère dans la ligne 1 colonne K  de TL la valeur en ligne I colonne 1 de TC (=> Transposition)
        K = K + 1 'incrémente K (ajoute une colonne au tableau TL)
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
'si K est égale à 1, message, vide et ferme l'UserForm, sort de la procédure
If K = 1 Then MsgBox "Aucun intevalle ne correspond!": Unload Me: Exit Sub
O.Range("G1").Resize(UBound(TL, 2), 1) = Application.Transpose(TL) 'revoie en G1 redimensionnée le tableau TL transposé
Unload Me 'vide et ferme l'UserForm
End Sub

Attention ! Ne fonctionne que si à (1 à 50) sépare les deux valeurs de l'intervalle, tout autre séparateur : 1 - 50, 1 / 50, etc... va planter

15floflo-v02.xlsm (27.68 Ko)
Rechercher des sujets similaires à "trouver intervalle partir saisie"