Afficher les mois incrémenter

Résolu
johnjjj Messages postés 120 Date d'inscription dimanche 4 avril 2010 Statut Membre Dernière intervention 24 septembre 2012 - 23 sept. 2012 à 21:36
 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

13 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
23 sept. 2012 à 23:14
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
3
Utilisateur anonyme
24 sept. 2012 à 02:16
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)
3
Utilisateur anonyme
24 sept. 2012 à 03:04
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 sept. 2012 à 18:03
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
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
24 sept. 2012 à 18:18
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
3
johnjjj Messages postés 120 Date d'inscription dimanche 4 avril 2010 Statut Membre Dernière intervention 24 septembre 2012
23 sept. 2012 à 23:34
bonjour
NHenry merci de votre réponse
et comment résoudre ce problème
merci
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
23 sept. 2012 à 23:43
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
0
johnjjj Messages postés 120 Date d'inscription dimanche 4 avril 2010 Statut Membre Dernière intervention 24 septembre 2012
24 sept. 2012 à 01:42
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
0
johnjjj Messages postés 120 Date d'inscription dimanche 4 avril 2010 Statut Membre Dernière intervention 24 septembre 2012
24 sept. 2012 à 02:13
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
0
Utilisateur anonyme
24 sept. 2012 à 17:08
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.
0
Utilisateur anonyme
24 sept. 2012 à 17:12
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 sept. 2012 à 17:19
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
0
johnjjj Messages postés 120 Date d'inscription dimanche 4 avril 2010 Statut Membre Dernière intervention 24 septembre 2012
24 sept. 2012 à 17:53
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
0
Rejoignez-nous