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