Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2021 VBA dates au mauvais format

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

  • Astr.xlsm
    20.7 KB · Affichages: 4
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...

vgendron

XLDnaute Barbatruc
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
 

grodep

XLDnaute Occasionnel
ca fonctionne tres bien, je vais tenter de comprendre ce que tes modifications ont provoquées. Grand merci en tout cas
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Moi je dis qu'il ne faut jamais attribuer une expression String à une Value de cellule qui doit valoir finalement autre chose qu'un String. Cela pousse Excel à tenter de l'interpréter comme une donnée d'un autre type, selon une règle anglo-saxonne.
 

vgendron

XLDnaute Barbatruc
Hello Bernard
de plus, l'option explicit serait utile pour etre clair sur le type des données traitées
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…