Bonjour,
D'habitude j'arrive à bricoler mes routines excel dans mon coin, en m'appuyant de recherches sur les forums, et en adaptant à mon petit projet...mais là...je m'arrache les cheveux depuis pas mal de jours sur un (petit ?) problème.
J'ai un classeur avec plusieurs pages. J'y engrange des informations de pannes de systèmes de soins, et souhaite l'assortir d'une recherche sur les données enregistrées afin de retrouver les solutions des pannes du passé. ça marche sur une version qui scanne tous les enregistrements à ce jour. J'anticipe le jour où il y aura beaucoup, beaucoup d'enregistrements, et souhaite que l'utilisateur puisse filtrer sa recherche sur une période de dates définies.
J'ai trouvé sur developpez.net quelques (élégantes) solutions qui utilisent des textbox.
Le code que j'ai construit, avec votre aide donc, permet la saisie de la date de début et de la date de fin de la recherche. IL teste que l'utilisateur saisisse bien des chiffres (autre chose que des chiffres met le fond de la box en rouge et affiche un message d'alerte). Au 8e caractère saisit, je voudrais que la date soit reconstruite (JJ/MM/AAAA).
Soucis :
- si je met longueur=7, il faut taper un 8e caractère pour que le résultat s'affiche dans la box (et l'année est fausse puisqu'au moment du calcul il n'y a que 7 caractères dans la texbox).
- si je met longueur=8, il faut taper un 9e caractère pour que le résultat s'affiche dans la box (pas intuitif pour l'utilisateur). Je sais pas utiliser la touche entrée pour valider ma saisie (je sais pas la gérer dans VBA).
- Je n'arrive pas non plus à transférer le focus de ma textebox "date début" vers ma texbox"datefin" quand la première saisie est terminée.
Mon souhait : qu'à la frappe du 8e caractère de la date le code affiche dans la texbox la date reformatée avec les "/", et positionne le curseur sur la texbox suivante.
Existe-t-il une solution à mes tourments ?
merci de votre aide !
La macro que je dépose est pour la textbox de saisie de la date de fin. L'autre est exactement la même pour la date de début.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 Private Sub TextBoxDateFinSearch_KeyPress(ByVal Cancel As MSForms.ReturnBoolean) Dim jour, mois, annee As String If Len(TextBoxDateFinSearch) = 8 Then '(testé avec "7", mais dans ce cas l'année est fausse) jour = Left(TextBoxDateFinSearch.Value, 2) mois = Mid(TextBoxDateFinSearch.Value, 3, 2) annee = Right(TextBoxDateFinSearch.Value, 4) 'ci-après tests de validité de la date saisie If jour = 0 Or jour > 31 Then MsgBox "Jour impossible : recommencez votre saisie." GoTo finsaisieDateFin End If If mois = 0 Or mois > 12 Then MsgBox "Mois impossible : recommencez votre saisie." GoTo finsaisieDateFin End If If annee < 2020 Then MsgBox "Pas de données antérieures à l'année 2020 : recommencez votre saisie." GoTo finsaisieDateFin End If If annee > Year(Date) Then MsgBox "Les recherches dans le futur ne sont pas encore possibles : recommencez votre saisie (année)." GoTo finsaisieDateFin End If 'construction de la date formatée comme je la veux TextBoxDateFinSearch.Value = jour & "/" & mois & "/" & annee 'message si utilisateur continue à saisir des chiffres MsgBox "Nombre de caractères maximaux atteint. Cliquez dans le champs de DATE FIN, ou appuyer sur RAZ pour recommencer une nouvelle saisie", vbOKOnly, "GESPAN" KeyAscii = 0 GoTo finsaisieDateFin End If 'Si utilisateur continue à rentrer des caractères, pour éviter un recalcul de la date If Len(TextBoxDateFinSearch) >= 8 Then KeyAscii = 0 MsgBox "Nombre de caractères maximaux atteint. Lancez la recherche ou appuyer sur RAZ pour recommencer une nouvelle saisie", vbOKOnly, "GESPAN" End If If Len(TextBoxDateFinSearch.Value) < 8 Then If InStr("0123456789", VBA.Chr(KeyAscii)) = 0 Then TextBoxDateFinSearch.BackColor = &H80000005 KeyAscii = 0 TextBoxDateFinSearch.BackColor = &HFF& MsgBox "Format de saisie JJMMAAAA (chiffres uniquement, sans Slash)", vbOKOnly, "GESPAN" TextBoxDateFinSearch.BackColor = &H80000005 End If End If finsaisieDateFin: End Sub
Partager