Problème format date et jours à insérer

jim7963

XLDnaute Junior
Bonjour à tous,

je sais qu'il y a déjà de nombreux topics traitant des dates mais je n'arrive pas à trouver mon bonheur, ou alors avec mon niveau débutant, je n'arrive pas à adapter pour obtenir ce que je souhaite.

Mes deux problèmes se situent dans la macro "Calendrier".
J'ai inséré un code pour ouvrir une inputbox et saisir une date, code que j'utilise dans d'autres tableaux et qui marche très bien, et pourtant là, je ne sais pas pourquoi la date se met au format américain. Quand je tape 01/02/2013, au lieu que la cellule ne m'affiche Février 2013 elle m'affiche Janvier 2013.
Je ne sais pas d'où cela vient car le format de la cellule me semble correct.

Deuxième problème. En colonne A j'ai mes jours de la semaine du lundi au dimanche plus un total à la semaine.
En colonne B, ma macro renseigne le numéro de semaine. Cette partie fonctionne très bien. Je voudrais qu'elle m'insére également la date du jour mais c'est là que je bloque.

Exemple: en E1 j'ai ma date février 2013, en B11 le numéro de la semaine se calcul avec la macro (5 en l'occurence pour l'exemple), en A4 j'ai indiqué le jour (lundi), je souhaite qu'en B4 il mette le numéro du jour du lundi de la semaine 5 (le 28 pour cet exemple), même chose en B5 je veux le numéro du jour du mardi de la semaine 5 (le 29 dans cet exemple), et ainsi de suite jusqu'à la fin de mon tableau.

Je vous joins mon fichier pour que vous compreniez mieux.

Merci par avance pour l'aide que vous pourrez m'apporter.
 

Pièces jointes

  • Test date.xlsm
    179.2 KB · Affichages: 53
  • Test date.xlsm
    179.2 KB · Affichages: 52
  • Test date.xlsm
    179.2 KB · Affichages: 43

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Problème format date et jours à insérer

Bonsoir jim7963,

Pb n°1: Essayez peut-être le code suivant:
VB:
Do
  aa = InputBox("Saisir la date de l'OD au format jj/mm/aaaa", _
  "Date OD", Format("dd/mm/yyyy"))
  If IsDate(DateValue(aa)) Then Exit Do
  MsgBox "Date obligatoire"
Loop
Sheets("Récap").Range("E1").Value = DateValue(aa)
 

Papou-net

XLDnaute Barbatruc
Re : Problème format date et jours à insérer

Bonsoir jim7963, mapomme,

Pour ma part, voici comment je procèderais :

Code:
Sub Calendrier()
'
' Calendrier Macro
'
Dim aa, datedeb, i
        Do
        aa = InputBox("Saisir la date de l'OD au format jj/mm/aaaa", _
        "Date OD", Format("dd/mm/yyyy"))
        If IsDate(aa) Then Exit Do
        MsgBox "Date obligatoire"
        Loop
        Sheets("Récap").Range("E1").Value = CDate(aa)
Dim annee&, sem1&, sem2&, sem3&, sem4&, sem5&
    annee = Year(Range("E1"))
    sem1 = DatePart("ww", Range("E1"))
    sem2 = DatePart("ww", Range("E1") + 7)
    sem3 = DatePart("ww", Range("E1") + 14)
    sem4 = DatePart("ww", Range("E1") + 21)
    sem5 = DatePart("ww", Range("E1") + 28)
    Range("B11").Value = sem1
    Range("B19").Value = sem2
    Range("B27").Value = sem3
    Range("B35").Value = sem4
    Range("B43").Value = sem5
    datedeb = CDate(Range("E1") - Weekday(Range("E1"), 2) + 1)
 For Each c In Range("B4:B43")
  If c = "" Then
    c.Value = Day(datedeb + i)
    i = i + 1
  End If
Next
'
End Sub
La variable datedeb récupère la date de début dans la cellule E1. La variable i sert à incrémenter cette date de début dans la boucle. La boucle balaie les cellules A4:A43 et, si la cellule est vide, y inscrit le jour de datedeb + i.

Pour écrire la date au bon format, il faut la convertir avec CDate.

A +

Cordialement.
 

jim7963

XLDnaute Junior
Re : Problème format date et jours à insérer

Bon ben voilà je savais bien que j'y arriverais pas seul :(
Suite à l'aide de Papou j'ai remanié ma macro comme suit:

Code:
Dim aa
        Do
        aa = InputBox("Saisir la date du mois jj/mm/aaaa", _
        "Date mois", Format("dd/mm/yyyy"))
        If IsDate(aa) Then Exit Do
        MsgBox "Date obligatoire"
        Loop
        If IsDate(aa) Then Sheets("Récap").Range("E1").Value = CDate(aa)
        Sheets("Récap").Range("B3") = Year(CDate(aa))
Dim anneeprec&
        anneeprec = DateAdd("yyyy", -1, CDate(aa))
        Sheets("Récap").Range("D3").Value = anneeprec
                
    Range("B11").Value = DatePart("ww", Range("E1"))
    Range("B19").Value = DatePart("ww", Range("E1") + 7)
    Range("B27").Value = DatePart("ww", Range("E1") + 14)
    Range("B35").Value = DatePart("ww", Range("E1") + 21)
    Range("B43").Value = DatePart("ww", Range("E1") + 28)
     
 datedeb = CDate(Range("E1") - Weekday(Range("E1"), 2) + 1)
 For Each c In Range("B4:B43")
  If c = "" Then
    c.Value = Day(datedeb + i)
    i = i + 1
  End If
Next

    Range("D11").Value = DatePart("ww", anneeprec)
    Range("D19").Value = DatePart("ww", anneeprec + 7)
    Range("D27").Value = DatePart("ww", anneeprec + 14)
    Range("D35").Value = DatePart("ww", anneeprec + 21)
    Range("D43").Value = DatePart("ww", anneeprec + 28)
    
    datedebprec = CDate(Range("D3") - Weekday(Range("D3"), 2) + 1)
 For Each c In Range("D4:D43")
  If c = "" Then
    c.Value = Day(datedebprec + i)
    i = i + 1
  End If
Next

Je souhaite ainsi mettre les jours correspondant à l'année n-1 en colonne D. Les numéros des semaines s'incrémentent bien par contre les numéros des jours ne correspondent pas et je n'arrive pas à trouver pourquoi.

J'aurais donc besoin de votre aide pour me dire d'où peut provenir le problème car là je sèche, j'ai tenté plusieurs choses mais rien ne fonctionne.
 

Pièces jointes

  • Test date.xlsm
    174.6 KB · Affichages: 73
  • Test date.xlsm
    174.6 KB · Affichages: 73
  • Test date.xlsm
    174.6 KB · Affichages: 86
Dernière édition:

jim7963

XLDnaute Junior
Re : Problème format date et jours à insérer

Personne pour m'aider avec mon problème de décalage sur l'année N-1?

Je pense que mon problème vient de la ligne de commande suivante:

Code:
datedebprec = CDate(Range("D3") - Weekday(Range("D3"), 2) + 1)

mais je n'arrive pas à la mettre en forme pour faire en sorte d'obtenir la semaine correspondante sur l'année n-1, d'après les résultats que j'obtiens cela correspondrait plutôt à la semaine d'après (semaine 6 alors que je veux le détail de la semaine 5).
 

Pièces jointes

  • Test date.xlsm
    179.5 KB · Affichages: 73
  • Test date.xlsm
    179.5 KB · Affichages: 69
  • Test date.xlsm
    179.5 KB · Affichages: 67
Dernière édition:

jim7963

XLDnaute Junior
Re : Problème format date et jours à insérer

Après avoir encore trituré ma macro je me suis rendu compte qu'en fait il me prenait la semaine 10 et non la semaine 5.

J'ai modifié ma ligne de code comme suit:

Code:
 datedebprec = CDate(anneeprec - Weekday(anneeprec, 2) - 34)

Ainsi cela fonctionne mais je pense pas que cela soit la meilleure solution.
Si vous avez une meilleure solution ou une explication du pourquoi du comment j'apprécierai beaucoup, cela m'aiderait à progresser un peu.
 

Papou-net

XLDnaute Barbatruc
Re : Problème format date et jours à insérer

Bonsoir jim7963,

J'ai relevé 2 erreurs dans ton code.

Pour la première, il faut réinitialiser la variable i à 0 avant la boucle de l'année précédente. J'en ai profité pour l'initialiser également avant la 1ère boucle, ce qui est plus sûr.

Pour la deuxième, il faut utiliser également la variable anneeprec dans la fonction Weekday au lieu de la cellule D3 qui ne contient pas une date mais un nombre correspondant à l'année.

Voici donc le code modifié :

Code:
Sub Calendrier()
'
' Macro Caldrier
'
'
Dim aa
        Do
        aa = InputBox("Saisir la date du mois jj/mm/aaaa", _
        "Date mois", Format("dd/mm/yyyy"))
        If IsDate(aa) Then Exit Do
        MsgBox "Date obligatoire"
        Loop
        If IsDate(aa) Then Sheets("Récap").Range("E1").Value = CDate(aa)
        Sheets("Récap").Range("B3").NumberFormat = "yyyy"
        Sheets("Récap").Range("B3") = CDate(aa)
        
Dim anneeprec&
        anneeprec = DateAdd("yyyy", -1, CDate(aa))
        Sheets("Récap").Range("D3").NumberFormat = "yyyy"
        Sheets("Récap").Range("D3").Value = anneeprec
        
    Range("B11").Value = DatePart("ww", Range("E1"))
    Range("B19").Value = DatePart("ww", Range("E1") + 7)
    Range("B27").Value = DatePart("ww", Range("E1") + 14)
    Range("B35").Value = DatePart("ww", Range("E1") + 21)
    Range("B43").Value = DatePart("ww", Range("E1") + 28)
     
 datedeb = CDate(Range("E1") - Weekday(Range("E1"), 2) + 1)
 i = 0
 For Each c In Range("B4:B43")
  If c = "" Then
    c.Value = Day(datedeb + i)
    i = i + 1
  End If
Next

    Range("D11").Value = DatePart("ww", anneeprec)
    Range("D19").Value = DatePart("ww", anneeprec + 7)
    Range("D27").Value = DatePart("ww", anneeprec + 14)
    Range("D35").Value = DatePart("ww", anneeprec + 21)
    Range("D43").Value = DatePart("ww", anneeprec + 28)
    
    datedebprec = CDate(anneeprec - Weekday(anneeprec, 2) + 1)
 i = 0
 For Each c In Range("D4:D43")
  If c = "" Then
    c.Value = Day(datedebprec + i)
    i = i + 1
  End If
Next
End Sub
J'ai testé, ça fonctionne correctement.

Cordialement.
 

Discussions similaires

Réponses
5
Affichages
374
Réponses
5
Affichages
435