S'assurer que 2 mots ne sont pas réservés sous VB6

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 5 avril 2007 à 09:17
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 - 6 avril 2007 à 08:56
Bonjour,

Question étrange, mais je ne possède pas VB6 et ne peux vérifier.

Je suis en train de concocter un petit code astucieux destiné à éviter d'utiliser un DTPicker pour la saisie des dates et heures sous différents formats.
Ce petit code sera ensuite déposé.
Mon problème ?
Je me suis déjà fait avoir une fois avec un mot (split) non réserevé sous VB5 (où il n'existe pas)  mais réservé sous VB6 ....!

Question donc :
Est-ce que le mot FormatDate est un mot réservé sous VB6 ?
Kif kif avec le mot FormatHeure ?


Sous VB5, ces 2 mots ne posent pas problème, mais je n'en sais rien en ce qui concerne VB6.

19 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 avril 2007 à 09:36
Non à ma connaissance, il ne sont pas réservés sous VB6

Toujours à ma connaissance, les seul mots manquant en VB5 sont les intructions relative aux manipulation de chaines (Split, Join, InstrRev, ....)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 avril 2007 à 09:38
Salut [auteurdetail.aspx?ID=615490 jmfmarques],
Ces deux mots ne sont pas réservé en VB6
En revanche il existe ceci:
FormatDateTime(Expression, [NamedFormat as VbDateTimeFormat = vbGeneralDate])As String

Si ce n'est pas indiscret que cherches tu a faire car peu être qu'en VB6 il est plus simple de le faire.
@+: Ju£i?n
Pensez: Réponse acceptée
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 avril 2007 à 09:52
Bonjour Julien,

Contrôler, sans ocx (l'arrivée de Vista en est une raison de plus) la saisie de dates et celle d'heures.
Avec :
Contrôle à la saisie tout au long de la saisie
Ajout automatique des séparateurs
Formatage prédéfini simplement pour faire face aux différentes façons de présenter une date (JJ/MM/AAAA, MM/JJ/AAAA ou AAAA/MM/JJ)
Choix du séparateur pour les dates (/ - ou espace)
- une seule ligne de code à envoyer depuis l'appli  (dans le code de le textbox) : 


 


exemple :  saisie_date Text1   (ou saisie_date est une sous routine)
et une constante de format à choisir :
exemple
Const mon_format_date = "JJ/MM/AAAA"

Le tout permettant les effacements arrières, les interventions "au milieu", etc ...

Une vingtaine de lignes de code pour la sous-routine de saisie des dates
Une quinzaine de lignes pour celle de saisie des heures

Mon travail est déjà passablement avancé et il est assez drôle...
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
5 avril 2007 à 10:01
Salut,
Je ne sais pas si tu connais  (ou bien encore si cela te sera utile)
Mais il existe les fonctions bien utiles qui s'appellent TimeSerial et DateSerial

@+: Ju£i?n
Pensez: Réponse acceptée
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 avril 2007 à 11:31
Oui, Julien,

Je les connais bien sur (sous VB5 aussi).

Tu as simplement mal compris ce que je fais : un contrôle de saisie tout au long de la saisie elle-même, adapté aux habitudes de saisie de chacun.

Exemple en JJ/MM/AAAA

si l'utilisateur frappe 31 (le /) est ajouté... il frappe 0 çà passe... il frappe ensuite 4... ne passe pas ...

en MM/JJ/AAAA
si l'utilisateur frappe 04 (le /) est ajouté... il frappe 3 çà passe... il frappe ensuite 1... ne passe pas ...

etc... etc...

Et la chose est réalisable dans tous les cas de figure (y compris si on en paramètres locaux JJ/MM/AAA et qu'il est décidé de saisir quand-même, par exemple, en AAAA/MM/JJ ou MM/JJ/AAAA  et vice-versa....).

Le tout sans se servir de l'événement Keypress
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
5 avril 2007 à 11:56
Salut JMF,

Si j'étais toi j'opterais pour des termes français. Il n'y aura donc pas de risque. Il s'agit, par contre, de maîtriser assez l'anglais pour savoir si oui ou non le mot est identique dans les 2 langues...
Dans le cas de FormatHeure, pas de problème.
Dans le cas de FormatDate, même si ce mot n'est pas encore réservé, il pourrait éventuellement le devenir...

L'insertion d'un caractère souligné pourrait aussi apporter une certaine protection, je pense. Je ne me rappelle pas de mots réservés incluant ce caractère (?)

Et j'ai bien hâte voir ta tactique des dates...

MPi
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 avril 2007 à 12:05
Bonjour MPI,

Pas de secrets ! Voilà où j'en suis, donc (ce n'est pas encore fini... il me manque à gérer des corrections de l'utilisateur).

Option Explicit
Const mon_format_date = "JJ/MM/AAAA"
Const mon_format_heure = "HH:MM:SS"


' les deux formats ci-dessus peuvent, à votre guise, être transgormés en JJ-MM-AAAA, JJ MM AAAA,
' MM/JJ/AAAA, MM-JJ-AAAA, MM JJ AAAA, AAAA/MM/JJ, AAAA-MM-JJ ou AAAA MM JJ (pour les dates)
' et EN "HH:MM" pour les heures (si vous ne voulez pas des secondes
'




Private Sub Text1_Change()
    saisie_date Text1
End Sub


Private Sub Text2_Change()
   saisie_heure Text2
End Sub




Private Sub saisie_date(quoi As TextBox)
    Static deja As String
    Dim sais As String, ou As Integer, ou1 As Integer
    Dim rf As String, rf1 As String, sp As String, erreur As Boolean
    sais = quoi.Text
    If Len(sais) < Len(deja) Then deja = sais: Exit Sub
    sp = Mid(mon_format_date, 3, 1)
    rf = "01" & sp & "10" & sp & "2000"
    rf1 = "01" & sp & "03" & sp & "2000"
    ou = 4
    Select Case UCase(Left(mon_format_date, 1))      Case Is "M": ou 1
      Case Is = "A"
        sp = Mid(mon_format_date, 5, 1)
        rf = "2000" & sp & "10" & sp & "10"
        rf1 = "2000" & sp & "03" & sp & "10"
        ou = 6
    End Select
    ou1 = InStr(rf, "/") - 1    If Right(sais, 1) "0" Then rf rf1    If Len(sais) ou And Val(Mid(sais, ou)) > 1 Then erreur True
    If Not IsDate(sais & Mid(rf, Len(sais) + 1)) Or Val(Mid(sais, ou, 2)) > 12 Then
       erreur = True
    End If
    If erreur Then      quoi.Text deja: quoi.SelStart Len(deja): Beep: Exit Sub
    Else      If Len(sais) ou1 Or Len(sais) ou1 + 3 Then quoi.Text = sais & sp      deja quoi.Text: quoi.SelStart Len(deja)
    End If
    erreur = False
End Sub


Private Sub saisie_heure(quoi As TextBox)
  Static titi As String
  Dim toto As String, ref As String
  ref = "00:00:00"
  toto = quoi.Text
  If Len(toto) < Len(titi) Then titi = toto: Exit Sub
  If Not IsDate(toto & Mid(ref, Len(toto) + 1)) Then    quoi.Text titi: quoi.SelStart Len(titi): Beep: Exit Sub
  Else    If Len(toto) 2 Or Len(toto) 5 Then
      If Len(toto) < Len(mon_format_heure) Then quoi.Text = toto & ":"
    End If
    titi = quoi.Text
    quoi.SelStart = Len(titi)
  End If
End Sub


L'aspect amusant est dans le choix des dates (pas au hasard du tout et à ne pas toucher)

Si tu veux t'y pencher de ton côté et as des idées pour faire avancer la dernière étape : Bienvenue ...bien évidemment

Quand ce sera fini, je mettrai celà dans un module.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
5 avril 2007 à 17:13
Salut tout le monde,


Tu te rappelles, Marques, des appels imbiqués et successifis...?


sous reserve , à mon avis il ne faudra pas mettre ça dans Text_Change ()


If erreur Then      quoi.Text <gras>deja  : quoi.SelStart</gras> Len(deja): Beep: Exit Sub
      'relance quoi_Change () et quoi.SelStart n' est pas encore éxécuté
Else      If Len(sais) ou1 Or Len(sais) ou1 + 3 Then quoi.Text = sais & sp      deja quoi.Text: quoi.SelStart Len(deja)
      'même chose
End If


je te laisses tester pour en être sûr,
pour l' instant je vais au bain maure ..


Bonne fin de journée...


 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 avril 2007 à 17:55
Salut chaibat05

J'y ai pensé, bien évidemment, et ai donc installé une feinte pour éviter le chien que se mord la queue...

Jusqu'à présent : pas de boucle sans fin dans mes essais.
Je viens d'entamer la partie correction "à l'intérieur" (que ce soit à l'aide de suppr ou de l'effacement arrière). Il semble que je vais y parvenir également (pour un seul caractère à la fois si correction "à l'intérieur). J'en suis déjà à chercher comment faire avec le séparateur lorsque l'on corrige à l'intérieur. Aucun problème, bien évidemment, si on corrige depuis la fin...
Je continue.
Il est vraisemblable que j'aurais ensuite besoin de "gratteurs" pour recenser les bugs éventuels (tâche indispensable et qui donne le tournis)
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 avril 2007 à 18:18
Re-salut !

Gagné en ce qui concerne les corrections internes (ouf)...
Il me reste à gérer maintenant le non effacement des séparateurs, mais j'ai déjà mon idée pour y parvenir sans faire une usine à gaz.

Je ferai celà un peu plus tard car j'ai maintenant vraiment le tournis, dans cette affaire.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 avril 2007 à 19:05
Bon...
La vue de la mer m'a apparemment remis les idées en place et les yeux en face des trous.
On dirait fort que tous les buts sont maintenant atteints.
Je re-regarderai celà après dîner puis réorganiserai le tout dans un module.

J'aurai alors vraiment besoin de "gratteurs" dévoués, dont la tâche serait de tenter de mettre par tous les moyens possibles l'outil en défaut.
Je sais que ce n'est pas une tâche plaisante...
Des volontaires ?
0
JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008
5 avril 2007 à 20:45
J'ai déja fait en plus simple ce type de coding.

Le format de date est en long integer.  Peut importe le format d'affichage voulu, tu conserves la date entière en long sous la forme AAAAMMJJ.  Exemple 20070404 pour le 4 avril 2007.

Au fur et a mesure que quelques chose est tapé dans le textbox, tu re-format le tout selon ton mask pré-défini.  Je me sert de l'interruption KeyPress.  Tu contrôle donc les caractère autorisé ou non et réaffiche le tout a ta guise après traitement dans le textbox.

Pour obtenir l'année, tu fais : d \ 10000 ( \ = division sans reste )
Pour obtenir le mois, tu fais : (d Mod 10000) \ 100
Pour obtenir le jour, tu fais : d Mod 100

Très simple et très rapide.  Le besoin était d'avoir de quoi de portable qui ne soit lié d'aucune façon au préférence utilisateur des options régionales de windows.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 avril 2007 à 21:17
Allez donc, JoePatent :

Mets ton code ici, que l'on en juge en parfaote connaissance de cause ...
J'en suis, en quelques années, à la 4ème mouture d'un code de cde type ... mais, ma foi, le tien nous intéresse... on l'attend donc.
J'espère qu'il gère tout, y compris les corrections "à l'intérieur" et tout et tout... car mes essais faits avec des dates juliennes n'ont jamais été probants ...
Je suis maintenant impatient de voir ton code .
.
0
JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008
5 avril 2007 à 21:50
En temps normal j'en aurais copié-collé une partie mais vue ton arrogance, je préfère te laisser dans ta bouette.

Il faut avoir un minimum d'ouverture d'esprit quand on demande de l'aide sur un forum.  Être capable d'accepter des pistes de solution autres qui puisse transformer des années d'efforts déjà investit en de quoi de totalement différent mais qui présente des avantages auxquelles nous n'avons jamais songé.

La corpation qui m'emploie l'utilise sous forme de DLL (que j'ai développé en C) et sous forme de classe (développé en vb6).

Bonne chance mon champion !
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
5 avril 2007 à 22:11
oulà ! vas y molo ... Dalton !


il n' y' a rien d' arrogant à la demande de marques ...
Au contraire , il a fait preuve de disponibilité à écouter les autres.
C' est vrai que tu n' est pas un champion de la communication
En 4 ans tu n' enregistres que 50 msg.
Peut être que tu n' as pas besoin d' aide.
Mais en même temps , tu n' en donnes pas beaucoup.

au plaisir de ne plus jamais de te réentendre.
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
5 avril 2007 à 22:14
Je pense que tu ne sais pas à qui tu t'adresse mon cher Joe.

Si Jacques se montre aussi "arrogant" comme tu dis, c'est parce qu'il en connais plus d'un rayon sur le problème et qu'il voit bien avant même que tu ne poste ton code quels problèmes ou bugs il va pouvoir y rencontrer.

Et si tu regarde un peu ses contributions sur le forum, tu constanteras que c'est extremement rare qu'il ne fasse par d'un roblème qu'il n'arrive pas à résoudre.

Je pense qu'il pourrait nous apprendre à beaucoup d'entre nous quantité de choses mais si on se condidère comme maitrisant largement VB

Quant à toi, tu nous dis que tu as fait un code indentique, tu nous laisse supposé qu'il est bien plus simple, bien plus rapide, bref bien mieux.
Tout à fait possible mais montre nous le, qu'on juge sur piece et le cas échéant que l'on puisse nous aussi progresser avec l'aide de ton expertise.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
5 avril 2007 à 22:15
Je crois qu'il n'a même pas compris de quoi il s'agissait ! (à moins qu'il n'ait même pas lu, notre champion inconnu ....)
0
JoePatent Messages postés 171 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 20 juillet 2008
5 avril 2007 à 22:30
Je pense que tu ne sais pas à qui tu t'adresse mon cher Joe.

Tu as semé un instant le doute dans mon esprit.  Alors j'ai fait mes recherches sur ses sources et sur ses nombreux commentaire "pertinants" sur le forum.

Quantité n'est pas gage de qualité c'est très clair.  Faire cette même recherche te fera comprendr emon point de vue.

Et j'ai y revues des échanges de commentaires que me porte a comprendre son attitude et me réconforte dans la mienne.

Bonne chance l'EXPERT (jmfMarques) du vb.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
6 avril 2007 à 08:56
Bonjour Joe,

Un seul mot, puisque tu parles de pertinence.

La première des pertinences est d'intervenir dans une discussion en restant dans son cadre et d'éviter de parler de navets quand le sujet traite de poireaux.

Il ne s'agit ici pas du tout de la forme sous laquelle on enregistre une date (les méthodes sont diverses pour y parvenir) afin de pouvoir l'exploiter valablement quels que soient les options retenues sur la machine d'accueil....

Il s'agit tout simplement d'une aide à la SAISIE (quelle que soit la forme de la saisie et celle de l'affichage) pour assurer, tout au long de la saisie à la fois le confort et le contrôle de cette saisie.

Je ne vois pas du tout ce que viendrait faire dans cette affaire l'emploi de dates juliennes, à un moment (la saisie) où, je crois devoir te le rappeler, la date n'existe pas encore (quelle que soit la forme sous laquelle on envisage de la stocker ensuite, ... si même on envisage de la stocker).
A moins que tu ne viennes nous exposer que ta méthode pour faciliter et contrôler cette saisie ne se résume à forcer la saisie sous la forme YYYYMMDD !......et bravo pour le confort de l'utilkisateur, tant au niveau de l'écriture qu'à celui de la lisibilité.

J'espère maintenant pour toi que tu connais tous les petits travers de VB, y compris pour ce qui est de la forme du stockage.
Sais-tu, par exemple, qu'à moins de savoir où se trouvent le mois et le jour (donc en fonction de choix) dans ##/##/####, la transformation en YYYYMMDD risque de donner( lieu à quelques jolies erreurs).
Sais-tu, par exemple, que VB reconnaitra pour valable , sur un PC paramétré pourtant en dd/mm/yyyy, la date "01/31/2001" ?

Je te propose donc, JoePatent, de lancer ce tout petit bout de code :


Private Sub Command1_Click()
  MsgBox "pour VB (et sur la même machine), la saisie de 12/13/2001 correspond " & _
  "à la date " & DateValue("12/13/2001") & vbCrLf & _
  "alors que la saisie de la date 13/12/2001 correspond elle aussi à " & _
  DateValue("13/12/2001") & vbCrLf & "Monsieur VB a malheureusement la très facheuse " & _
  "habitude de vouloir chercher la cohérence et corriger. Imagine maintenant qu'un utilisateur " & _
  "étourdi voulant frapper 12/12/2001 sur une machine française ""localisée"" en France,frappe " & _
  "par inadvertance, la date inexistante du 12/13/2001 sans aucun contrôle de sa saisie par " & _
  "rapport à sa ""localisation"" ou en se contentant de controler ""in fine"" avec If Isdate " & _
  "(qui constatera que c'est bien une date) et, sans broncher, ton appli enregistrera " & _
  "erronément la date du 13 décembre 2001 ne correspondant pas à la date que l'on  " & _
  "voulait enregistrer (et ceci : quelle que soit la forme adoptée pour le stockage " & _
  "interne de la date"
End Sub

Qui te fera comprendre l'intérêt qu'il y a à réellement contrôler la cohérence de la saisie avec le format 
 choisi pour la saisie et pour l'affichageet à ne pas se contenter de contrôler la saisie par un If Isdate(....).

Et ceci n'a absolument rien à voir avec le format d'enregistrement ....

Voilà....


 
0
Rejoignez-nous