Avis, critiques et suggestions

Y compris Power BI, Power Query et toute autre question en lien avec Excel
a
apt
Membre dévoué
Membre dévoué
Messages : 564
Inscrit le : 9 mars 2006
Version d'Excel : 2007 FR

Message par apt » 17 janvier 2015, 22:39

Bonsoir galopin01,

Cette ligne avec le chiffre 9, sert à quoi ?
If TextBox1 > 9 Then TextBox2.SetFocus
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 5'602
Appréciations reçues : 64
Inscrit le : 18 septembre 2008
Version d'Excel : 2010 / 2016
Téléchargements : Mes applications

Message par galopin01 » 17 janvier 2015, 23:20

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+
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
a
apt
Membre dévoué
Membre dévoué
Messages : 564
Inscrit le : 9 mars 2006
Version d'Excel : 2007 FR

Message par apt » 19 janvier 2015, 23:47

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

:)
a
apt
Membre dévoué
Membre dévoué
Messages : 564
Inscrit le : 9 mars 2006
Version d'Excel : 2007 FR

Message par apt » 21 janvier 2015, 22:24

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.
a
apt
Membre dévoué
Membre dévoué
Messages : 564
Inscrit le : 9 mars 2006
Version d'Excel : 2007 FR

Message par apt » 22 janvier 2015, 19:58

Bonsoir,

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

:D
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 5'602
Appréciations reçues : 64
Inscrit le : 18 septembre 2008
Version d'Excel : 2010 / 2016
Téléchargements : Mes applications

Message par galopin01 » 22 janvier 2015, 21:33

Bonjourn
Fournir un fichier qui illustre la question SVP
A+
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
a
apt
Membre dévoué
Membre dévoué
Messages : 564
Inscrit le : 9 mars 2006
Version d'Excel : 2007 FR

Message par apt » 22 janvier 2015, 23:27

Bonsoir galopin01,

Voila en PJ.
USF_Maj_Tab_v001.xlsm
(54.07 Kio) Téléchargé 17 fois
Avatar du membre
galopin01
Passionné d'Excel
Passionné d'Excel
Messages : 5'602
Appréciations reçues : 64
Inscrit le : 18 septembre 2008
Version d'Excel : 2010 / 2016
Téléchargements : Mes applications

Message par galopin01 » 23 janvier 2015, 11:54

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+
VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
a
apt
Membre dévoué
Membre dévoué
Messages : 564
Inscrit le : 9 mars 2006
Version d'Excel : 2007 FR

Message par apt » 23 janvier 2015, 12:35

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
a
apt
Membre dévoué
Membre dévoué
Messages : 564
Inscrit le : 9 mars 2006
Version d'Excel : 2007 FR

Message par apt » 23 janvier 2015, 14:20

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 :mrgreen:
    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
:)
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message