|  | auteur : SilkyRoad |  | Vba |  
Sub Test()
Dim Annee As Integer, Semaine As Integer, NumJour As Integer
 
Annee = 2007
Semaine = 43
NumJour = 0 
 
MsgBox Evaluate("TEXT(DATE(" & Annee & ",1,3)-WEEKDAY(DATE(" & Annee & _
    ",1,3))-5+(7*" & Semaine & ")+" & NumJour & ",""dd/mm/yyyy"")")
End Sub
  |  
  |  
  |  | auteur : SilkyRoad |  
Cette procédure est facilement intégrable à un évènement de la feuille de 
calcul ou à une barre d'outils personnelle: La date sélectionnée est automatiquement insérée dans la cellule active.
Vous devez disposer de l'ocx MSCOMCT2.ocx pour utiliser les contrôles MonthView et DataPicker. 
 
  
Ce premier exemple utilise le contrôle Monthview:
  
Enlevez le commentaire sur cette ligne '.insertlines j + 3, " Unload Me" pour 
que la fenêtre se referme automatiquement après l'insertion de la date.
  	
 | Vba |  
Option Explicit
Dim Usf As Object
Sub LancementProcedure()
    Dim X As Object
    Dim NomMonthView As String
    
    NomMonthView = "MonthView1"
    
    Set X = UserForm_Et_MonthView_Dynamique(NomMonthView)
    
    
    X.Show
    
    
    ThisWorkbook.VBProject.VBComponents.Remove Usf
    Set Usf = Nothing
End Sub
Function UserForm_Et_MonthView_Dynamique(NomObjet As String) As Object
    Dim Obj As Object
    Dim j As Integer
    
    Set Usf = ThisWorkbook.VBProject.VBComponents.Add(3)
    With Usf
        .Properties("Caption") = "Mon calendrier"
        .Properties("Width") = 135
        .Properties("Height") = 140
    End With
    
    
    Set Obj = Usf.Designer.Controls.Add("MSComCtl2.MonthView.2")
          
    With Obj
        .Left = 0: .Top = 0: .Width = 150: .Height = 140
        .Name = NomObjet
        .ForeColor = &HC000C0
        .TitleBackColor = &HC000C0
    End With
    
    
    
    With Usf.CodeModule
        j = .CountOfLines
        .insertlines j + 1, "Sub " & NomObjet & "_DateClick(ByVal DateClicked As Date)"
        
        .insertlines j + 2, "   ActiveCell = DateClicked"
        
        
        .insertlines j + 4, "End Sub"
    End With
    
    VBA.UserForms.Add (Usf.Name)
    Set UserForm_Et_MonthView_Dynamique = UserForms(UserForms.Count - 1)
  
End Function
  |  
 
 
  
Voici une deuxième procédure qui utilise le contrôle DataPicker:
  	
 | Vba |  
Option Explicit
Dim Usf As Object
Sub LancementProcedure()
    Dim X As Object
    Dim NomdtPicker As String
    
    NomdtPicker = "DtPicker1"
    Set X = UserForm_Et_DataPicker_Dynamique(NomdtPicker)
    
    X.Show
    
    ThisWorkbook.VBProject.VBComponents.Remove Usf
    Set Usf = Nothing
End Sub
Function UserForm_Et_DataPicker_Dynamique(NomObjet As String) As Object
    Dim Obj As Object
    Dim j As Integer
    Set Usf = ThisWorkbook.VBProject.VBComponents.Add(3)
    With Usf
        .Properties("Caption") = "Mon calendrier"
        .Properties("Width") = 130
        .Properties("Height") = 40
    End With
  
    Set Obj = Usf.Designer.Controls.Add("MSComCtl2.DTPicker.2")
          
    With Obj
        .Left = 0: .Top = 0: .Width = 130: .Height = 20
        .Name = NomObjet
        .CalendarBackColor = &HFF00FF
    End With
    
    With Usf.CodeModule
        j = .CountOfLines
        .insertlines j + 1, "Sub " & NomObjet & "_Change()"
        .insertlines j + 2, "   ActiveCell.Value = Format(DateSerial(Year(" _
            & NomObjet & "), Month(" & NomObjet & "), Day(" _
            & NomObjet & ")), " & Chr(34) & "dd mmmm yyyy" & Chr(34) & ")"
        
        
        .insertlines j + 4, "End Sub"
    End With
    
    VBA.UserForms.Add (Usf.Name)
    Set UserForm_Et_DataPicker_Dynamique = UserForms(UserForms.Count - 1)
  
End Function
  |  
  |  
  |  | auteur : Michel_M |  
La procédure suivante permet obtenir l'heure universelle, c'est-à-dire au méridien de Greenwich.
  
 | Vba |  
Sub Donner_HeureGMT()
    Dim dtTime As Object
    
    Set dtTime = CreateObject("Wbemscripting.swbemdatetime")
    dtTime.setvardate (FormatDateTime(Time))
    
    MsgBox "heure GMT: " & dtTime.getvardate(False)
End Sub
  |  
  |  
  |  | auteur : SilkyRoad |  
Par exemple, la date 04/01/2005 renvoie la valeur 2 alors qu'il s'agit de la semaine 1.
  
En Europe, la première semaine doit contenir au moins 4 jours. 
Par contre, la fonction NO.SEMAINE est basé sur la norme US (La semaine 1 commence le 1er janvier). Cette différence de norme
donne donc un résultat erroné pour les européens si le premier jeudi de l'année tombe après le 4 janvier.
  
Vous pouvez utiliser la fonction suivante pour régler ce problème:
  
=ENT(MOD(ENT((A1-2)/7)+0,6;52+5/28))+1
  
 
  |  
  |  | auteur : SilkyRoad |  
TimeStamp est un format standard représentant un nombre de secondes écoulées depuis le 1er janvier 1970.
  
 | Vba |  
Sub Test_V1()
    MsgBox Timestamp_To_Date(1193499779)
End Sub
Function Timestamp_To_Date(TimeStamp As Long) As Date
    Timestamp_To_Date = DateAdd("s", TimeStamp, CDate("01/01/1970"))
End Function
  |  
 
 
  
Et si vous souhaitez transformer une date classique en TimeStamp:
  	
 | Vba |  
Sub Test_V2()
    MsgBox Date_To_StampTime(CDate("27/10/2007 15:42:59"))
End Sub
Function Date_To_StampTime(DateLocale As Date) As Long
    Date_To_StampTime = DateDiff("s", CDate("01/01/1970"), DateLocale)
End Function
  |  
  |  
  |  | auteur : Maxence Hubiche |  
Le module  DateTime contient les procédures et les propriétés adoptées dans les opérations portant 
sur la date et l'heure. Ces constantes peuvent être utilisées partout dans votre code.
 
Consultez le tutoriel de Maxence Hubiche:  Les Fonctions Date/Heure
	
  |  
  |  | auteur : Michel Gaboly |  
Avec l'année en A1, et le mois en B1, utilisez la fonction : 
=DATE(A1;B1 + 1;1) + MOD(3 - JOURSEM(DATE(A1;B1 + 1;1);2);7) - 7
 
  
Description de la formule:
  
DATE(A1;B1 + 1;1)  
Donne le 1er du mois suivant.
  
JOURSEM(Réf;2)  
Donne le numéro de jour dans la semaine, en commençant par le lundi.
  
MOD()  
Est la fonction modulo, qui renvoie le reste entier d'une division. Le 3 utilisé comme 
1er argument de MOD() correspond au numéro de jour du mercredi dans la semaine.
  
=DATE(A1;B1 + 1;1) + MOD(3 - JOURSEM(DATE(A1;B1 + 1;1);2);7) 
Renvoie le premier mercredi du mois suivant. En ôtant 7, on a le dernier mercredi du mois de référence.
  
 
  |  
 
 
 
						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 ©2008 
			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. 
												 |