OVH Cloud OVH Cloud

Code VBA dans Excel

5 réponses
Avatar
Bongard
Quelqu'un pourrait me dire comment écrire du code VBA dans Excel pour écrire
une série de nombre (1 par colonne). Je m'explique : il faut que j'écrive les
nombres 1 - 2 - 3 - 4 - 5 - 6 dans un calendrier en partant du 1er janvier
pour se terminer au 31 décembre. Je peux faire une boucle, mais ce que je ne
sais pas, c'est comment faire pour qu'arriver au 31 janvier, au 28 ou 29
février (en fait à la fin de chaque mois) pour que ma boucle continue sur le
mois suivant. Par exemple : si le 31 janvier correspond au nombre 6, le 1er
février doit correspondre au nombre 1. Pour info, les chiffres doivent être
alignés sous les jours du calendrier. Pour moi, c'est un vrai casse-tête.
Quelqu'un aurait-il l'amabilité de me secourir ? Un grand merci.

5 réponses

Avatar
LE TROLL
Salut,

Tiens, testé, en espérant que ce soit ça qui tu veuilles... Si tu veux des
explications demande!

Sub Form_Load()
' objets ----->>>>> 1 form + 1 list (listBox)
Dim ladate As Date
Dim i As Integer
Dim j As Integer
Dim change As Boolean
'
ladate = "01/01/05"
List1.Clear
j = 1
change = False
'
For i = 1 To 366
List1.AddItem ladate & " : " & Format(j, "00")
If i > 1 Then
If Mid(ladate + 1, 1, 2) = 1 Then change = True
End If
ladate = ladate + 1
j = j + 1
If change = True Then
change = False
j = 1
End If
If i = 365 Then Exit For
Next i
End Sub

Ça donne par exemple
31/01/2005 = 31
01/02/2005 = 01...
----------------------------

"Bongard" a écrit dans le message de news:

Quelqu'un pourrait me dire comment écrire du code VBA dans Excel pour écrire
une série de nombre (1 par colonne). Je m'explique : il faut que j'écrive les
nombres 1 - 2 - 3 - 4 - 5 - 6 dans un calendrier en partant du 1er janvier
pour se terminer au 31 décembre. Je peux faire une boucle, mais ce que je ne
sais pas, c'est comment faire pour qu'arriver au 31 janvier, au 28 ou 29
février (en fait à la fin de chaque mois) pour que ma boucle continue sur le
mois suivant. Par exemple : si le 31 janvier correspond au nombre 6, le 1er
février doit correspondre au nombre 1. Pour info, les chiffres doivent être
alignés sous les jours du calendrier. Pour moi, c'est un vrai casse-tête.
Quelqu'un aurait-il l'amabilité de me secourir ? Un grand merci.


Avatar
DJ
Bongard wrote:
Quelqu'un pourrait me dire comment écrire du code VBA dans Excel pour
écrire une série de nombre (1 par colonne). Je m'explique : il faut
que j'écrive les nombres 1 - 2 - 3 - 4 - 5 - 6 dans un calendrier en
partant du 1er janvier pour se terminer au 31 décembre. Je peux faire
une boucle, mais ce que je ne sais pas, c'est comment faire pour
qu'arriver au 31 janvier, au 28 ou 29 février (en fait à la fin de
chaque mois) pour que ma boucle continue sur le mois suivant. Par
exemple : si le 31 janvier correspond au nombre 6, le 1er février
doit correspondre au nombre 1. Pour info, les chiffres doivent être
alignés sous les jours du calendrier. Pour moi, c'est un vrai
casse-tête. Quelqu'un aurait-il l'amabilité de me secourir ? Un grand
merci.



Bonjour,
pour ton probleme de boucle, laisee faire les calculs à Windows :-)))
Demonstration tu ajoutes ca dans ta boucle qui parcours les colonnes
Tmp est la date de depart et DJ le Jour que tu cherches !
Dim i, dj, Tmp
Tmp = CDate("01/01/2005")
For i = 0 To 360
dj = Format(Tmp + i, "dd")
Next i

facile non ?
DJ
Avatar
FL
Heu... ça ne marche pas dans tous les cas

La fonction Mid prend une string comme 1er paramètre. Ainsi, si tu changes
le format système de la date, ça ne marche plus.

Pour tester si on est sur le dernier jour du mois, il y a cette solution :

Private Function DernierJour(ByVal Date_a_Tester As Date) As Boolean
If Month(Date_a_Tester) = 12 Then
If DateAdd("d", 1, Date_a_Tester) DateSerial(Year(Date_a_Tester) + 1, 1, 1) Then
DernierJour = True
End If
Else
If DateAdd("d", 1, Date_a_Tester) DateSerial(Year(Date_a_Tester), Month(Date_a_Tester) + 1, 1) Then
DernierJour = True
End If
End If
End Function


Explications :

La fonction DateAdd avec la lettre "d" permet d'ajouter un jour à
Date_a_Tester
La fonction DateSerial retourne une date qui correspond au premier jour du
mois suivant

=> Si Date_a_Tester + 1 jour = premier jour du mois suivant, alors on est
sur le dernier jour du mois

Le premier test "If Month(Date_a_Tester) = 12" permet de voir si on est au
mois de décembre, et donc de tester non pas par rapport au premier jour du
mois suivant, mais par rapport au premier jour de l'année suivante.

Espérant que ça aidera

@+



"LE TROLL" <le a écrit dans le message de news:
eNOLaR$

Salut,

Tiens, testé, en espérant que ce soit ça qui tu veuilles... Si tu veux


des
explications demande!

Sub Form_Load()
' objets ----->>>>> 1 form + 1 list (listBox)
Dim ladate As Date
Dim i As Integer
Dim j As Integer
Dim change As Boolean
'
ladate = "01/01/05"
List1.Clear
j = 1
change = False
'
For i = 1 To 366
List1.AddItem ladate & " : " & Format(j, "00")
If i > 1 Then
If Mid(ladate + 1, 1, 2) = 1 Then change = True
End If
ladate = ladate + 1
j = j + 1
If change = True Then
change = False
j = 1
End If
If i = 365 Then Exit For
Next i
End Sub

Ça donne par exemple
31/01/2005 = 31
01/02/2005 = 01...
----------------------------

"Bongard" a écrit dans le message de


news:

> Quelqu'un pourrait me dire comment écrire du code VBA dans Excel pour


écrire
> une série de nombre (1 par colonne). Je m'explique : il faut que


j'écrive les
> nombres 1 - 2 - 3 - 4 - 5 - 6 dans un calendrier en partant du 1er


janvier
> pour se terminer au 31 décembre. Je peux faire une boucle, mais ce que


je ne
> sais pas, c'est comment faire pour qu'arriver au 31 janvier, au 28 ou 29
> février (en fait à la fin de chaque mois) pour que ma boucle continue


sur le
> mois suivant. Par exemple : si le 31 janvier correspond au nombre 6, le


1er
> février doit correspondre au nombre 1. Pour info, les chiffres doivent


être
> alignés sous les jours du calendrier. Pour moi, c'est un vrai


casse-tête.
> Quelqu'un aurait-il l'amabilité de me secourir ? Un grand merci.




Avatar
LE TROLL
Salut,

Tu as raison, mais bon, je ne faisais pas un programme international,
c'était juste pour le principe, on peut aussi mettre des select cases: suivant
année bissextile ou nom, si mois = y, y, z... Ce qui ne retire pas le problème
du jour, bon, bref, c'est mieux ce e tu propose :o)
-------------


"FL" <flerin@(nospam).com> a écrit dans le message de news:
efdOrm$
Heu... ça ne marche pas dans tous les cas

La fonction Mid prend une string comme 1er paramètre. Ainsi, si tu changes
le format système de la date, ça ne marche plus.

Pour tester si on est sur le dernier jour du mois, il y a cette solution :

Private Function DernierJour(ByVal Date_a_Tester As Date) As Boolean
If Month(Date_a_Tester) = 12 Then
If DateAdd("d", 1, Date_a_Tester) > DateSerial(Year(Date_a_Tester) + 1, 1, 1) Then
DernierJour = True
End If
Else
If DateAdd("d", 1, Date_a_Tester) > DateSerial(Year(Date_a_Tester), Month(Date_a_Tester) + 1, 1) Then
DernierJour = True
End If
End If
End Function


Explications :

La fonction DateAdd avec la lettre "d" permet d'ajouter un jour à
Date_a_Tester
La fonction DateSerial retourne une date qui correspond au premier jour du
mois suivant

=> Si Date_a_Tester + 1 jour = premier jour du mois suivant, alors on est
sur le dernier jour du mois

Le premier test "If Month(Date_a_Tester) = 12" permet de voir si on est au
mois de décembre, et donc de tester non pas par rapport au premier jour du
mois suivant, mais par rapport au premier jour de l'année suivante.

Espérant que ça aidera

@+



"LE TROLL" <le a écrit dans le message de news:
eNOLaR$

Salut,

Tiens, testé, en espérant que ce soit ça qui tu veuilles... Si tu veux


des
explications demande!

Sub Form_Load()
' objets ----->>>>> 1 form + 1 list (listBox)
Dim ladate As Date
Dim i As Integer
Dim j As Integer
Dim change As Boolean
'
ladate = "01/01/05"
List1.Clear
j = 1
change = False
'
For i = 1 To 366
List1.AddItem ladate & " : " & Format(j, "00")
If i > 1 Then
If Mid(ladate + 1, 1, 2) = 1 Then change = True
End If
ladate = ladate + 1
j = j + 1
If change = True Then
change = False
j = 1
End If
If i = 365 Then Exit For
Next i
End Sub

Ça donne par exemple
31/01/2005 = 31
01/02/2005 = 01...
----------------------------

"Bongard" a écrit dans le message de


news:

> Quelqu'un pourrait me dire comment écrire du code VBA dans Excel pour


écrire
> une série de nombre (1 par colonne). Je m'explique : il faut que


j'écrive les
> nombres 1 - 2 - 3 - 4 - 5 - 6 dans un calendrier en partant du 1er


janvier
> pour se terminer au 31 décembre. Je peux faire une boucle, mais ce que


je ne
> sais pas, c'est comment faire pour qu'arriver au 31 janvier, au 28 ou 29
> février (en fait à la fin de chaque mois) pour que ma boucle continue


sur le
> mois suivant. Par exemple : si le 31 janvier correspond au nombre 6, le


1er
> février doit correspondre au nombre 1. Pour info, les chiffres doivent


être
> alignés sous les jours du calendrier. Pour moi, c'est un vrai


casse-tête.
> Quelqu'un aurait-il l'amabilité de me secourir ? Un grand merci.








Avatar
jt
voici une petite procedure qui te rempli un calendrier a partir de A1 et qui
change de colonne chaque mois
Sub rempli()
Dim wk As Workbook
Dim sh As Worksheet
Set wk = Application.ActiveWorkbook
Set sh = wk.ActiveSheet
Dim a As Long
Dim an As Long
an = 2005
cemois = 1
For a = 1 To 366
unedate = DateSerial(an, 1, a)
If Year(unedate) = an Then
If Month(unedate) <> cemois Then b = 0
b = b + 1
sh.Cells(b, Month(unedate)).Value = unedate
cemois = Month(unedate)
End If
Next
End Sub

"Bongard" a écrit dans le message de
news:
Quelqu'un pourrait me dire comment écrire du code VBA dans Excel pour
écrire
une série de nombre (1 par colonne). Je m'explique : il faut que j'écrive
les
nombres 1 - 2 - 3 - 4 - 5 - 6 dans un calendrier en partant du 1er janvier
pour se terminer au 31 décembre. Je peux faire une boucle, mais ce que je
ne
sais pas, c'est comment faire pour qu'arriver au 31 janvier, au 28 ou 29
février (en fait à la fin de chaque mois) pour que ma boucle continue sur
le
mois suivant. Par exemple : si le 31 janvier correspond au nombre 6, le
1er
février doit correspondre au nombre 1. Pour info, les chiffres doivent
être
alignés sous les jours du calendrier. Pour moi, c'est un vrai casse-tête.
Quelqu'un aurait-il l'amabilité de me secourir ? Un grand merci.