Avis, critiques et suggestions

Bonjour à tous,

J'ai réalisé une petite application utilisant une Userform et j'aimerais bien avoir vos avis, critiques et suggestions.

Merci d’avance.

Bonjour,

Pour contraindre une saisie numérique on utilise habituellement le code suivant :

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
    Case Is < 48, Is > 57
        KeyAscii = 0
    End Select
End Sub

Prend l'habitude de définir tes plages nommées avec DECALER

exemple pour Site :

=DECALER(Données!$A$1;1;;NBVAL(Données!$A:$A)-1)

A+

Bonsoir galopin et merci pour tes astuces.

Bonjour,

Autres suggestions possibles ?

Bonjour à tous,

1) Après d'autres tests, j'ai remarqué que la saisie de 3 chiffres dans le TextBox des heures, déclenche une erreur puisque le test se fait sur 4 chiffres et non pas trois.

Exemple : Si je saisie "932" pour l'heure "09:32" une erreur est déclenchée.

Alors comment rendre cette saisie valable tout en ajoutant un zéro avant le premier chiffre pour compléter et avoir la forme hh:mm ?

2) Le deuxième problème, c'est dans le champ de recherche TextBox4.

Si je saisie par exemple "C.S" dans le TextBox4, dans la ListBox2, je n'aurais que "C.S (Rls Dhm)" c'est tout, pourtant dans la plage nommée "Env", j'ai bien deux cas similaires contenant chacune le mot "C.S" qui sont : "C.S" et "C.S (Rls Dhm)".

Comment peut-on corriger ce problème ?

Merci.

Une idée pour le 1/

    Else
        TextBox2 = Right("0000" & TextBox2, 4)
        TextBox2 = Left(TextBox2.Value, 2) & ":" & Right(TextBox2.Value, 2)
    End If

Bonjour Steelson

Le code considère qu'une telle saisie "###" est erroné !

Je crois qu'il faut voir du coté de la fonction Check_hourFormat qui déclenche l'erreur

Autre solution : séparer en 2 zones : heures et minutes ?

Bonsoir Steelson,

Merci pour l'idée, mais je la reserve plut tard en cas ou ...

Pour le moment, j'ai essayé de modifier des lignes dans la fonction Check_Hourformat comme ceci :

    If Len(m) < 3 Then Exit Function    'si la valeur saisie par l'utilisateur est inférieur à
'3 caractères, alors Check_Hourformat non conforme
    If m Like "##:##" Then m = Left(m, 2) & Right(m, 2)
    If m Like "###" Then m = "0###"
    If m Like "####" Or m Like "0###" Then
        hr = Fix(m / 100)       ' permet de récupérer la partie concernant les heures
        min = m - (hr * 100)    ' permet de récupérer la partie concernant les minutes
        If hr > 23 Or min > 59 Then Exit Function   'Vérifications des heures et minutes entrées
        Check_hourFormat = True
    End If

Mais l'erreur persiste toujours !

Bonsoir,

La solution de Steelson est pourtant la plus usité soit sous la forme de combo soit sous une forme proche du fichier joint...

Tout autre solution est compliquée à mettre en œuvre et parfois sujette à plantage.

Inutile de réinventer la roue pour les problèmes usuels...

A+

26saisiehoraire.xlsm (22.86 Ko)

Bonsoir galopin01,

Cette ligne avec le chiffre 9, sert à quoi ?

If TextBox1 > 9 Then TextBox2.SetFocus

bonsoir,

ça sert à passer la main au contrôle suivant quand tu as un nombre à 2 chiffres (autre que 00...)

Tu remarqueras que si tu entres 10, 11, ou 12 ça passe la main aux minutes.

Enfait pour TextBox1 on pourrait même écrire > 1 si on limite à 12 heures ou >2 si on limite à 23 heures...

Ainsi dès que tu rentrerais 2 ou 3... ça passerait au textBox2...

et dans les minutes de 10 à 59 ça passe la main au bouton Ok empêchant ainsi de saisir des nombres à 3 chiffres.

Dans l'exemple la saisie est limitée à 12 heures mais il est aisé de limiter à 23 heures (et même plus s'il s'agit de durée...)

A+

Bonsoir galopin01,

Merci pour explications.

Voila ce que j'ai tenté de modifier et ça marche !

J'ai ajouté cette ligne dans la fonction Check_hourFormat

If m Like "###" Then m = "0" & Left(m, Len(m) - 2) & Right(m, 2)

pour que le TextBox prend en charge la saisie de 3 chiffres.

Elle de devient :

Public Function Check_hourFormat(m As String) As Boolean
'Fonction permettant de vérifier l'heure entrée dans un TextBox par un
'utilisateur est de la forme hhmm
'checkformat renvoi 0 pour une saisie conforme, sinon 1
    Dim hr As Integer    'variable des heures
    Dim min As Integer    'variable des minutes
    If Len(m) < 3 Then Exit Function    'si la valeur saisie par l'utilisateur est inférieur à
'3 caractères, alors Check_Hourformat non conforme
    If m Like "##:##" Then m = Left(m, 2) & Right(m, 2)
    If m Like "###" Then m = "0" & Left(m, Len(m) - 2) & Right(m, 2)   '"0###"
    If m Like "####" Then
        hr = Fix(m / 100)       ' permet de récupérer la partie concernant les heures
        min = m - (hr * 100)    ' permet de récupérer la partie concernant les minutes
        If hr > 23 Or min > 59 Then Exit Function   'Vérifications des heures et minutes entrées
        Check_hourFormat = True
    End If
End Function

Et dans l’événement TextBox2_Exit(), j'ai ajouté cette ligne :

TextBox2 = Format(Left(TextBox2.Value, Len(TextBox2.Value) - 2), "00") & ":" & Right(TextBox2.Value, 2)
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'evenement LostFocus utilisé, ainsi la procédure s'exécute
'lors de la perte du focus par le contrôle TextBox2
'cette procédure appelle la fonction check_HourFormat

'si check_HourFormat = VRAI (True), elle formate le TextBox2 dans la forme hh:mm
    If TextBox2.Value = "" Then Exit Sub
    If Not Check_hourFormat(TextBox2.Value) Then
        MsgBox "le format de l'heure saisie n'est pas valide", vbExclamation, "Erreur de saisie"
        TextBox1.Value = ""
        Cancel = True
    Else
        TextBox2 = Format(Left(TextBox2.Value, Len(TextBox2.Value) - 2), "00") & ":" & Right(TextBox2.Value, 2)
    End If
End Sub

Bonjour à tous,

apt a écrit :

2) Le deuxième problème, c'est dans le champ de recherche TextBox4.

Si je saisie par exemple "C.S" dans le TextBox4, dans la ListBox2, je n'aurais que "C.S (Rls Dhm)" c'est tout, pourtant dans la plage nommée "Env", j'ai bien deux cas similaires contenant chacune le mot "C.S" qui sont : "C.S" et "C.S (Rls Dhm)".

Comment peut-on corriger ce problème ?

Merci.

Bonsoir,

Quelqu'un peut-il avoir l'amabilité de proposer une l'idée autour du sujet ?

Bonjourn

Fournir un fichier qui illustre la question SVP

A+

Bonsoir galopin01,

Voila en PJ.

Bonjour,

ça m'agace ton truc, c'est incompréhensible et déroutant.

Il n'y a que 3 colonnes à remplir mais 3 TextBox et 2 ListBox dont les données ne correspondent pas forcément aux tables "Données" Met de l'ordre dans ce souk supprime les contrôles inutiles et revient quand tu auras fait le ménage.

je passe la main pour l'instant.

A+

Bonjour,

Bon, la ListBox2 dépend du choix fait le ComBox1.

Si la plage "Env" est choisie dans la liste déroulante, ses éléments sont affichés dans ListBox2.

Dans cette dernière, lors d'une saisie de la première lettre dans le TextBox4, un filtre est appliqué dans la liste ListBox2 pour ne laisser que les occurrences correspondantes au mot recherché, d’où mon soucis quand je tape "C.S", la liste m'affiche seulement "C.S (Rls Adh)" au lieu de "C.S" et "C.S (Rls Adh)".

Le problème est dans cette ligne :

If LCase(c) <> "" And LCase(c) Like "*" & TextBox4.Value & "*" Then

Bonsoir,

La ligne qui pose problème dans ce moteur de recherche, c'est celle-là :

ListBox2.Clear

A chaque balayage de la plage, l’occurrence déjà trouvée sera effacée de la liste.

Donc, j'ai déplacé cette ligne en dehors de la boucle et ça marche

    Else
    ListBox2.Clear
        For Each c In Range(X).Value
            If LCase(c) <> "" And LCase(c) Like "*" & TextBox4.Value & "*" Then
                'ListBox2.Clear
                ListBox2.AddItem c
            End If
        Next
    End If

Rechercher des sujets similaires à "avis critiques suggestions"