none
Generer automatiquement la liste mois année en fonction des dates dans un formulaire access. RRS feed

  • Question

  • Bonjour,

    Je suis débutant.

    Je cherche à générer la liste mois Année en fonction de deux dates .(eviter de tout faire manuellement très long)

    Exemple :J'ai 250 équipements à modifier pendant la période du 01/01/2012 au 31/12/2018(date butée) chaque mois j'ecris le nombre équipement modifié 

    02/2012 3eqts ,03/2012 6 eqts etc jusqu'a 2018

    J'espère avoir été claire

    Merci d'avance pour votre aide

    mardi 20 mars 2012 17:53

Réponses

  • Tu peux faire une boucle du genre :

    Dim currentDate as New DateTime(2012,01,01)

    Dim lastDate as New DateTime(2013, 01,01)

    While currentDate < lastDate

        currentDate = currentDate.AddMonth(1)

    End While

    Ca marche aussi avec les jours (AddDays), les heures, etc. (fait pas comme Microsoft Azure qui a eu un pb de ce genre avec le 29 Février dernier ;-))


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Proposé comme réponse Ciprian Duduiala mercredi 21 mars 2012 12:32
    • Marqué comme réponse Pierre60 mercredi 21 mars 2012 15:50
    mercredi 21 mars 2012 09:23
  • Bonjour,

    Vous pouvez créer une classe Period qui est construite à partir d'une date de début et date de fin puis y ajouter une propriété Months

    retournant la liste de moi de la période, ce là permettra  au reste de votre code d'abstraire la construction de la liste de mois :

    Public Class Period
        Private _start As DateTime
        Private _end As DateTime
        Private _months As List(Of DateTime)
    
        Public ReadOnly Property StartDate() As DateTime
            Get
                Return Me._start
            End Get
        End Property
    
        Public ReadOnly Property EndtDate() As DateTime
            Get
                Return Me._end
            End Get
        End Property
    
        Public ReadOnly Property Months As IList(Of DateTime)
            Get
                Return New List(Of DateTime)(Me._months)
            End Get
        End Property
    
        Public Sub New(startDate As DateTime, endDate As DateTime)
            Me._start = startDate
            Me._end = endDate
    
            Me._months = New List(Of DateTime)
            Dim currentMonth = startDate.AddDays(1 - startDate.Day)
            Dim lastMonth = endDate.AddDays(1 - endDate.Day)
            While (currentMonth <= lastMonth)
                Me._months.Add(currentMonth)
                currentMonth = currentMonth.AddMonths(1)
            End While
        End Sub
    
    End Class

    Il vous suffit dans votre code client de procéder comme suivant :

    Dim period As Period = New Period(New DateTime(2012, 1, 1), New DateTime(2018, 12, 31))


    En suite vous êtes libre d'afficher les éléments de la liste Period.Months selon le format que vous voulez comme "MM/yyyy".

    Cordialement.

    • Proposé comme réponse Ciprian Duduiala mercredi 21 mars 2012 12:32
    • Marqué comme réponse Pierre60 mercredi 21 mars 2012 15:49
    mercredi 21 mars 2012 11:00
    Auteur de réponse

Toutes les réponses

  • Tu peux faire une boucle du genre :

    Dim currentDate as New DateTime(2012,01,01)

    Dim lastDate as New DateTime(2013, 01,01)

    While currentDate < lastDate

        currentDate = currentDate.AddMonth(1)

    End While

    Ca marche aussi avec les jours (AddDays), les heures, etc. (fait pas comme Microsoft Azure qui a eu un pb de ce genre avec le 29 Février dernier ;-))


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Proposé comme réponse Ciprian Duduiala mercredi 21 mars 2012 12:32
    • Marqué comme réponse Pierre60 mercredi 21 mars 2012 15:50
    mercredi 21 mars 2012 09:23
  • Bonjour M.Clark

    Merci pour votre aide

    Je vais essayer ce soir je vous tiens au courant

    Bonne journée

    Pierre

    mercredi 21 mars 2012 10:24
  • Bonjour,

    Vous pouvez créer une classe Period qui est construite à partir d'une date de début et date de fin puis y ajouter une propriété Months

    retournant la liste de moi de la période, ce là permettra  au reste de votre code d'abstraire la construction de la liste de mois :

    Public Class Period
        Private _start As DateTime
        Private _end As DateTime
        Private _months As List(Of DateTime)
    
        Public ReadOnly Property StartDate() As DateTime
            Get
                Return Me._start
            End Get
        End Property
    
        Public ReadOnly Property EndtDate() As DateTime
            Get
                Return Me._end
            End Get
        End Property
    
        Public ReadOnly Property Months As IList(Of DateTime)
            Get
                Return New List(Of DateTime)(Me._months)
            End Get
        End Property
    
        Public Sub New(startDate As DateTime, endDate As DateTime)
            Me._start = startDate
            Me._end = endDate
    
            Me._months = New List(Of DateTime)
            Dim currentMonth = startDate.AddDays(1 - startDate.Day)
            Dim lastMonth = endDate.AddDays(1 - endDate.Day)
            While (currentMonth <= lastMonth)
                Me._months.Add(currentMonth)
                currentMonth = currentMonth.AddMonths(1)
            End While
        End Sub
    
    End Class

    Il vous suffit dans votre code client de procéder comme suivant :

    Dim period As Period = New Period(New DateTime(2012, 1, 1), New DateTime(2018, 12, 31))


    En suite vous êtes libre d'afficher les éléments de la liste Period.Months selon le format que vous voulez comme "MM/yyyy".

    Cordialement.

    • Proposé comme réponse Ciprian Duduiala mercredi 21 mars 2012 12:32
    • Marqué comme réponse Pierre60 mercredi 21 mars 2012 15:49
    mercredi 21 mars 2012 11:00
    Auteur de réponse
  • Bonsoir,

    Merci encore pour ton aide.

    Mais Je n'arrive pas à le faire fonctionner sous access 2010 en visual basic.

    J'ai crée un module fonction date pour mettre ton code

    VBne comprend pas il met tout en rouge

    j'ai essayer de le modifier sans resultat.voir ci dessous

    Public Class_Period

      Private Start As DateTime    ici il me dit Erreur de complilation Type ActiveX non géré dans VB

      Private Endt As DateTime
      Private Month As List
     

      Public ReadOnly
      Property Get startDate() As DateTime
          Return
          Me.Start
          End Property
      
       Public ReadOnly
       Property Get endtDate() As DateTime
           Return
           Me.End
           End Property

       Public ReadOnly
       Property Get months() As IList
            Return
            NewList Me.months
                  
        End Property

         Public SubNew
            startDate As DateTime
            endtDate As DateTime
            Me.Start = startDate
            Me.End = endtDate

         Me.months = NewListOf: DateTime
           Dim currentMonth As startDate.AddDays: startDate.Day -1
             
           Dim lastMonth As endDate.AddDays: endDate.Day -1
          
           While (currentMonth <= lastMonth)
               Me.months.Add (currentMonth)
         
       End Property

    Pouvez vous me dire ou est le problème ,

    Merci encore

    Cordialement

    Pierre

    jeudi 22 mars 2012 17:20
  •  Bonsoir ,

    J'ai essayé votre code mais je n'arrive pas a le faire fonctionner

    Sur cette phrase While currentDate < lastDate

    il me dit instruction incorrecte à l'extérieur d'une procédure et il met currentDate en surbrillance.

    Pouvez vous m'aider

    Bonne soirée

    Cordialement

    Pierre

    jeudi 22 mars 2012 17:44
  •     Sub Main()
            Dim months = GetMonthDates(DateTime.Now, New DateTime(2012, 12, 14))
    
            For Each m As DateTime In months
                Console.WriteLine("{0}: mois de {1}", m.ToString("dd/MM/yy"), m.ToString("MMMM"))
            Next
    
            Console.ReadLine()
        End Sub
    
        Public Function GetMonthDates(startDate As DateTime, endDate As DateTime) As List(Of DateTime)
            ' validation des arguments
            If (endDate <= startDate) Then
                Throw New ArgumentException("endDate doit être supérieur à startDate", "endDate")
            End If
    
            Dim currentDate = New DateTime(startDate.Year, startDate.Month, 1).AddMonths(1)
            Dim result As New List(Of DateTime)
            While currentDate < endDate
                result.Add(currentDate)
                currentDate = currentDate.AddMonths(1)
            End While
    
            Return result
        End Function
    Ca, ca marche bien ;-)

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    vendredi 23 mars 2012 08:10
  • Bonjour,

    Vous vous êtes trompé de forum.  Il s'agit de VBA en Access.

    Le code ci-dessous remplit un combo box.

    Private Sub Form_Load()
        Dim iAn As Integer, iMois As Integer
        Me.Modifiable0.RowSourceType = "Value List"
        For iAn = 2012 To 2018
            For iMois = 1 To 12
                Me.Modifiable0.AddItem Format(DateSerial(iAn, iMois, 1), "mmmm yyyy")
            Next iMois
        Next iAn
    End Sub


    • Proposé comme réponse blaise032 vendredi 23 mars 2012 13:16
    • Modifié blaise032 vendredi 23 mars 2012 13:19
    vendredi 23 mars 2012 10:05