Afficher les mois incrémenter [Résolu]

Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012
- - Dernière réponse :  Utilisateur anonyme - 24 sept. 2012 à 18:18
bonjour

j'ai un problème et je souhaite votre aide

je souhaite afficher les mois incrémenter

sub Main()

        Dim number As Integer = 100
        Dim result As Decimal
        Dim i As Integer
        Dim dtn As Date = "30/09/2012"

        For i = 1 To number


            dtn = dtn.AddMonths(1)

            Console.WriteLine(Format(dtn, "dd/ MM / yyyy").ToString())

        Next

        Console.ReadLine()
    End Sub



normalement il faut qu'il m'affiche
30/09/2012
30/10/2012
30/11/2012
30/12/2012
30/01/2013
28/02/2013
30/03/2013
30/04/2013
30/05/2013
...
Mais il m'affiche
30/09/2012
30/10/2012
30/11/2012
30/12/2012
30/01/2013
28/02/2013
28/03/2013
28/04/2013
28/05/2013

Je souhaite savoir pourquoi après le mois 02 il se bloque au 28

merci d'avance
Afficher la suite 

13 réponses

Meilleure réponse
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
133
3
Merci
Bonjour,

Car il ajoutes 1 mois à 28/02 donc ça fait 28/03, car tu te bases sur la date précédemment calculée pour passer à la suivante.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de NHenry
3
Merci
Bonjour,

Dans la boucle de ton premier code, il te suffit d'écrire :
dtn = New DateTime(dtn.Year, dtn.Month, 1).AddMonths(2).AddDays(-1)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
3
Merci
Pardon je suis allé un peu vite.
Je viens de tester une solution qui fonctionne correctement.
En se servant de l'exception ArgumentOutOfRangeException (petite astuce), on peut écrire :
Dim number As Integer = 100
Dim i As Integer
Dim dtn As Date = "30/09/2012"
Dim day As Integer = dtn.Day
For i = 1 To number
    Try
        'ici le mois de février (28 ou 29 jours) ainsi qu'un 31 avril 
        'par exemple provoquera une erreur
        dtn = New DateTime(dtn.Year, dtn.Month, day).AddMonths(1)
    Catch ex As ArgumentOutOfRangeException
        dtn = New DateTime(dtn.Year, dtn.Month + 1, day)
    End Try
    'petite correction sur Format (obsolète) remplacé par String.Format
    Console.WriteLine(String.Format("{0:d}", dtn))
Next

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
3
Merci
Re ...
Il me semble bien, notamment après avoir relu le tout premier message, qu'il serait adroit de ne pas ajouter un mois à chaque résultat antérieur de la boucle, mais d'ajouter (dans la boucle) un multiple i de mois à la date de départ.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
3
Merci
Bonjour ucfoutu,

Effectivement, je n'y avais pas pensé et donc le code peut se simplifier de cette manière :
'...
Dim DateResultat as Date
For i = 1 To number
     dateResultat = dtn.AddMonths(i)
     Console.WriteLine(Format(dateresultat, "dd/ MM / yyyy").ToString())
Next

Merci pour ta remarque

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012
0
Merci
bonjour
NHenry merci de votre réponse
et comment résoudre ce problème
merci
Commenter la réponse de johnjjj
Messages postés
14522
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 août 2019
133
0
Merci
Bonjour,

Si c'est toujours le dernier jour que tu recherche (ou le 30), essayes d'ajouter des jours en faisant attention de ne pas passer au mois suivant.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
Commenter la réponse de NHenry
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012
0
Merci
NHenry merci de votre réponse
je t'explique mon problème
je souhaite

si le jours et inferieur ou egale 28
exemple 23/09/2012
23/09/2012
23/10/2012
23/11/2012
23/12/2012
23/01/2013
23/02/2013
23/03/2013
23/04/2013
23/05/2013


si le jours egale 29

29/09/2012
29/10/2012
29/11/2012
29/12/2012
29/01/2013
28/02/2013 (dernier jours du mois)
29/03/2013
29/04/2013
29/05/2013
...
29/02/2016 (dernier jours du mois)


si le jours egale 30

30/09/2012
30/10/2012
30/11/2012
30/12/2012
30/01/2013
28/02/2013 (dernier jours du mois)
30/03/2013
30/04/2013
30/05/2013
...
29/02/2016 (dernier jours du mois)

si le jours egale 31

Je souhaite aficher le dernier date de chaque mois

30/09/2012
31/10/2012
30/11/2012
31/12/2012
31/01/2013
28/02/2013 (dernier jours du mois)
31/03/2013
30/04/2013
31/05/2013
...
29/02/2016 (dernier jours du mois)

Sub Main()

        Dim number As Integer = 100

        Dim i As Integer
        Dim dtn As Date = "30/09/2012"

        For i = 1 To number


            dtn = dtn.AddMonths(1)

            Select Case dtn.Day


                Case 1 To 28

                    Console.WriteLine(dtn)

                Case 29

                    Select Case dtn.Month
                        Case 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
                            dtn.Day = 29

                            Console.WriteLine(dtn)
                        Case 2
                            Console.WriteLine(Format(CDate(Date.DaysInMonth(dtn.Year, dtn.Month) & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())
                    End Select


                Case 30

                    Select Case dtn.Month
                        Case 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
                            dtn.Day = 30
                            Console.WriteLine(dtn)
                        Case 2
                            Console.WriteLine(Format(CDate(Date.DaysInMonth(dtn.Year, dtn.Month) & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())
                    End Select


                Case 31
                    Select Case dtn.Month
                        Case 1, 3, 5, 7, 8, 10, 12
                            dtn.Day = 31
                            Console.WriteLine(dtn)


                        Case 4, 6, 9, 11
                            dtn.Day = 30

                            Console.WriteLine(dtn)

                        Case 2
                            Console.WriteLine(Format(CDate(Date.DaysInMonth(dtn.Year, dtn.Month) & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())


                    End Select


            End Select

        Next

        Console.ReadLine()
    End Sub





j'ai essaie de résoudre le problème on affectant directement la valeur du jours mais ça marche pas Erreur La propriété 'Day' est 'ReadOnly'.

merci d'avance
Commenter la réponse de johnjjj
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012
0
Merci
j'ai essaie d'affecter directement la valeur du jours mais toujours depuis le mois 3 il bloque dans 28 jours

j'ai bloque




Sub Main()

        Dim number As Integer = 100

        Dim i As Integer
        Dim dtn As Date = "30/09/2012"

        For i = 1 To number


            dtn = dtn.AddMonths(1)

            Select Case dtn.Day


                Case 1 To 28
                    Console.WriteLine(Format(CDate(dtn.Day & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())
                    'Console.WriteLine(dtn)

                Case 29

                    Select Case dtn.Month
                        Case 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
                            Console.WriteLine(Format(CDate(29 & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())

                            Console.WriteLine(dtn)
                        Case 2
                            Console.WriteLine(Format(CDate(Date.DaysInMonth(dtn.Year, dtn.Month) & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())
                    End Select


                Case 30

                    Select Case dtn.Month
                        Case 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

                            Console.WriteLine(Format(CDate(30 & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())

                        Case 2
                            Console.WriteLine(Format(CDate(Date.DaysInMonth(dtn.Year, dtn.Month) & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())
                    End Select


                Case 31
                    Select Case dtn.Month
                        Case 1, 3, 5, 7, 8, 10, 12
                            Console.WriteLine(Format(CDate(31 & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())



                        Case 4, 6, 9, 11
                            Console.WriteLine(Format(CDate(30 & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())


                        Case 2
                            Console.WriteLine(Format(CDate(Date.DaysInMonth(dtn.Year, dtn.Month) & "/" & dtn.Month & "/" & dtn.Year), "dd/ MM / yyyy").ToString())


                    End Select


            End Select

        Next

        Console.ReadLine()
    End Sub

merci
Commenter la réponse de johnjjj
0
Merci
Bonjour,

Un coup d'oeil dans l'aide (sic) de VB 2010 nous dit que la méthode DaysInMonth de la structure DayTime retourne le nombre de jours dans le mois.
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour,

Je n'ai pas envie d'épuiser la charge de la batterie de mon portable, mais une fois qu'on a le mois et que l'on a trouvé le nombre de jours dans le mois, un banal IF et une addition, ou une soustraction tout aussi banale devrait faire la job.
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Bonjour,
Je rappelle que le dernier jour d'un mois est tout bêtement la veille du premier jour du mois suivant.
A partir de là ...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
Messages postés
120
Date d'inscription
dimanche 4 avril 2010
Statut
Membre
Dernière intervention
24 septembre 2012
0
Merci
merci Mr banana32
ça marche bien, vraiment j'ai appris beaucoup de chose dans ce site web les codes source+ forum
j'ai l'honneur d'êtres dans ce forum avec des développeur de haute niveau

merci Mr banana32
merci mon chef
merci
Commenter la réponse de johnjjj