XL 2021 VBA dates au mauvais format

  • Initiateur de la discussion Initiateur de la discussion grodep
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

grodep

XLDnaute Occasionnel
Bonjour a tous, mon excel, récalcitrant comme dhabitude (ca ne peut évidemment ps etre ma faute) ne veut pas comprendre le format dans lequel je souhaite voir apparaitre les dates: je lui précise bien que je veux un format europée dd/mm/yyyy et il me les affiche au format américain: mm/dd/yyyy

VB:
 ' Remplir les dates
            ws.Cells(ligne, colonneDebut).Value = Format(currentDate, "dd/mm/yyyy")
            ws.Cells(ligne + 1, colonneDebut).Value = "au"
            ws.Cells(ligne + 2, colonneDebut).Value = Format(dateFin, "dd/mm/yyyy")

Ca me parait pourtant clair, non??
Je suis désespéré chaque fois que je ne parviens pas a résoudre des trucs aussi simples...

L ensemble du code ici et le fichier en pj si besoin :

Code:
Sub RemplirTableauSemaines()
    Dim ws As Worksheet
    Dim dateDepart As Date
    Dim dateFin As Date
    Dim currentDate As Date
    Dim i As Integer, j As Integer
    Dim colonneDebut As Integer
    Dim ligne As Integer

    ' Référence à la feuille Astr
    Set ws = ThisWorkbook.Sheets("Astr")
    
    ' Vider la feuille en dessous de la ligne 4
    ws.Rows("5:" & ws.Rows.Count).ClearContents
    ws.Rows("5:" & ws.Rows.Count).ClearFormats
    
    ' Récupérer la date de départ en cellule A4
    dateDepart = ws.Range("A4").Value
    
    ' Initialiser les variables
    ligne = 8
    currentDate = DateSerial(Year(dateDepart), Month(dateDepart), 1)
    
    ' Remplir les 3 blocs
    For j = 0 To 2
        ' Définir la colonne de début pour chaque bloc
        colonneDebut = 1 + j * 3
        
        ' Insérer les titres en ligne 7
        With ws
            .Cells(7, colonneDebut).Value = "Semaines"
            .Cells(7, colonneDebut + 1).Value = "Mar"
            .Cells(7, colonneDebut + 2).Value = "Har"
            
            ' Mettre les titres en gras
            .Range(.Cells(7, colonneDebut), .Cells(7, colonneDebut + 2)).Font.Bold = True
        End With
        
        ' Remplir le bloc de semaines
        Do While Month(currentDate) = Month(dateDepart)
            ' Déterminer la fin de semaine (dimanche)
            dateFin = currentDate + (7 - Weekday(currentDate, vbMonday))
            
            ' Remplir les dates
            ws.Cells(ligne, colonneDebut).Value = Format(currentDate, "dd/mm/yyyy")
            ws.Cells(ligne + 1, colonneDebut).Value = "au"
            ws.Cells(ligne + 2, colonneDebut).Value = Format(dateFin, "dd/mm/yyyy")
            
            ' Passer à la semaine suivante
            currentDate = dateFin + 1
            ligne = ligne + 3
        Loop
        
            
        ' Réinitialiser la ligne pour le bloc suivant
        If j < 2 Then
            ligne = 8
            dateDepart = currentDate
        End If
    Next j
End Sub
 

Pièces jointes

Solution
hello
un essai avec ceci
ce que j'ai appris récemment.. quand il s'agit de récuperer une date placée dans la feuille excel, il faut passer par value2 pour que VBA récupère la date SANS essayer de reconnaitre le format d'affichage..

VB:
Sub RemplirTableauSemaines()
    Dim ws As Worksheet
    Dim dateDepart As Date
    Dim dateFin As Date
    Dim currentDate As Date
    Dim i As Integer, j As Integer
    Dim colonneDebut As Integer
    Dim ligne As Integer

    ' Référence à la feuille Astr
    Set ws = ThisWorkbook.Sheets("Astr")
    
    ' Vider la feuille en dessous de la ligne 4
    ws.Rows("5:" & ws.Rows.Count).ClearContents
    ws.Rows("5:" & ws.Rows.Count).ClearFormats
    
    ' Récupérer la date de départ en cellule A4...
hello
un essai avec ceci
ce que j'ai appris récemment.. quand il s'agit de récuperer une date placée dans la feuille excel, il faut passer par value2 pour que VBA récupère la date SANS essayer de reconnaitre le format d'affichage..

VB:
Sub RemplirTableauSemaines()
    Dim ws As Worksheet
    Dim dateDepart As Date
    Dim dateFin As Date
    Dim currentDate As Date
    Dim i As Integer, j As Integer
    Dim colonneDebut As Integer
    Dim ligne As Integer

    ' Référence à la feuille Astr
    Set ws = ThisWorkbook.Sheets("Astr")
    
    ' Vider la feuille en dessous de la ligne 4
    ws.Rows("5:" & ws.Rows.Count).ClearContents
    ws.Rows("5:" & ws.Rows.Count).ClearFormats
    
    ' Récupérer la date de départ en cellule A4
    dateDepart = ws.Range("A4").Value2
    'MsgBox Month(dateDepart)
    ' Initialiser les variables
    ligne = 8
    currentDate = DateSerial(Year(dateDepart), Month(dateDepart), 1)
   ' MsgBox Month(currentDate)
    ' Remplir les 3 blocs
    For j = 0 To 2
        ' Définir la colonne de début pour chaque bloc
        colonneDebut = 1 + j * 3
        
        ' Insérer les titres en ligne 7
        With ws
            .Cells(7, colonneDebut).Value = "Semaines"
            .Cells(7, colonneDebut + 1).Value = "Mar"
            .Cells(7, colonneDebut + 2).Value = "Har"
            
            ' Mettre les titres en gras
            .Range(.Cells(7, colonneDebut), .Cells(7, colonneDebut + 2)).Font.Bold = True
        End With
        
        ' Remplir le bloc de semaines
        Do While Month(currentDate) = Month(dateDepart)
            ' Déterminer la fin de semaine (dimanche)
            dateFin = currentDate + (7 - Weekday(currentDate, vbMonday))
            
            ' Remplir les dates
            ws.Cells(ligne, colonneDebut) = currentDate
            ws.Cells(ligne + 1, colonneDebut).Value = "au"
            ws.Cells(ligne + 2, colonneDebut).Value = dateFin
            
            ' Passer à la semaine suivante
            currentDate = dateFin + 1
            ligne = ligne + 3
        Loop
        
            
        ' Réinitialiser la ligne pour le bloc suivant
        If j < 2 Then
            ligne = 8
            dateDepart = currentDate
        End If
    Next j
End Sub
 
hello
un essai avec ceci
ce que j'ai appris récemment.. quand il s'agit de récuperer une date placée dans la feuille excel, il faut passer par value2 pour que VBA récupère la date SANS essayer de reconnaitre le format d'affichage..

VB:
Sub RemplirTableauSemaines()
    Dim ws As Worksheet
    Dim dateDepart As Date
    Dim dateFin As Date
    Dim currentDate As Date
    Dim i As Integer, j As Integer
    Dim colonneDebut As Integer
    Dim ligne As Integer

    ' Référence à la feuille Astr
    Set ws = ThisWorkbook.Sheets("Astr")
   
    ' Vider la feuille en dessous de la ligne 4
    ws.Rows("5:" & ws.Rows.Count).ClearContents
    ws.Rows("5:" & ws.Rows.Count).ClearFormats
   
    ' Récupérer la date de départ en cellule A4
    dateDepart = ws.Range("A4").Value2
    'MsgBox Month(dateDepart)
    ' Initialiser les variables
    ligne = 8
    currentDate = DateSerial(Year(dateDepart), Month(dateDepart), 1)
   ' MsgBox Month(currentDate)
    ' Remplir les 3 blocs
    For j = 0 To 2
        ' Définir la colonne de début pour chaque bloc
        colonneDebut = 1 + j * 3
       
        ' Insérer les titres en ligne 7
        With ws
            .Cells(7, colonneDebut).Value = "Semaines"
            .Cells(7, colonneDebut + 1).Value = "Mar"
            .Cells(7, colonneDebut + 2).Value = "Har"
           
            ' Mettre les titres en gras
            .Range(.Cells(7, colonneDebut), .Cells(7, colonneDebut + 2)).Font.Bold = True
        End With
       
        ' Remplir le bloc de semaines
        Do While Month(currentDate) = Month(dateDepart)
            ' Déterminer la fin de semaine (dimanche)
            dateFin = currentDate + (7 - Weekday(currentDate, vbMonday))
           
            ' Remplir les dates
            ws.Cells(ligne, colonneDebut) = currentDate
            ws.Cells(ligne + 1, colonneDebut).Value = "au"
            ws.Cells(ligne + 2, colonneDebut).Value = dateFin
           
            ' Passer à la semaine suivante
            currentDate = dateFin + 1
            ligne = ligne + 3
        Loop
       
           
        ' Réinitialiser la ligne pour le bloc suivant
        If j < 2 Then
            ligne = 8
            dateDepart = currentDate
        End If
    Next j
End Sub
ca fonctionne tres bien, je vais tenter de comprendre ce que tes modifications ont provoquées. Grand merci en tout cas
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
0
Affichages
379
Réponses
1
Affichages
467
Réponses
2
Affichages
405
Réponses
2
Affichages
718
Retour