Bonjour à tous,
Je souhaiterais faire en Visual basic un petit module qui me donnerais les
dates mensuelles en partant d'un jour que j'aurai entré sur un TextBox.
Exemple: entrer le 12 et avoir sur ma feuille correspondante a1=10/01/2009
a2 10/02/2009 etc. en sachant que je sais créer une boucle avec un compteur,
mais le problème est la modif du mois, surtout dans le cas d'un 29, 30 ou
31.
Je pense, que j'arriverais à bidouiller un truc à la flan? Mais j'aimerais
avoir quelque chose de plus "pro".
D'avance merci à vous
Patrick
Le 2/08/09 15:35, dans C69B62D0.2BB%, « Patou » a écrit : Ouf ça marche Encore mille merci et ci dessous Mon module fini Patrick
Private Sub CommandButton1_Click() Dim Année As Long, mois As Integer, J As Integer Dim MaDate As Date, A As Integer, jour As Integer
If IsDate(Me.TextBox1) = True Then MaDate = CDate(Me.TextBox1) Année = Year(MaDate) moi = Month(MaDate) jour = Day(MaDate) With Worksheets("Feuil1") For A = 1 To 12 mois = moi + A - 1 'Dans la colonne A1:A12, la date 'des 12 mois suivants à la date saisie 'dans le textbox (le jour 1 du mois If Day(DateSerial(Année, moi, jour)) <= 28 Then With .Range("A" & A) .Value = DateSerial(Année, mois, jour) .NumberFormat = "DD/MM/YYYY"
End With Else If Month(DateSerial(Année, mois, 1)) = 2 Then If jour > 28 Then If IsBissextile(An) Then J = 29 End If Else J = jour End If End If With .Range("A" & A)
.Value = DateSerial(Année, mois + 1, J) .NumberFormat = "DD/MM/YYYY" End With End If Next End With
Else MsgBox "La date saisie dans le TextBox est erronée" End If End Sub
C'est bien ce que j'avais cru comprendre. D'ailleurs je préfererai n'entrer qu'un jour puisque les mois et l'année sont aisément créable par déduction informatique c'est plus simple et plus rapide à la saisie . j'ai fait ainsi pour mes saisies date des journaux comptables puisque j'ouvre un document avril par exemple je tape que la date soit le 5 et je le transforme en 5 avril 2009 . Merci de tout Je reprend mon boulot comme cela Patrick
Le 2/08/09 15:04, dans #, « MichDenis » a écrit :
la difficulté que tu rencontres en est une connue lorsque l'on utilise un textbox pour saisir une date.
Lorsque tu entres par exemple 6 juin 2009 en utilisant ce format : 06/06/09, il n'y aucune façon de savoir pour excel si l'usager voulait signifier une date présentée dans le format JJ/MM/AA ou MM/JJ/AA ou AA/MM/JJ comme le mentionnait Sam. En utilisant la fonction de conversion Cdate(), Excel utilise le format Date défini dans le panneau de configuration de Windows pour interpréter la date. Il n'y a pas nécessairement concordance entre le format de la date de saisie et le format date du panneau de configuration de Windows.
En conséquence, l'usager devrait utiliser ce dernier format pour la saisie de la date. La chose se complique car ce format peut être différent d'un ordinateur à un autre...ce qui rend très difficile l'homogénisation de la saisie de la date.
2 solutions : A ) utilisation du contrôle "Calendar" de la boîte d'outils de l'userform dans les contrôles supplémentaires. B ) employer 3 textbox dûment identifiés... un pour le jour, 1 pour le mois et un pour l'année.
"Patou" a écrit dans le message de groupe de discussion : C69B1FC7.2B5% Rererebonjour, J'ai adapté la réponse de michdenis, pour approcher ce que je souhaite, mais je rencontre un problème que je ne sais pas passer. Lorsque je rentre dans le textbox une date comprise entre 13/01/09 par exemple et 31/01/09. PARFAIT. Mais lorsque ma date est comprise entre 01/01/09 et 12/01/09:ERREUR Au lieu de donner ex 01/01/09;01/02/09;01/03/09 J'ai les réponses 01/01/09;02/01/09;03/01/09. Tout se passe comme si au lieu d'incrémenter le mois, le programme incrémente le jour. Merci de m'apporter une solution Patrick Ci dessous ma procédure dans un user form
Private Sub CommandButton1_Click() Dim Année As Long, mois As Integer, J As Integer Dim MaDate As Date, A As Integer, jour As Integer
If IsDate(Me.TextBox1) = True Then MaDate = CDate(Me.TextBox1) Année = Year(MaDate) mois = Month(MaDate) jour = Day(MaDate)
With Worksheets("Feuil1") For A = 1 To 12 'Dans la colonne A1:A12, la date 'des 12 mois suivants à la date saisie 'dans le textbox (le jour 1 du mois If Day(DateSerial(Année, mois, jour)) <= 28 Then With .Range("A" & A) .NumberFormat = "DD/MM/YYYY" .Value = Format(DateSerial(Année, mois + A - 1, jour), _ "DD/MM/YYYY") End With Else If Month(DateSerial(Année, mois, 1)) = 2 Then If jour > 28 Then If IsBissextile(An) Then J = 29 End If Else J = jour End If End If With .Range("A" & A) .NumberFormat = "DD/MM/YYYY" .Value = Format(DateSerial(Année, mois + A, J), _ "DD/MM/YYYY") End With End If Next End With
Else MsgBox "La date saisie dans le TextBox est erronée" End If End Sub
Le 2/08/09 15:35, dans C69B62D0.2BB%pastout@orange.fr, « Patou »
<pastout@orange.fr> a écrit :
Ouf ça marche
Encore mille merci et ci dessous
Mon module fini
Patrick
Private Sub CommandButton1_Click()
Dim Année As Long, mois As Integer, J As Integer
Dim MaDate As Date, A As Integer, jour As Integer
If IsDate(Me.TextBox1) = True Then
MaDate = CDate(Me.TextBox1)
Année = Year(MaDate)
moi = Month(MaDate)
jour = Day(MaDate)
With Worksheets("Feuil1")
For A = 1 To 12
mois = moi + A - 1
'Dans la colonne A1:A12, la date
'des 12 mois suivants à la date saisie
'dans le textbox (le jour 1 du mois
If Day(DateSerial(Année, moi, jour)) <= 28 Then
With .Range("A" & A)
.Value = DateSerial(Année, mois, jour)
.NumberFormat = "DD/MM/YYYY"
End With
Else
If Month(DateSerial(Année, mois, 1)) = 2 Then
If jour > 28 Then
If IsBissextile(An) Then
J = 29
End If
Else
J = jour
End If
End If
With .Range("A" & A)
.Value = DateSerial(Année, mois + 1, J)
.NumberFormat = "DD/MM/YYYY"
End With
End If
Next
End With
Else
MsgBox "La date saisie dans le TextBox est erronée"
End If
End Sub
C'est bien ce que j'avais cru comprendre. D'ailleurs je préfererai n'entrer
qu'un jour puisque les mois et l'année sont aisément créable par déduction
informatique c'est plus simple et plus rapide à la saisie . j'ai fait ainsi
pour mes saisies date des journaux comptables puisque j'ouvre un document
avril par exemple je tape que la date soit le 5 et je le transforme en 5
avril 2009 .
Merci de tout
Je reprend mon boulot comme cela
Patrick
Le 2/08/09 15:04, dans #boaIH3EKHA.4432@TK2MSFTNGP05.phx.gbl, « MichDenis »
<michdenis@hotmail.com> a écrit :
la difficulté que tu rencontres en est une connue lorsque l'on
utilise un textbox pour saisir une date.
Lorsque tu entres par exemple 6 juin 2009 en utilisant ce
format : 06/06/09, il n'y aucune façon de savoir pour excel si l'usager
voulait signifier une date présentée dans le format JJ/MM/AA
ou MM/JJ/AA ou AA/MM/JJ comme le mentionnait Sam.
En utilisant la fonction de conversion Cdate(), Excel utilise le
format Date défini dans le panneau de configuration de Windows
pour interpréter la date. Il n'y a pas nécessairement concordance
entre le format de la date de saisie et le format date du panneau
de configuration de Windows.
En conséquence, l'usager devrait utiliser ce dernier format pour la saisie
de la date. La chose se complique car ce format peut être différent d'un
ordinateur à un autre...ce qui rend très difficile l'homogénisation de la
saisie de la date.
2 solutions :
A ) utilisation du contrôle "Calendar" de la boîte d'outils de l'userform
dans les contrôles supplémentaires.
B ) employer 3 textbox dûment identifiés... un pour le jour, 1 pour le mois
et un pour l'année.
"Patou" <pastout@orange.fr> a écrit dans le message de groupe de discussion :
C69B1FC7.2B5%pastout@orange.fr...
Rererebonjour,
J'ai adapté la réponse de michdenis, pour approcher ce que je souhaite, mais
je rencontre un problème que je ne sais pas passer.
Lorsque je rentre dans le textbox une date comprise entre 13/01/09 par
exemple et 31/01/09. PARFAIT.
Mais lorsque ma date est comprise entre 01/01/09 et 12/01/09:ERREUR
Au lieu de donner ex 01/01/09;01/02/09;01/03/09
J'ai les réponses 01/01/09;02/01/09;03/01/09. Tout se passe comme si au lieu
d'incrémenter le mois, le programme incrémente le jour.
Merci de m'apporter une solution
Patrick
Ci dessous ma procédure dans un user form
Private Sub CommandButton1_Click()
Dim Année As Long, mois As Integer, J As Integer
Dim MaDate As Date, A As Integer, jour As Integer
If IsDate(Me.TextBox1) = True Then
MaDate = CDate(Me.TextBox1)
Année = Year(MaDate)
mois = Month(MaDate)
jour = Day(MaDate)
With Worksheets("Feuil1")
For A = 1 To 12
'Dans la colonne A1:A12, la date
'des 12 mois suivants à la date saisie
'dans le textbox (le jour 1 du mois
If Day(DateSerial(Année, mois, jour)) <= 28 Then
With .Range("A" & A)
.NumberFormat = "DD/MM/YYYY"
.Value = Format(DateSerial(Année, mois + A - 1, jour), _
"DD/MM/YYYY")
End With
Else
If Month(DateSerial(Année, mois, 1)) = 2 Then
If jour > 28 Then
If IsBissextile(An) Then
J = 29
End If
Else
J = jour
End If
End If
With .Range("A" & A)
.NumberFormat = "DD/MM/YYYY"
.Value = Format(DateSerial(Année, mois + A, J), _
"DD/MM/YYYY")
End With
End If
Next
End With
Else
MsgBox "La date saisie dans le TextBox est erronée"
End If
End Sub
Le 2/08/09 15:35, dans C69B62D0.2BB%, « Patou » a écrit : Ouf ça marche Encore mille merci et ci dessous Mon module fini Patrick
Private Sub CommandButton1_Click() Dim Année As Long, mois As Integer, J As Integer Dim MaDate As Date, A As Integer, jour As Integer
If IsDate(Me.TextBox1) = True Then MaDate = CDate(Me.TextBox1) Année = Year(MaDate) moi = Month(MaDate) jour = Day(MaDate) With Worksheets("Feuil1") For A = 1 To 12 mois = moi + A - 1 'Dans la colonne A1:A12, la date 'des 12 mois suivants à la date saisie 'dans le textbox (le jour 1 du mois If Day(DateSerial(Année, moi, jour)) <= 28 Then With .Range("A" & A) .Value = DateSerial(Année, mois, jour) .NumberFormat = "DD/MM/YYYY"
End With Else If Month(DateSerial(Année, mois, 1)) = 2 Then If jour > 28 Then If IsBissextile(An) Then J = 29 End If Else J = jour End If End If With .Range("A" & A)
.Value = DateSerial(Année, mois + 1, J) .NumberFormat = "DD/MM/YYYY" End With End If Next End With
Else MsgBox "La date saisie dans le TextBox est erronée" End If End Sub
C'est bien ce que j'avais cru comprendre. D'ailleurs je préfererai n'entrer qu'un jour puisque les mois et l'année sont aisément créable par déduction informatique c'est plus simple et plus rapide à la saisie . j'ai fait ainsi pour mes saisies date des journaux comptables puisque j'ouvre un document avril par exemple je tape que la date soit le 5 et je le transforme en 5 avril 2009 . Merci de tout Je reprend mon boulot comme cela Patrick
Le 2/08/09 15:04, dans #, « MichDenis » a écrit :
la difficulté que tu rencontres en est une connue lorsque l'on utilise un textbox pour saisir une date.
Lorsque tu entres par exemple 6 juin 2009 en utilisant ce format : 06/06/09, il n'y aucune façon de savoir pour excel si l'usager voulait signifier une date présentée dans le format JJ/MM/AA ou MM/JJ/AA ou AA/MM/JJ comme le mentionnait Sam. En utilisant la fonction de conversion Cdate(), Excel utilise le format Date défini dans le panneau de configuration de Windows pour interpréter la date. Il n'y a pas nécessairement concordance entre le format de la date de saisie et le format date du panneau de configuration de Windows.
En conséquence, l'usager devrait utiliser ce dernier format pour la saisie de la date. La chose se complique car ce format peut être différent d'un ordinateur à un autre...ce qui rend très difficile l'homogénisation de la saisie de la date.
2 solutions : A ) utilisation du contrôle "Calendar" de la boîte d'outils de l'userform dans les contrôles supplémentaires. B ) employer 3 textbox dûment identifiés... un pour le jour, 1 pour le mois et un pour l'année.
"Patou" a écrit dans le message de groupe de discussion : C69B1FC7.2B5% Rererebonjour, J'ai adapté la réponse de michdenis, pour approcher ce que je souhaite, mais je rencontre un problème que je ne sais pas passer. Lorsque je rentre dans le textbox une date comprise entre 13/01/09 par exemple et 31/01/09. PARFAIT. Mais lorsque ma date est comprise entre 01/01/09 et 12/01/09:ERREUR Au lieu de donner ex 01/01/09;01/02/09;01/03/09 J'ai les réponses 01/01/09;02/01/09;03/01/09. Tout se passe comme si au lieu d'incrémenter le mois, le programme incrémente le jour. Merci de m'apporter une solution Patrick Ci dessous ma procédure dans un user form
Private Sub CommandButton1_Click() Dim Année As Long, mois As Integer, J As Integer Dim MaDate As Date, A As Integer, jour As Integer
If IsDate(Me.TextBox1) = True Then MaDate = CDate(Me.TextBox1) Année = Year(MaDate) mois = Month(MaDate) jour = Day(MaDate)
With Worksheets("Feuil1") For A = 1 To 12 'Dans la colonne A1:A12, la date 'des 12 mois suivants à la date saisie 'dans le textbox (le jour 1 du mois If Day(DateSerial(Année, mois, jour)) <= 28 Then With .Range("A" & A) .NumberFormat = "DD/MM/YYYY" .Value = Format(DateSerial(Année, mois + A - 1, jour), _ "DD/MM/YYYY") End With Else If Month(DateSerial(Année, mois, 1)) = 2 Then If jour > 28 Then If IsBissextile(An) Then J = 29 End If Else J = jour End If End If With .Range("A" & A) .NumberFormat = "DD/MM/YYYY" .Value = Format(DateSerial(Année, mois + A, J), _ "DD/MM/YYYY") End With End If Next End With
Else MsgBox "La date saisie dans le TextBox est erronée" End If End Sub