| 
 
 |  |  | 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. 
 | MsgBoxFormat(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
 
 | FunctionJourHeure(dtmAsDate)AsStringJourHeure=""IfCDbl(dtm)>1ThenJourHeure=CInt(dtm-0.5)&" J "EndIfJourHeure=JourHeure&Format(dtm,"hh:nn:ss")EndFunction
 | 
Tandis que celle-la renvoie la durée sous la forme Heure:minutes:secondes
 | FunctionHeureSup24(dtmAsDate)AsStringHeureSup24=DateDiff("h",0, dtm)
    
    HeureSup24=HeureSup24&Format(dtm,":nn:ss")EndFunction
 | 
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èmeSecondeMinuteHeureJourSemaineMoisAnné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)
 
 | 
FunctionJourHeure(dtmAsDate)AsStringJourHeure=""IfCDbl(dtm)>1ThenJourHeure=CInt(dtm-0.5)&" J "EndIfJourHeure=JourHeure&Format(dtm,"hh:nn:ss")EndFunction
 | 
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)
 
 | 
FunctionHeureSup24(dtmAsDate)AsStringHeureSup24=DateDiff("h",0, dtm)
    
    HeureSup24=HeureSup24&Format(dtm,":nn:ss")EndFunction
 | 
A vous ensuite d'adapter ces fonctions à vos besoins exacts.
 
 
 |  | lien : Comment fonctionne le type Date/Heure ? 
 | 
|  |  | auteur : Maxence HUBICHE |  | | 
FunctionLastDayOfMonth(ByValLaDateAsDate)AsDateLastDayOfMonth=CDate(DateSerial(Year(LaDate),Month(LaDate)+1,0))EndFunction
 | 
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 :
 | DimderJourAsInteger
LaDate=DatederJour=Day(DateSerial(Year(LaDate),Month(LaDate)+1,0))MsgBoxderJour
 | 
 |  | 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éem Moisd Jourh Heuren Minutes Secondeq Trimestrew Semaine | 
DateDiff("s", #1/1/1990#, #1/1/1992#)
 | 
 | 
|  |  | auteurs : Cafeine, Tofalu |  | 
Première possibilité :
 | FunctionCalculAge(ByValDat1AsDate,ByValDat2AsDate)AsIntegerIfMonth(Dat2)>Month(Dat1)ThenCalculAge=DateDiff("yyyy", Dat1, Dat2)ElseIfMonth(Dat2)=Month(Dat1)ThenIfDay(Dat2)>=Day(Dat1)ThenCalculAge=DateDiff("yyyy", Dat1, Dat2)ElseCalculAge=DateDiff("yyyy", Dat1, Dat2)-1EndIfElseCalculAge=DateDiff("yyyy", Dat1, Dat2)-1EndIfEndFunction
 | 
Seconde possibilité :
 | 
FunctionCalculAge2(dateNaissanceAsDate, Optional dateReferenceAsDate)IfdateReference=0ThendateReference=DateCalculAge2=Year(dateReference)-Year(dateNaissance)+_
(Format(dateNaissance,"mmdd")>Format(dateReference,"mmdd"))EndFunction
 | 
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
 | 
MsgBoxCalculAge2(#06/22/1983#)
 | 
Age le 15 novembre 2005
 | 
MsgBoxCalculAge2(#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 : 
 | ? now07/04/200412: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 :
 | DimHeureSeuleAsDate[...]    
     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/200422:07:32#
Fin=#4/27/200402:38:41#
Duree=(Fin-Debut)*24? Duree4,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 :
 | SelectTP.CLEPROJET,Sum([FIN_TEMPS_PASSE]-[DEBUT_TEMPS_PASSE])*24AsHeuresTotales
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+12027/04/200412:14:0425/08/200412:14:04
 | 
120 jours au-delà du 27 avril, nous serons le 25 août. | ? now,now+(75/24)27/04/200412:19:3530/04/200415: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.
 | PublicFunctionCompareProcedures()AsStringDimDebutAsDate, FinAsDateDimDuree1AsDate, Duree2AsDateDimPointeurAsLongConstNBITERATIONS=1000000Debut=NowForPointeur=1ToNBITERATIONS
         Procedure1NextFin=NowDuree1=Fin-Debut        
     
     Debut=NowForPointeur=1ToNBITERATIONS
          Procedure2NextFin=NowDuree2=Fin-Debut    
     
     CompareProcedures="Chaque procédure a été exécutée "&NBITERATIONS&" fois, en "_&vbCrLf&"1ère : "&Duree1 _&vbCrLf&"2ème : "&Duree2    
     BeepMsgBoxCompareProceduresEndFunction
 | 
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 1000000fois, en 
1ère :00:00:422è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 |  | | PublicSubtest()DimLaDateAsDateLaDate=Now()MsgBoxFormat(LaDate,"mmm")EndSub
 | 
 | 
|  |  | 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.
 | DimRepAsString, DateDeNaissanceAsDateDoRep=InputBox("Quelle est votre date de naissance ?")LoopWhile(NotIsDate(Rep))
DateDeNaissance=CDate(Rep)
 | 
 |  | lien : FAQ VB 
 | 
|  |  | auteur : HPJ |  | Voici une petite fonction : | PublicFunctionPremierJourSemaine(ByValnumSemaineAsByte,ByValanneeAsInteger)AsDateDimdAsDateDimnumSAsInteger
   
    
    d=DateSerial(annee,1,1)
   
    
    numS=DatePart("ww", d, vbMonday, vbFirstFourDays)IfnumS<>1Thend=DateAdd("d",7, d)
   
    
    d=DateAdd("d",1-Weekday(d, vbMonday), d)
           
    
    PremierJourSemaine=DateAdd("ww", numSemaine-1, d)EndFunction
 | 
Utilisation : | MsgboxPremierJourSemaine(26,2005)
 | 
 | 
|  |  | auteur : Drosera |  | | 
FunctionDateEnLettre(dtmAsDate, Optional booAsBoolean=False)AsStringDimstrJourAsStringDimstrMoisAsStringDimstrAnnéeAsStringIfFormat(dtm,"dd")=1ThenIfbooThenstrJour="Premier"ElsestrJour="premier"EndIfElsestrJour=NbVersTexte(Format(dtm,"dd"), boo)EndIfstrMois=CStr(Format(dtm,"mmmm"))
    strAnnée=NbVersTexte(Format(dtm,"yyyy"))
    DateEnLettre=strJour&" "&strMois&" "&strAnnéeEndFunctionPublicFunctionNbVersTexte(ValNumAsDouble, Optional booAsBoolean=False)AsStringStaticUnites()AsStringStaticDixaines()AsStringStaticLesDixaines()AsStringStaticMilliers()AsStringDimiAsIntegerDimnPositionAsIntegerDimValNbAsIntegerDimLesZerosAsIntegerDimstrResultatAsStringDimstrTempAsStringDimtmpBuffAsStringUnites=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",";")OnErrorGoToNbVersTexteError
   
    strTemp=CStr(Int(ValNum))IfLen(strTemp)>6ThentmpBuff=left(strTemp,Len(strTemp)-6)
        tmpBuff=right(tmpBuff,3)IfVal(tmpBuff)>1ThenMilliers(2)=Milliers(2)&"s"EndIfEndIfIfLen(strTemp)>9ThentmpBuff=left(strTemp,Len(strTemp)-9)
        tmpBuff=right(tmpBuff,3)IfVal(tmpBuff)>1ThenMilliers(3)=Milliers(3)&"s"EndIfEndIfIfValNum=0OrValNum=1ThenstrResultat=Unites(ValNum)EndIfFori=Len(strTemp)To1Step-1ValNb=Val(Mid$(strTemp, i,1))
        nPosition=(Len(strTemp)-i)+1SelectCase(nPositionMod3)Case1LesZeros=FalseIfi=1ThenIfValNb>1Or(ValNb=1AndnPosition>4)ThentmpBuff=Unites(ValNb)&" "ElsetmpBuff=""EndIfElseIfMid$(strTemp, i-1,1)="1"ThentmpBuff=Dixaines(ValNb)&" "i=i-1ElseIfMid$(strTemp, i-1,1)="9"ThentmpBuff=LesDixaines(8)&" "&Dixaines(ValNb)&" "i=i-1ElseIfMid$(strTemp, i-1,1)="7"ThenIfValNb=1ThentmpBuff=LesDixaines(6)&" et "&Dixaines(ValNb)&" "ElsetmpBuff=LesDixaines(6)&" "&Dixaines(ValNb)&" "EndIfi=i-1ElseIfValNb>0ThentmpBuff=Unites(ValNb)&" "ElseLesZeros=TrueIfi>1ThenIfMid$(strTemp, i-1,1)<>"0"ThenLesZeros=FalseEndIfEndIfIfi>2ThenIfMid$(strTemp, i-2,1)<>"0"ThenLesZeros=FalseEndIfEndIftmpBuff=""EndIfIfLesZeros=FalseAndnPosition>1ThentmpBuff=tmpBuff&Milliers(nPosition/3)&" "EndIfstrResultat=tmpBuff&strResultatCase2IfValNb>0ThenIfstrResultat="un "AndValNb<>8ThenstrResultat=LesDixaines(ValNb)&" et "&strResultatElsestrResultat=LesDixaines(ValNb)&" "&strResultatEndIfEndIfCase0IfValNb>0ThenIfValNb>1ThenstrResultat=Unites(ValNb)&" cent "&strResultatElsestrResultat="cent "&strResultatEndIfEndIfEndSelectNexti
    strResultat=RTrim(strResultat)IfLen(strTemp)>2Andright(strTemp,2)="00"ThentmpBuff=Mid(strTemp,Len(strTemp)-2,1)IfVal(tmpBuff)>1ThenstrResultat=strResultat&"s"EndIfEndIfIfLen(strResultat)>0ThenIfbooThenstrResultat=UCase$(left$(strResultat,1))&Mid$(strResultat,2)EndIfEndIfEndNbVersTexte:
    NbVersTexte=strResultatExitFunctionNbVersTexteError:
    strResultat="Erreur de conversion !"ResumeEndNbVersTexteEndFunction
 | 
 | 
|  |  | 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))Ifm>60ThenHplus=Fix(m/60)
    m=mMod60EndIfh=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 :
 | 
MsgBoxHeure([ChampDate])*60+Minute([ChampDate])&","&Format(Seconde([ChampDate])/60*100;"00")
 | 
la réponse en anglais :
 | 
MsgBoxHour([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.
 
 | Functioncjulian(julianAsLong)AsDatecjulian=DateSerial(1900+CInt(Left(julian,3)),1,CInt(Right(julian,3)))EndFunction
 | 
Appel de la fonction :
 
 | DimMaDateAsDateMaDate=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. |