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

  • 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
 
ca fonctionne tres bien, je vais tenter de comprendre ce que tes modifications ont provoquées. Grand merci en tout cas
 
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.
 
Hello Bernard
de plus, l'option explicit serait utile pour etre clair sur le type des données traitées
 
- 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
367
Réponses
1
Affichages
452
Réponses
2
Affichages
371
Réponses
2
Affichages
691
Réponses
12
Affichages
966
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…