
| auteur : Team Access |
La réponse expéditive serait : Parce qu'il est fait pour cela et donc il est le mieux adapté !
En fait, il y a souvent confusion entre les données réellement stockées dans la base et le format d'affichage.
Pour simplifier, sachez que l'on stocke les données horaires (dates, heures, durées) dans des champs de type Date/Heure, mais que l'on affiche des chaines de caractères (String).
Dans une application, quelques fois vous afficherez mardi 26 août 2003 et d'autres fois 26/08/03... Tous les formattages sont possibles. Mais du moment que l'on dinstingue correctement les notions de stockage et d'affichage, l'utilisation de plusieurs formats d'affichage n'empêche pas de stocker l'information suivant un seul et même principe : celui du type Date/Heure.
Utiliser un champ de type Date/Heure plutôt qu'un ou plusieurs champ texte ou numérique pour stocker vos données horaires rend votre système de données plus cohérent, plus performant et plus souple à maintenir.
En effet, les données de type Date étant en interne des valeurs numériques de type Réel double mais le type Date étant lui-même reconnu par Visual Basic, vous disposez de nombreuses fonctions permettant d'automatiser et réaliser vos traitements précis des données horaires (formattage, extraction d'une partie de la date, addition/soustraction de durées...).
Une date est en fait une valeur décimale en nombre de jours depuis le samedi 30 décembre 1899 à 00:00. Pour le vérifier, exécutez le code suivant :
Remarque : les durées constituent un cas un peu spécifique et peuvent ne pas être stockées dans un champ Date.
|
| auteur : Team Access | Par défaut MS-Access formate les champs date/heure comme des dates et non comme des durées. Lorsque les valeurs sont supérieures à 24 heures on est obligé de passer par des fonctions, car contrairement à Excel, ce format n'existe pas dans MS-Access.
Quand on utilise un champ de type date formaté pour afficher les heures, en fait MS-Access ne donne pas le nombre d'heures au total mais il extrait de la date l'heure qui lui correspond.
MsgBox Format (Now ," hh:nn:ss " )
|
Voici 2 fonctions qui renvoient une chaîne de caractères, elles ne doivent donc être utilisées que pour l'affichage.
Celle-ci renvoie la durée sous la forme Jour J Heure:minutes:secondes
Function JourHeure (dtm As Date ) As String
JourHeure = " "
If CDbl (dtm) > 1 Then
JourHeure = CInt (dtm - 0 . 5 ) & " J "
End If
JourHeure = JourHeure & Format (dtm," hh:nn:ss " )
End Function
|
Tandis que celle-la renvoie la durée sous la forme Heure:minutes:secondes
Function HeureSup24 (dtm As Date ) As String
HeureSup24 = DateDiff (" h " , 0 , dtm)
HeureSup24 = HeureSup24 & Format (dtm, " :nn:ss " )
End Function
|
Comment stocker et gérer les informations relatives aux Durées ?
MS-Access gère les données des champs Date/Heure comme des dates et non comme des durées. Il n'existe pas comme dans Excel, de type ou de format pour les durées.
Faut-il utiliser le type Date ou bien faut-il préférer un type Entier numérique pour stocker des durées ?
Pour savoir comment déterminer notre choix, détaillons nos besoins.
Une durée peut être exprimée en une ou plusieurs unités dont les plus utilisées sont :
- Centième
- Seconde
- Minute
- Heure
- Jour
- Semaine
- Mois
- Année
NOTE : une durée en mois ou en année est subjective, tout dépend de la convention prise. Par exemple en comptabilité on définit : 1 Mois = 30 jours, une année = 360 jours. Donc dire que deux dates sont séparées d'un mois tout juste n'est pas vraiment exact.
De nombreuses combinaisons sont possibles pour représenter précisément une durée. Lorsqu'une durée est représentée à travers plusieurs unités, la plus grande unité peut ne pas avoir de limite dans sa valeur. Mais ce n'est pas le cas des unités inférieures qui, passée une certaine valeur, incrémentent l'unité immédiatement supérieure et reviennent à zéro.
Ces rappels élémentaires sont nécessaires pour bien comprendre comment utiliser le type Date/Heure afin de stocker des durées.
En effet, les formats de champs Date/Heure qu'autorise Access ne vous laisserons combiner que trois unités au maximum: Heure, Minute et Seconde.
En outre, chaque unité possède une limite de valeur qu'elle ne peut dépasser ; comme nous le savons tous : 23 pour les heures, 59 pour les minutes et les secondes.
Ce sont les deux limites qu'impose Access pour le formatage des heures. Et ces limites sont bien compréhensibles puisque les formats sont prévus pour être appliqués à des heures et non à des durées.
En conclusion, le type Date/Heure est pratique et "transparent" tant que vous ne devez pas sortir de ces limites.
Dans le cas contraire, l'utilisation de ce type revient à coder la durée sur un nombre décimal. La partie entière représentera le nombre de jours complètement écoulés depuis une date référence fixée arbitrairement au 30/12/1899. La partie décimale représentera, le cas échéant, la fraction écoulée du dernier jour s'il n'est pas complètement écoulé.
Pour gérer des durées aux des formats "sans limites", il est souvent plus pratique de recourir à un champ de type entier numérique.
Ce champ correspondra tout simplement à l'unité la plus petite nécessaire à vos formats d'affichage. Généralement, le type Long est très suffisant.
Ceci dit, que vous ayez choisi de stocker vos données sous un type numérique entier ou sous le type Date/Heure, dès lors que les formats d'heure autorisés par Access pour les champs de type Date/Heure ne vous conviennent pas, vous serez obligés de développer vos propres fonctions pour afficher vos durées dans la/les unité(s) voulues.
Voici donc quelques exemples de telles fonctions.
Attention : ces fonctions renvoient une chaîne de caractères, elles ne doivent donc être utilisées que pour l'affichage.
Stockage des durées dans un champ de type Date/Heure.
Renvoyer la durée sous la forme Jour J Heure:minutes:secondes
Ici, l'unité des jours n'a pas de limite de valeur et les jours sont comptés à partir du 30/12/1899. (cf. lien en bas)
Function JourHeure (dtm As Date ) As String
JourHeure = " "
If CDbl (dtm) > 1 Then
JourHeure = CInt (dtm - 0 . 5 ) & " J "
End If
JourHeure = JourHeure & Format (dtm," hh:nn:ss " )
End Function
|
Renvoyer la durée sous la forme Heure:minutes:secondes
Ici, l'unité des heures n'a pas de limite de valeur et les heures sont comptés à partir du 30/12/1899. (cf. lien en bas)
Function HeureSup24 (dtm As Date ) As String
HeureSup24 = DateDiff (" h " , 0 , dtm)
HeureSup24 = HeureSup24 & Format (dtm, " :nn:ss " )
End Function
|
A vous ensuite d'adapter ces fonctions à vos besoins exacts.
|
lien : Comment fonctionne le type Date/Heure ?
|
| auteur : Maxence HUBICHE |
Function LastDayOfMonth (ByVal LaDate As Date ) As Date
LastDayOfMonth = CDate (DateSerial (Year (LaDate), Month (LaDate) + 1 , 0 ))
End Function
|
Pour obtenir des information plus précises comme par exemple le nom ou le numéro du dernier jour, vous pouvez vous contenter d'utiliser cette partie de code :
DateSerial (Year (LaDate), Month (LaDate) + 1 , 0 )
|
comme argument Date d'une fonction Day() ou DatePart()...
Par exemple, ceci vous donnera uniquement le numéro du jour : Dim derJour As Integer
LaDate = Date
derJour = Day (DateSerial (Year (LaDate), Month (LaDate) + 1 , 0 ))
MsgBox derJour
|
|
lien : Comment récupérer les informations d'une date (quantième, trimestre ...) ?
|
| auteur : Team Access |
Pour calculer la différence entre deux dates, il faut utiliser la fonction DateDiff.
DateDiff (interval, date1, date2)
|
Où interval est une chaine de caractères correspondant à l'intervalle à prendre en compte.
- y Année
- m Mois
- d Jour
- h Heure
- n Minute
- s Seconde
- q Trimestre
- w Semaine
DateDiff (" s " , #1 / 1 / 1990 #, #1 / 1 / 1992 #)
|
|
| auteurs : Cafeine, Tofalu |
Première possibilité :
Function CalculAge (ByVal Dat1 As Date , ByVal Dat2 As Date ) As Integer
If Month (Dat2) > Month (Dat1) Then
CalculAge = DateDiff (" yyyy " , Dat1, Dat2)
ElseIf Month (Dat2) = Month (Dat1) Then
If Day (Dat2) >= Day (Dat1) Then
CalculAge = DateDiff (" yyyy " , Dat1, Dat2)
Else
CalculAge = DateDiff (" yyyy " , Dat1, Dat2) - 1
End If
Else
CalculAge = DateDiff (" yyyy " , Dat1, Dat2) - 1
End If
End Function
|
Seconde possibilité :
Function CalculAge2 (dateNaissance As Date , Optional dateReference As Date )
If dateReference = 0 Then dateReference = Date
CalculAge2 = Year (dateReference) - Year (dateNaissance) + _
(Format (dateNaissance, " mmdd " ) > Format (dateReference, " mmdd " ))
End Function
|
Le paramètre dateReference est optionnel. Ainsi, s'il n'est pas précisé, ce sera la date du système qui sera utilisé.
Exemples :
Age aujourd'hui
MsgBox CalculAge2 (#06 / 22 / 1983 #)
|
Age le 15 novembre 2005
MsgBox CalculAge2 (#06 / 22 / 1983 #,#11 / 15 / 2005 #)
|
|
| auteur : Demco | Ajouter des jours, des mois ou des années à une Date :
Voici le code VBA pour :
Ajouter 3 mois à la date.
DateAdd (" m " , 3 , #05 / 20 / 2003 #)
|
Ajouter 3 jours :
DateAdd (" d " , 3 , #05 / 20 / 2003 #)
|
Ajouter 3 années :
DateAdd (" yyyy " , 3 , #05 / 20 / 2003 #)
|
ATTENTION : La date doit être au format : mm/jj/aaaa
|
| auteur : Team Access | Il faut aller dans les paramètres régionaux de Windows et changer le format à sa guise.
|
| auteur : grafikm_fr | Vous avez un champ ou simplement une valeur contenant un nombre de secondes, et vous souhaitez changer son format.
Exemple pour 32295 secondes :
Solution 1 :
Il faut diviser 32295 par 3600 et garder la partie entière : 8. Nous avons le nombre d'heure.
Ensuite il faut calculer le reste de : 32295 - 3600*8 = 3495
Il reste donc 3495 secondes.
Pour avoir les minutes, c'est comme pour les heures, sauf que l'on divise par 60:
3495/60 => 58
Puis :
3495 - 58*60 => 15
Donc le résultat est 8:58:15
Solution 2 :
TimeSerial(0,0,32295) -> 08:58:15
ATTENTION ! Le nombre de secondes doit être inférieur à 32768.
|
| auteur : Maxence HUBICHE | Il faut utiliser DatePart() : PartDate (" T " ,[LeChampDate])
|
Le premier argument donne l'intervalle voulu. En voici la liste :
Francais Anglais Signification
aaaa yyyy Année
a y Jour de l'année
m m Mois
j d Jour
h h Heure
n n Minute
s s Seconde
t q Trimestre
e w Semaine
ee ww Numéro de la semaine
Après pour avoir ceux qui manquent, quelques calculs simples permettent d'y arriver...
Par exemple, pour avoir le semestre, il faut les 2 premiers trimestres.
Donc il faut faire :
Semestre = (PartDate (" T " ,[LeChampDate])+ 1 )\ 2
|
|
| auteur : Papy Turbo | En dehors des fonctions Year(), Month(), Day(), Hour(), Minute(), Second() qui renvoient une partie de la date ou de l'heure, le moyen le plus simple est de considérer que les dates sont enregistrées dans la base sous la forme d'un nombre réel double (8 octets). Dans l'aide Access, voir le type de données Date.
La partie entière donne la date,
la partie décimale donne l'heure.
Appuyez sur [Alt+F11] -> environnement VBA, puis [Ctrl-G] pour utiliser la fenêtre Exécution (F1), et testez les commandes suivantes :
? now
07 / 04 / 2004 12 :04 :38
? int (Now )
07 / 04 / 2004
? DateSerial (Year (Now ), Month (Now ), Day (Now ))
07 / 04 / 2004
? now - int (now )
0 ,50459490740468
? cdate (now - int (now ))
12 :05 :57
? format (now - int (now ), " hh:mm:ss "
12 :06 :08
|
Il faut un cDate() ou un Format() pour afficher l'heure correctement parce que l'opération de soustraction renvoie un nombre réel double. La soustraction "perd" la notion de date/heure.
Dans une procédure, vous pouvez déclarer une variable Date. Vous n'aurez pas besoin de convertir avec cDate(). Si DateHeure est une variable, un paramètre ou la valeur d'un contrôle de type Date :
Dim HeureSeule As Date
[. . . ]
HeureSeule = DateHeure - int (DateHeure)
|
Noter que, dans une table ou un calcul, il n'y a aucune différence entre 0,50459490740468 et 12:05:57. C'est juste une question d'affichage (F1 sur la fonction Format(), le type de données Date, la fonction cDate()).
|
| auteur : Papy Turbo | La différence entre 2 dates indique le nombre de jours. La partie décimale indique une fraction de jour (Ex. 12 heures = 0,5 jour).
Ces nombres peuvent être utilisés dans tout calcul, sans utiliser aucune fonction, même dans une requête SQL.
Pour les calculs sur des heures, multiplier ce nombre par 24.
De même pour les minutes ou les secondes : multipliez par 24*60, ou par 24*60*60.
Exemple 1 : Temps passé sur une activité ou un projet.
Si vous avez travaillé sur une activité quelconque, depuis la date/heure Debut jusqu'à la Date/heure Fin. Utiliser la fenêtre Exécution (F1) pour tester :
Debut = #4 / 26 / 2004 22 :07 :32 #
Fin = #4 / 27 / 2004 02 :38 :41 #
Duree = (Fin - Debut)* 24
? Duree
4 ,51916666678153
|
soit un peu plus de 4 heures et demi. Le résultat est un Numérique Double, et non plus une date.
Pour effectuer le même calcul avec DateDiff(), vous devrez extraire d'abord la différence en jours, puis en heures, puis en minutes… puis les ajouter les unes aux autres !
Si vous avez enregistré DebutTempsPasse et FinTempsPasse de chaque activité dans une table des Temps Passés, vous pouvez, dans une requête, calculer directement un total des heures par projet.
Par exemple, utiliser cette requête dans un état pour afficher un résumé des heures par projet :
Select TP. CLEPROJET , Sum ([FIN_TEMPS_PASSE]- [DEBUT_TEMPS_PASSE])* 24 As HeuresTotales
From TEMPSPASSE TP
Group By TP. CLEPROJET ;
|
De même, vous pouvez ajouter directement des jours, entiers ou partiels, à une date. Utiliser la fenêtre Exécution (F1) : ? now , now + 120
27 / 04 / 2004 12 :14 :04 25 / 08 / 2004 12 :14 :04
|
120 jours au-delà du 27 avril, nous serons le 25 août. ? now , now + (75 / 24 )
27 / 04 / 2004 12 :19 :35 30 / 04 / 2004 15 :19 :35
|
75 heures au-delà du 27 avril à midi, nous serons le 30 avril, à 15 heures.
Exemple 2 : Pour chronométrer l'exécution de 2 procédures, et déterminer la plus efficace.
Nous pouvons également stocker le résultat dans une variable de type Date, afin de bénéficier immédiatement du format d'affichage Date/Heure.
Public Function CompareProcedures () As String
Dim Debut As Date , Fin As Date
Dim Duree1 As Date , Duree2 As Date
Dim Pointeur As Long
Const NBITERATIONS = 1000000
Debut = Now
For Pointeur = 1 To NBITERATIONS
Procedure1
Next
Fin = Now
Duree1 = Fin - Debut
Debut = Now
For Pointeur = 1 To NBITERATIONS
Procedure2
Next
Fin = Now
Duree2 = Fin - Debut
CompareProcedures = " Chaque procédure a été exécutée " & NBITERATIONS & " fois, en " _
& vbCrLf & " 1ère : " & Duree1 _
& vbCrLf & " 2ème : " & Duree2
Beep
MsgBox CompareProcedures
End Function
|
L'affichage de Duree1 et Duree2, variables de type Date, sera directement exprimé en hh:min:sec. Exemple, dans la fenêtre Exécution (F1) : ? CompareProcedures
Chaque procédure a été exécutée 1000000 fois, en
1ère : 00 :00 :42
2ème : 00 :00 :29
|
La seconde procédure est plus efficace que la 1ère. On a souvent des surprises ! :D
|
| auteur : Demco | Vous ne devez pas utiliser la fonction Now(), essayez plutôt de récupérer la date du jour avec la fonction Date().
|
| auteur : Maxence HUBICHE | Ce type est en fait un numérique dans Access.
Une date de référence a été choisie de façon arbitraire : le 1/1/1900.
un nombre correspondant lui a été associé : 2 (l'année 1900 n'étant pas bissextile, un décalage d'une journée a été pris en considération pour ce départ)
donc, nous avons : 1/1/1900 = 2
Chaque jour vaut 1. Ainsi, on peut créer la suite :
1 = 31/12/1900
2 = 01/01/1900
3 = 02/01/1900
4 = 03/01/1900
5 = 04/01/1900
6 = 05/01/1900
7 = 06/01/1900
...
Cela est très appréciable, car ainsi, la différence entre 2 dates donne le nombre de jours les séparant, et pour savoir quel jour on sera dans 3 jours, il suffit d'ajouter 3 à la date en
cours.
Maintenant, le type s'intitule Date/Heure. il doit donc aussi gérer les heures.
Puisqu'un jour vaut 1, et qu'il y a 24 heures dans une journée, une heure vaut 1/24
on a donc :
1h = 1/24
1mn = (1/24)/60
1s = ((1/24)/60)/60
Petite réflexion : quand sommes-nous avec ce numérique ci : 3,75 ?
Réponse : le 2 janvier 1900 à 18h00
A propos des fonctions
De nombreuses fonctions sont utilisées pour la gestion des données de type Date/heure.
Les plus importantes (les noms et usage US sont soulignés) :
DATE()/date
Cette fonction renvoie la date système
TEMPS()/time
Cette fonction renvoie l'heure système
MAINTENANT()/now
Cette fonction renvoie la date ET l'heure système
AJDATE(intervalle;Nbre;Date)/DateAdd
Cette fonction permet d'ajouter un Nbre d'intervalles à une Date
DIFFDATE(intervalle;Date1;Date2)/DateDiff
Cette fonction renvoie le nombre d'intervalles entre 2 dates
PARTDATE(intervalle;Date)/DatePart
Cette fonction renvoie l'intervalle correspondant à la date
Que signifie intervalle
Il s'agit d'une chaîne de caractères, qui caractérise une durée de temps, et qui peut prendre l'une des valeur suivante:
Pour
la notion d'année : "aaaa" / "yyyy"
la notion de mois : "m" / "m"
la notion de jour : "j" / "d"
la notion d'heure : 'h" / "h"
la notion de minute : "n" / "n"
la notion de seconde : "s" / "s"
la notion de trimestre : "t" / "q"
la notion de semaine : "ee" / "ww"
la notion de jour de la semaine : "e" / "w"
la notion de jour de l'année : "a" / "y"
FORMAT(Date;Format)/Format
Cette fonction renvoie le un texte correspondant à la date mise en forme.
SéRIEDATE(Année;Mois;Jour)/DateSerial
Cette fonction revoie une date reconstruite à partir des éléments passés dans les arguments.
SérieTemps(Heure;Minute;Seconde)/TimeSerial
Cette fonction revoie une heure reconstruite à partir des éléments passés dans les arguments.
|
lien : Comment afficher des durées supérieures à 24 heures ?
|
| auteur : Gaël Donat | Public Sub test ()
Dim LaDate As Date
LaDate = Now ()
MsgBox Format (LaDate, " mmm " )
End Sub
|
|
| auteur : Maxence HUBICHE | "MonNombre" contient le nouveau jour :
Madate = DateSerial (Year ([ChampDate],Month ([ChampDate], MonNombre)
|
|
| auteur : Maxence HUBICHE | La fonction WeekDay() permet celà.
A savoir : 1 correspond au dimanche et 7 au samedi.
|
| auteur : Team Access | Pour convertir une expression en date, vous pouvez utiliser la fonction CDate(expression). Si l'expression à
convertir n'est pas une date correcte d'après le format indiqué dans les paramètres régionaux de Windows, CDate essaie d'utiliser
un autre format. Si la fonction ne réussit pas à faire la conversion, elle génère une erreur de type "Type Mismatch".
Dans l'exemple ci-dessous, une date est demandée à l'utilisateur. Sa réponse est alors convertie en date. Dim Rep As String , DateDeNaissance As Date
Do
Rep = InputBox (" Quelle est votre date de naissance ? " )
Loop While (Not IsDate (Rep))
DateDeNaissance = CDate (Rep)
|
|
lien : FAQ VB
|
| auteur : HPJ | Voici une petite fonction : Public Function PremierJourSemaine (ByVal numSemaine As Byte, ByVal annee As Integer) As Date
Dim d As Date
Dim numS As Integer
d = DateSerial (annee, 1 , 1 )
numS = DatePart (" ww " , d, vbMonday, vbFirstFourDays)
If numS < > 1 Then d = DateAdd (" d " , 7 , d)
d = DateAdd (" d " , 1 - Weekday (d, vbMonday), d)
PremierJourSemaine = DateAdd (" ww " , numSemaine - 1 , d)
End Function
|
Utilisation : Msgbox PremierJourSemaine (26 , 2005 )
|
|
| auteur : Drosera |
Function DateEnLettre (dtm As Date , Optional boo As Boolean = False ) As String
Dim strJour As String
Dim strMois As String
Dim strAnnée As String
If Format (dtm, " dd " ) = 1 Then
If boo Then
strJour = " Premier "
Else
strJour = " premier "
End If
Else
strJour = NbVersTexte (Format (dtm, " dd " ), boo)
End If
strMois = CStr (Format (dtm, " mmmm " ))
strAnnée = NbVersTexte (Format (dtm, " yyyy " ))
DateEnLettre = strJour & " " & strMois & " " & strAnnée
End Function
Public Function NbVersTexte (ValNum As Double, Optional boo As Boolean = False ) As String
Static Unites () As String
Static Dixaines () As String
Static LesDixaines () As String
Static Milliers () As String
Dim i As Integer
Dim nPosition As Integer
Dim ValNb As Integer
Dim LesZeros As Integer
Dim strResultat As String
Dim strTemp As String
Dim tmpBuff As String
Unites = Split (" zéro;un;deux;trois;quatre;cinq;six;sept;huit;neuf " , " ; " )
Dixaines = Split (" dix;onze;douze;treize;quatorze;quinze;seize;dix-sept;dix-huit;dix-neuf " , " ; " )
LesDixaines = Split (" ;dix;vingt;trente;quarante;cinquante;soixante;soixante-dix;quatre-vingt;quatre-vingt-dix " , " ; " )
Milliers = Split (" ;mille;million;milliard " , " ; " )
On Error GoTo NbVersTexteError
strTemp = CStr (Int (ValNum))
If Len (strTemp) > 6 Then
tmpBuff = left (strTemp, Len (strTemp) - 6 )
tmpBuff = right (tmpBuff, 3 )
If Val (tmpBuff) > 1 Then
Milliers (2 ) = Milliers (2 ) & " s "
End If
End If
If Len (strTemp) > 9 Then
tmpBuff = left (strTemp, Len (strTemp) - 9 )
tmpBuff = right (tmpBuff, 3 )
If Val (tmpBuff) > 1 Then
Milliers (3 ) = Milliers (3 ) & " s "
End If
End If
If ValNum = 0 Or ValNum = 1 Then
strResultat = Unites (ValNum)
End If
For i = Len (strTemp) To 1 Step - 1
ValNb = Val (Mid $(strTemp, i, 1 ))
nPosition = (Len (strTemp) - i) + 1
Select Case (nPosition Mod 3 )
Case 1
LesZeros = False
If i = 1 Then
If ValNb > 1 Or (ValNb = 1 And nPosition > 4 ) Then
tmpBuff = Unites (ValNb) & " "
Else
tmpBuff = " "
End If
ElseIf Mid $(strTemp, i - 1 , 1 ) = " 1 " Then
tmpBuff = Dixaines (ValNb) & " "
i = i - 1
ElseIf Mid $(strTemp, i - 1 , 1 ) = " 9 " Then
tmpBuff = LesDixaines (8 ) & " " & Dixaines (ValNb) & " "
i = i - 1
ElseIf Mid $(strTemp, i - 1 , 1 ) = " 7 " Then
If ValNb = 1 Then
tmpBuff = LesDixaines (6 ) & " et " & Dixaines (ValNb) & " "
Else
tmpBuff = LesDixaines (6 ) & " " & Dixaines (ValNb) & " "
End If
i = i - 1
ElseIf ValNb > 0 Then
tmpBuff = Unites (ValNb) & " "
Else
LesZeros = True
If i > 1 Then
If Mid $(strTemp, i - 1 , 1 ) < > " 0 " Then
LesZeros = False
End If
End If
If i > 2 Then
If Mid $(strTemp, i - 2 , 1 ) < > " 0 " Then
LesZeros = False
End If
End If
tmpBuff = " "
End If
If LesZeros = False And nPosition > 1 Then
tmpBuff = tmpBuff & Milliers (nPosition / 3 ) & " "
End If
strResultat = tmpBuff & strResultat
Case 2
If ValNb > 0 Then
If strResultat = " un " And ValNb < > 8 Then
strResultat = LesDixaines (ValNb) & " et " & strResultat
Else
strResultat = LesDixaines (ValNb) & " " & strResultat
End If
End If
Case 0
If ValNb > 0 Then
If ValNb > 1 Then
strResultat = Unites (ValNb) & " cent " & strResultat
Else
strResultat = " cent " & strResultat
End If
End If
End Select
Next i
strResultat = RTrim (strResultat)
If Len (strTemp) > 2 And right (strTemp, 2 ) = " 00 " Then
tmpBuff = Mid (strTemp, Len (strTemp) - 2 , 1 )
If Val (tmpBuff) > 1 Then
strResultat = strResultat & " s "
End If
End If
If Len (strResultat) > 0 Then
If boo Then
strResultat = UCase $(left $(strResultat, 1 )) & Mid $(strResultat, 2 )
End If
End If
EndNbVersTexte :
NbVersTexte = strResultat
Exit Function
NbVersTexteError :
strResultat = " Erreur de conversion ! "
Resume EndNbVersTexte
End Function
|
|
| auteur : Zorro | Text1, Text2 et Text3 contiennent les deux valeurs à ajouter. zdtResult est la zone de texte affichant le résultat : h = Val (Mid (Text1, 1 , 2 )) + Val (Mid (Text2, 1 , 2 )) + Val (Mid (Text3, 1 , 2 ))
m = Val (Mid (Text1, 5 , 3 )) + Val (Mid (Text2, 5 , 3 )) + Val (Mid (Text3, 5 , 3 ))
If m > 60 Then
Hplus = Fix (m / 60 )
m = m Mod 60
End If
h = h + Hplus
zdtResult. Value = Str (h) & " h " & Str (m) & " min "
|
|
| auteur : Maxence HUBICHE |
la question : Comment faire pour passer de 02:15:47 à 135,78'
la réponse en français :
MsgBox Heure ([ChampDate])* 60 + Minute ([ChampDate]) & " , " & Format (Seconde ([ChampDate])/ 60 * 100 ;" 00 " )
|
la réponse en anglais :
MsgBox Hour ([ChampDate]) * 60 + Minute ([ChampDate]) & " , " & Format (Second ([ChampDate]) / 60 * 100 , " 00 " )
|
|
lien : Solution trouvée ici
|
| auteur : random |
Voici un code permettant de convertir une date de type Julienne (ex. 107142) vers une date 2007/05/22.
Function cjulian (julian As Long) As Date
cjulian = DateSerial (1900 + CInt (Left (julian, 3 )), 1 , CInt (Right (julian, 3 )))
End Function
|
Appel de la fonction :
Dim MaDate As Date
MaDate = Format (cjulian (107142 ), " yyyy/mm/dd " )
|
|
Consultez les autres F.A.Q's
Les sources présentés sur cette pages sont libre de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2004
Developpez LLC. Tout droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérets.
Cette page est déposée à la SACD.
|