IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Trouver toutes les dates des semaines de l'année [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut Trouver toutes les dates des semaines de l'année
    Bonjour à tous,

    J'aimerais déterminer les dates du début et fin des semaines de l'année en cours.

    Les semaines commencent par Mercredi er finissent par Mardi.

    Voila un code pour déterminer une semaine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    '-----------------------------------
        date_debut = Date - Application.Choose(Application.Weekday(Date, 1), 4, 5, 6, 0, 1, 2, 3)
        date_fin = date_debut + 6
        MsgBox "DateBegin :" & date_debut & ", DateEnd : " & date_fin
    '-----------------------------------
    Comment le généraliser pour avoir toutes les semaines de l’année ?

    Merci.

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,
    Et bien tu par de ta première semaine et tu ajoute 7 a tes deux dates pour passer a la semaine suivante .. et ainsi de suite pour tes 52 semaines

  3. #3
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir bbil, fring,

    En voulant réécrire le code, ça ne m'affiche pas de dates


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub test()
        Dim x As Date, Result As String
        Dim LastLg As Long, n As Byte
        n = 1
        [E2].CurrentRegion.ClearContents
        [E1] = "N° Semaine": [F1] = "Du": [G1] = "Au"
        For x = "1/1/" & Year(Now) To "31/12/" & Year(Now)
            If Format(x, "dddd") = "mercredi" Then
                LastLg = [E65000].End(xlUp).Row + 1
                Range("E" & LastLg) = n
                Range("F" & LastLg) = Format(x, "dd.mm.yyyy")
                Range("G" & LastLg) = Format(x + 6, "dd.mm.yyyy")
                n = n + 1
            End If
        Next
    End Sub
    Merci d'avance.

    EDIT :

    J'ai corrigé le problème qui ne permet pas à d'effacer convenablement la plage.

    Maintenant ca marche.

    Merci encore.

  4. #4
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir,

    En voulant changer le format des dates obtenues par le code, j'ai un chamboulement dans le résultat (Tantôt un format anglais tantôt un format français ), en plus les dates viennent parfois à gauche de la cellule, parfois à droite :


    N° Semaine Du Au
    1 01/04/2012 01/10/2012
    2 01/11/2012 17/01/2012
    3 18/01/2012 24/01/2012
    4 25/01/2012 31/01/2012
    5 02/01/2012 02/07/2012
    6 02/08/2012 14/02/2012
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Sub SemaineAnnee()
        Dim x As Date, Result As String
        Dim LastLg As Long, n As Byte
        Application.ScreenUpdating = False
        Application.EnableEvents = False
     
        n = 1
        [I7].CurrentRegion.ClearContents
        [I7] = "N° Semaine": [J7] = "Du": [K7] = "Au"
        For x = "1/1/" & Year(Now) To "31/12/" & Year(Now)
            If Format(x, "dddd") = "mercredi" Then
                LastLg = [I65000].End(xlUp).Row + 1
                Range("I" & LastLg) = n
               ' Range("J" & LastLg) = Format(x, "dd.mm.yyyy")
               ' Range("K" & LastLg) = Format(x + 6, "dd.mm.yyyy")
                Range("J" & LastLg) = Format(x, "dd/mm/yyyy")
                Range("K" & LastLg) = Format(x + 6, "dd/mm/yyyy")
                n = n + 1
            End If
        Next
        Application.EnableEvents = True
        Application.ScreenUpdating = True
    End Sub

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonsoir,

    Format ne renvoi pas une date mais une chaine de caractère représentant une date .. n'utilise pas format pour affecter tes cellules .. mais modifie le format d'affichage de ta cellule.

  6. #6
    apt
    apt est déconnecté
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    867
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 867
    Par défaut
    Bonsoir,

    Comment le fait-on depuis VBA ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Range("F" & LastLg) = x 
    Range("F" & LastLg).NumberFormat = "dd/mm/yyyy"
    Le problème du format de la date dans la feuille est ainsi réglé.

  7. #7
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Une autre solution éventuelle, on peut tout simplement boucler d'une date à une autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim x As Date, Result As String
     
    Result = "Résultats :"
     
    For x = "1/1/" & Year(Now) To "31/12/" & Year(Now)
        If Format(x, "dddd") = "mercredi" Then
            Result = Result & Chr(10) & "DateBegin : " & Format(x, "dddd dd.mm.yyyy") & " --> DateEnd : " & Format(x + 6, "dddd dd.mm.yyyy")
        End If
    Next
     
    Debug.Print Result
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/08/2014, 12h44
  2. Récupérer toutes les dates des mardis de 2014
    Par Tonii dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/11/2013, 18h57
  3. [XL-2007] trouver les date des dimanche d'un mois donné
    Par Smilossss dans le forum Excel
    Réponses: 10
    Dernier message: 30/04/2013, 17h40
  4. [RegEx] Trouver toutes les dates dans un texte
    Par Shandler dans le forum Langage
    Réponses: 7
    Dernier message: 16/04/2008, 09h56
  5. [VB6]sortir toutes les dates entre deux dates
    Par AlfiQue dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/02/2006, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo