Affichage format date

StrikeBEH

XLDnaute Occasionnel
Bonjour,
J'utilise la boucle:
Code:
Dim i As Integer
Dim j As String
For i = 1 To Day(WorksheetFunction.EoMonth(Date, 0))
If i < 10 Then
    j = "0" & i
    Else
    j = i
End If
Range("B" & i + 6) = j & UCase(Left(Format(i, "ddd"), 1))
Next i

pour afficher dans la colonne "B" les jours que comprend le mois en cours (février en l'occurence) sous la forme "01D", "02L"...

La lettre derrière le chiffre désigne le jour de la semaine.

Y aurait-il un code plus "simple" pour arriver à ce même résultat ?

Par avance merci à tous,
 

Roland_M

XLDnaute Barbatruc
Re : Affichage format date

bien le bonjour à tous,

copier ceci dans un module pour faire essai simplement avec F5
(pour le coup il n'est pas plus simple mais explications ...)

Code:
'exemple sur excel avec la date en C1 "01/02/2014"
'en C2 =JOUR($C$1+0)&CHOISIR(JOURSEM($C$1+0;2);"L";"M";"M";"J";"V";"S";"D")
'en C3 =JOUR($C$1+1)&CHOISIR(JOURSEM($C$1+1;2);"L";"M";"M";"J";"V";"S";"D")
'en C4 =JOUR($C$1+2)&CHOISIR(JOURSEM($C$1+2;2);"L";"M";"M";"J";"V";"S";"D")
'...
'
'
'ton code n'est pas tout à fais correcte,
'car le 1'février 2014 c'est Samedi et non pas Dimanche !
'pour les jours de sem c'est selon les réglages des paramètres dans windows !?
'   premier jour Lundi ou Dimanche ?
'si Dimanche ici > UCase(Left(Format(I - 0, "ddd"), 1))
'si Lundi    ici > UCase(Left(Format(I - 1, "ddd"), 1))

'ensuite pour les dates inf. au 01/03/1900 il faut ajouter+1 à la date!
' pour s'en convaincre il suffit de TAPER F5 ici
'(la raison pour laquelle j'utilise ma function FNbrDeJrMois())
Sub VerificationDate()
Dim Dat As Date
Dat = "01/01/1900" ' ici il donne 30 alors que c'est 31 !
MsgBox Day(WorksheetFunction.EoMonth(Dat, 0)) 
Dat = "01/02/1900" ' ici il donne 27 alors que c'est 28 !
MsgBox Day(WorksheetFunction.EoMonth(Dat, 0)) 
End Sub



Sub TonCodeModifie()
Dim I%, J$
For I = 1 To FNbrDeJrMois(Year(Date), Month(Date))
 If I < 10 Then J = "0" & I Else J = I
 MsgBox J & UCase(Left(Format(I - 1, "ddd"), 1))
 'Range("B" & I + 6) = J & UCase(Left(Format(I - 1, "ddd"), 1))
Next
End Sub

Private Function FNbrDeJrMois(AnneeX, MoisX) As Integer
FNbrDeJrMois = Choose(MoisX, 31, 28 + (1 And IsDate("29/02/" & AnneeX)), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
'ou If AnneeX Mod 4 = 0 And (AnneeX Mod 100 <> 0 Or AnneeX Mod 400 = 0) Then Fev = 29 Else Fev = 28
End Function
 
Dernière édition:

StrikeBEH

XLDnaute Occasionnel
Re : Affichage format date

Bonjour Roland_M, :D
Mon précédent message s'adressait à kingfadhel et non pas à toi Roland_M !
Puisqu'il trouvait que mon code n'était pas assez clair alors que visiblement il l'a été pour toi !

D'ailleurs en m'inspirant de ton code j'ai modifié le mien en conséquence, ce qui donne:
Code:
Dim j As String
For i = 1 To Day(WorksheetFunction.EoMonth(Date, 0))
If i < 10 Then
    j = "0" & i
    Else
    j = i
End If
Range("B" & i + 6).Font.Size = 10
Range("B" & i + 6) = j & UCase(Left(Format(i - 1, "ddd"), 1))
If UCase(Left(Format(i - 1, "ddd"), 1)) = "S" Then
    Range("C" & i + 6) = "CC"
    Else
    If UCase(Left(Format(i - 1, "ddd"), 1)) = "D" Then
        Range("C" & i + 6) = "CR"
        Else
        Range("C" & i + 6) = "JT"
    End If
End If
Next i

Ca a l'air de mieux fonctionner ainsi et je t'en remercie !!!
Pour info, j'ai testé en changeant la date système, en choississant par exemple février 2016 (année bissextile) et cela m'affiche bien 29 jours dans mon tableau...
Encore merci à toi !
 

Modeste geedee

XLDnaute Barbatruc
Re : Affichage format date

Bonsour®
D'ailleurs en m'inspirant de ton code j'ai modifié le mien en conséquence

en restructurant cela donne ceci :
VB:
Dim i As Integer
    For i = 1 To Day(WorksheetFunction.EoMonth(Date, 0))
        Range("B" & i + 6).Font.Size = 10
        Range("B" & i + 6) = Format(i, "00") & UCase(Left(Format(i, "ddd"), 1))
        Select Case Right(Range("B" & i + 6), 1)
            Case Is = "S"
                Range("C" & i + 6) = "CC"
            Case Is = "D"
                Range("C" & i + 6) = "CR"
            Case Else
                Range("C" & i + 6) = "JT"
        End Select
    Next i

:rolleyes:
cependant comme tu n'utilises pas réellement les dates
cela posera un problème lorsque qu'il te faudra gérer les jours fériés légaux
ex :
lundi de Pâques = Non JT
1er Mai =Non JT
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Affichage format date

Bonjour à tous


Ma grippe me laisse juse assez de force pour faire de la formule plutôt que du VBA ;)
Code:
=TEXTE(A1;"jj")&STXT("LMMJVSD";JOURSEM(A1;2);1)
Mais cette formule ci-dessous est facilement transposable en VBA avec Mid.
Je te laisse tenter la chose, StrikeBEH ;)
 

Modeste geedee

XLDnaute Barbatruc
Re : Affichage format date

Bonsour®
Bonjour à tous
Ma grippe me laisse juse assez de force pour faire de la formule plutôt que du VBA ;)
Code:
=TEXTE(A1;"jj")&STXT("LMMJVSD";JOURSEM(A1;2);1)
Mais cette formule ci-dessous est facilement transposable en VBA avec Mid.
Je te laisse tenter la chose, StrikeBEH ;)

on ne le répétera jamais assez, l'absence d'un fichier exemple, permet de multiples hypothèses...

comme dit dans mon intervention précédente, il n'a pas encore été ici évoqué cette notion de dates réelles, ni de dates en colonne A.

tout comme toi ma première idée avait été "formuliste"... :rolleyes:
 

Roland_M

XLDnaute Barbatruc
Re : Affichage format date

re

classeur exemple avec la formule Staple1600 !
'=SI(A1="";"";TEXTE($A1;"jj")&STXT("LMMJVSD";JOURSEM($A1;2);1))
 

Pièces jointes

  • Classeur1.xlsm
    12.4 KB · Affichages: 57
  • Classeur1.xlsm
    12.4 KB · Affichages: 57
  • Classeur1.xlsm
    12.4 KB · Affichages: 58

Discussions similaires

Réponses
5
Affichages
191

Statistiques des forums

Discussions
312 239
Messages
2 086 503
Membres
103 236
dernier inscrit
Menni