Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Contrôles et format date

13 réponses
Avatar
LydieT
Bonjour
Je voudrais lire une date en utilisant un contrôle dans une feuille.
mais le contrôle affiche aléatoirement le format date ou le format
numérique. Si je force le format je n'arrive pas à changer la date...
Comment faire ?
Merci.

10 réponses

1 2
Avatar
Gloops
LydieT a écrit, le 10/08/2012 18:54 :
Bonjour
Je voudrais lire une date en utilisant un contrôle dans une feuille.
mais le contrôle affiche aléatoirement le format date ou le format
numérique. Si je force le format je n'arrive pas à changer la date ...
Comment faire ?
Merci.




Bonjour,

C'est quoi comme contrôle ?
Avatar
LydieT
Gloops wrote in news:k051m6$8a7$1
@nntp.pasdenom.info:

LydieT a écrit, le 10/08/2012 18:54 :
Bonjour
Je voudrais lire une date en utilisant un contrôle dans une feuille.
mais le contrôle affiche aléatoirement le format date ou le format
numérique. Si je force le format je n'arrive pas à changer la date


...
Comment faire ?
Merci.




Bonjour,

C'est quoi comme contrôle ?

un textbox dans une feuille différente

Avatar
Gloops
LydieT a écrit, le 10/08/2012 18:54 :
Bonjour
Je voudrais lire une date en utilisant un contrôle dans une feuille.
mais le contrôle affiche aléatoirement le format date ou le format
numérique. Si je force le format je n'arrive pas à changer la date ...
Comment faire ?
Merci.




Sur TextBox j'ai pensé à la propriété InputMask, mais là je con fondais
avec Access.

Sous Excel, j'ai bien peur qu'en utilisant un TextBox il faille se
rabattre sur la solution indiquée par MichD, à savoir contrôler le
format de ce qui est saisi après coup, et le rejeter si ce n'est pas bo n.

Après il y a l'utilisation d'un contrôle calendrier ou équivalent, mais
il semble que sous Excel ça soit du sport. Déjà il faut avoir le
contrôle voulu sur la machine (il y en a un de fourni avec Access, avec
Excel je ne sais pas trop, voir la liste des ActiveX proposés), et
ensuite il faut ... suivre le mode d'emploi (et pour ça commencer par l e
trouver).

Le temps qu'on y met dépend de ce qu'on a fait avant, pour quelqu'un qu i
n'a pas joué avec il faut être motivé et prêt à y consacrer fac ilement
quelques jours.

Ou alors s'en mijoter un soi-même mais là on y passe du temps aussi.

Sinon on peut saisir la date dans trois TextBoxes, un pour le jour, un
pour le mois, un pour l'année, ça impose encore de faire des contrô les
de validité, mais ils permettent plus de souplesse vu du côté
utilisateur : si on rejette une date parce que le numéro de mois dépa sse
13 on peut le préciser, alors qu'avec une seule zone de texte on sera
facilement tenté de juste dire que ce n'est pas une date valide.
Et avec trois zones de saisie, l'utilisateur final n'a pas à saisir les
séparateurs.

Pour suivre plus facilement un format numérique il y a ce qu'on appelle
les toupies (spinbox) qui permettent d'augmenter ou diminuer la valeur
d'un montant donné. ça fait plus de boulot de programmation que juste dire
If Not IsDate(txtDate) Then MsgBox "Ce n'est pas une date"
mais ... selon le travail qu'on est prêt à fournir dessus on a plusie urs
niveaux de commodité pour l'utilisateur.
Avatar
LydieT
Gloops wrote in
news:k087vn$3p5$:

LydieT a écrit, le 10/08/2012 18:54 :
Bonjour
Je voudrais lire une date en utilisant un contrôle dans une feuille.
mais le contrôle affiche aléatoirement le format date ou le format
numérique. Si je force le format je n'arrive pas à changer la date


...
Comment faire ?
Merci.




Sur TextBox j'ai pensé à la propriété InputMask, mais là je confondais
avec Access.

Sous Excel, j'ai bien peur qu'en utilisant un TextBox il faille se
rabattre sur la solution indiquée par MichD, à savoir contrôler le
format de ce qui est saisi après coup, et le rejeter si ce n'est pas
bon.

Après il y a l'utilisation d'un contrôle calendrier ou équivalent,
mais il semble que sous Excel ça soit du sport. Déjà il faut avoir le
contrôle voulu sur la machine (il y en a un de fourni avec Access,
avec Excel je ne sais pas trop, voir la liste des ActiveX proposés),
et ensuite il faut ... suivre le mode d'emploi (et pour ça commencer
par le trouver).

Le temps qu'on y met dépend de ce qu'on a fait avant, pour quelqu'un
qui n'a pas joué avec il faut être motivé et prêt à y consacrer
facilement quelques jours.

Ou alors s'en mijoter un soi-même mais là on y passe du temps aussi.

Sinon on peut saisir la date dans trois TextBoxes, un pour le jour, un
pour le mois, un pour l'année, ça impose encore de faire des contrôles
de validité, mais ils permettent plus de souplesse vu du côté
utilisateur : si on rejette une date parce que le numéro de mois
dépasse 13 on peut le préciser, alors qu'avec une seule zone de texte
on sera facilement tenté de juste dire que ce n'est pas une date
valide. Et avec trois zones de saisie, l'utilisateur final n'a pas à
saisir les séparateurs.

Pour suivre plus facilement un format numérique il y a ce qu'on
appelle les toupies (spinbox) qui permettent d'augmenter ou diminuer
la valeur d'un montant donné. ça fait plus de boulot de programmation
que juste dire If Not IsDate(txtDate) Then MsgBox "Ce n'est pas une
date" mais ... selon le travail qu'on est prêt à fournir dessus on a
plusieurs niveaux de commodité pour l'utilisateur.






la solution de MichelD fonctionne si tout est dans la même feuille
mais ma base de données est dans une autre feuille et la ça marche plus.
Avatar
Gloops
LydieT a écrit, le 12/08/2012 14:17 :
C'est quoi comme contrôle ?



un textbox dans une feuille différente



Ah oui j'ai vu l'autre fil, après. C'est sur une UserForm, n'est-ce pas ?

Du coup j'ai répondu en fonction du TextBox ...
Et en ouvrant des pistes pour aller plus loin si ça te chante.
Avatar
Gloops
LydieT a écrit, le 12/08/2012 14:38 :
la solution de MichelD fonctionne si tout est dans la même feuille
mais ma base de données est dans une autre feuille et la ça marche plus.



Ah ça je n'ai pas vu.
J'imagine qu'il faut préfixer tous les champs avec la feuille.
Je regarde ...
Avatar
Gloops
LydieT a écrit, le 12/08/2012 14:38 :
la solution de MichelD fonctionne si tout est dans la même feuille
mais ma base de données est dans une autre feuille et la ça marche plus.




J'allais dire, vous ne vous êtes pas compris, c'est forcément une
feuille différente puisque la saisie est faite dans une UserForm, et le s
données sont dans une Worksheet (feuille de saisie personnalisée,
feuille de données).

Mais ... ça se peut bien que ce coup-là, MichD ait fait comme moi
souvent : donner la solution au fil du clavier sans tester :)

Effectivement, quand on parle de TextBox, c'est dans la UserForm. Donc,
si le code est dans la Worksheet, en préfixant le TextBox par Me, on ne
va pas le trouver.

Pour le traiter à ce niveau-là, on ferait
Dim U As UserForm
Set U = ThisWorkbook.UserForms(nomdelafeuilledesaisie)

et remplacer
Me.TextBox1 = Target.Text
par
U.TextBox1 = Target.Text


en ayant vérifié que le TextBox soit déclaré en Public, là je v ais
laisser MichD concrétiser au besoin parce que sans le produit sous la
main ...

Maintenant que j'ai dit ça, j'aimerais vérifier ce que la saisie dans le
TextBox, sur le UserForm, déclenche comme événement.

Est-ce que ça ne serait pas plus simple à gérer à cet endroit-là ?

Dans le style :

If Not IsDate(TextBox1) Then
MsgBox "Attention " & TextBox1 & " n'est pas une date valide"
TextBox1.SetFocus
End IF

Bien sûr il faut tester. Comme je n'ai pas Excel sous la main je me
contente de proposer l'idée.
Avatar
MichD
| la solution de MichelD fonctionne si tout est dans la même feuille
| mais ma base de données est dans une autre feuille et la ça marche plus.

La procédure suivante doit être mise dans la feuille module où tu insères ta date
la cellule manuellement

Dans cette expression " Feuil1.TextBox1.Value" Feuil1 est la propriété "Name" de
la feuille visible seulement dans la fenêtre de l'éditeur de code et non le nom de
l'onglet
de la feuille.

Il te reste à adapter l'adresse de la cellule désirée, le nom du textbox et la propriété
"Name"
de ladite feuille.

'---------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("A1").Address Then
If IsDate(Target) Then
Feuil1.TextBox1.Value = Target.Text
Else
MsgBox "le contenu de la cellule """ & Target.Address & _
"""" & " n 'est pas reconnu comme une date."
End If
End If
End Sub
'---------------------------------
Avatar
Gloops
Gloops a écrit, le 12/08/2012 15:02 :
J'allais dire, vous ne vous êtes pas compris



Et c'est peut-être bien ça l'explication : c'est dans ce deuxième f il
que tu as précisé que le TextBox était sur une feuille de saisie
personnalisée. MichD avait déjà écrit sa macro.
Avatar
Gloops
MichD a écrit, le 12/08/2012 15:08 :
'---------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("A1").Address Then
If IsDate(Target) Then
Feuil1.TextBox1.Value = Target.Text
Else
MsgBox "le contenu de la cellule """ & Target.Address & _
"""" & " n 'est pas reconnu comme une date."
End If
End If
End Sub
'---------------------------------





Est-ce que tu n'aurais pas redit la même chose d'une autre façon ?
ça marche si le TextBox est sur la feuille de données.
1 2