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 :

[VBA-E]Boucle sur semaine fin-debut d'année


Sujet :

Macros et VBA Excel

  1. #1
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut [VBA-E]Boucle sur semaine fin-debut d'année
    Bonjourrrrrrrrrrrr ,

    Tout d'abord, BONNE ANNEEEEEEEEE !


    Me revoila après 3 semaines d'hospitalisation, et je reprend le boulot et me vla devant un chti problème

    J'ai un problème assez bizarre en fait, je voudrais créer une boucle sur des semaines, ça c'est pas un soucis, mon soucis provient du fait que les semaines se chevauchent sur l'année précedente, donc ça passe de la semaine 51-52 à la semaine 01, et la réside mon problème

    J'ai écrit ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NbSemaine = Format(DateValue("31/12/" & Year(Now) - 1), "ww", vbMonday, vbFirstFourDays)
    SemaineFin = Year(Now) & "-" & DatePart("ww", Now, vbMonday, vbFirstFourDays) - 1
    If DatePart("ww", Now, vbMonday, vbFirstFourDays) - 1 < 12 Then
        SemaineDebut = Year(Now) - 1 & "-" & NbSemaine - (12 - DatePart("ww", Now, vbMonday, vbFirstFourDays) - 1)
    Donc "Nbsemaine" me permet d'avoir le nombre de semaines de l'année précedente
    "SemaineFin" me permettrait d'avoir la dernière semaine de ma boucle, donc ici en fait c'est la semaine dernière
    "SemaineDebut" est donc la semaine a partir de laquelle ma boucle doit commencer

    En fait, j'ai un graphique qui pointe sur ces données, et pour qu'il soit lisible et suivant les instructions que j'ai, je dois remonter a 12 semaines avant.

    Dans mes données brutes, mes données remontent a l'année 2004, donc pour mon format de semaine, j'ai été obligé de rajouter l'année c'est pour ça que j'ai un truc de la forme "aaaa-ww" (par exemple 2006-50)

    Le problème est que je voudrais faire une boucle, si jamais ma "semainefin" est inférieure à 12 et donc que mes données devrait remonter a l'année précédente (si c'est pas le cas j'ai pas vraiment de soucis), de ma "semainedebut" a ma "semainefin" mais je sais pas comment faire pour insérer le fait que l'année va changer, ainsi que le weekend a la find e l'année précédente


    J'aurai bien voulu écrire une fonction, mais de la meme manière je ne sais pas comment l'écrire je cherche désespéremment sans trouver de solution potable

    Donc si vous avez des conseils, des idées du comment le faire, je suis preneur

    Merci beaucoup pour votre aide en espérant que vous ayez compris ce que je veux

    Et si jamais vous avez pas compris ma demande, faite le moi savoir ou, j'essaierai de vous réexpliquer au mieux

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu places dans un long la date de début
    exemple 2 janvier 2006= 38719
    ou clng(madate)
    si tu veux traiter 71 semaines cela te fera 71*7=497 jours

    cela donnera

    for mavar=38719 to (38719+(7*71)) step 7
    madate=cdate(mavar)

    de cette façon tes semaines vont se suivre

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Apparemment tu ne travailles pas avec des jours ouvrés... alors pourquoi ne pas utiliser des semaines de 7 jours et travailler sur des jours. Ensuite, tu recherches la semaine en fonction de la date d'aujourd'hui - le nombre de jours. Et si ça tombe sur l'an dernier, tu peux retrouver le N° de semaine
    Juste une idée
    A+

    Grillé par Random
    J'avais oublié que pour les pbs de dates on pouvait compter sur toi

  4. #4
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Citation Envoyé par random
    tu places dans un long la date de début
    exemple 2 janvier 2006= 38719
    ou clng(madate)
    si tu veux traiter 71 semaines cela te fera 71*7=497 jours

    cela donnera

    for mavar=38719 to (38719+(7*71)) step 7
    madate=cdate(mavar)

    de cette façon tes semaines vont se suivre
    C'est vrai que je n'avais pa spensé que le format date au départ est un nombre, du coup ma boucle pourrait marcher de cette manière

    Je vais essayer de cette manière, j'y avais pensé vaguement en passant par la date, mais j'avais omis que c'était un nombre

    Peut etre ensuite que le problème va provenir la ou je prend les données, je vais regarder ça merci en tout cas

    Je reviendrai ici si ça marche

  5. #5
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Apparemment tu ne travailles pas avec des jours ouvrés...
    Effectivement, je ne travaille qu'avec les semaines

    Heuu, jai un petit soucis : comment trouver un jour dont on a que le numero de la semaine ?
    Par exemple, pour ma semaine de début, j'ai "2006-41", comment savoir combien ça fait en "nombre" ? parce que j'ai pas de date de cette semaine

  6. #6
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Me revlaaaaaaaaaa Je vous ai manqué hein ?

    Bon, j'ai écrit ça :

    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
    Sub test()
    Dim dateDep As Date
    Dim DateFin As Date
    Dim d As Date
    Dim i As Long
    DateFin = Now - 7
    dateDep = DateFin - 7 * 13
    'MsgBox (dateDep)
    Dim TabSemAnnee(2 To 14, 1 To 2) As Long
    For d = dateDep To DateFin Step 7
        For i = 2 To 14
            TabSemAnnee(i, 1) = Year(d)
            TabSemAnnee(i, 2) = DatePart("ww", d, vbMonday, vbFirstFourDays)
        MsgBox (TabSemAnnee(i, 1) & "-" & TabSemAnnee(i, 2))
        Next i
    Next d
    End Sub
    Donc j'ai fait un step 7, pour avoir une semaine a chaque fois, mais ça marche pas il me prend quand meme jour par jour, pourquoi donc ? Vous avez une idée ?

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    J'ai fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For d = dateDep To DateFin Step 7
        MsgBox Format(d, "dd/mm/yyyy") & " - " & Year(d) & " - " & DatePart("ww", d, vbMonday, vbFirstFourDays)
    Next d
    et j'ai tout... Que veux-tu de plus ?
    A+

  8. #8
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Je veux mettre cela dans une variable tableau, car après je dois les réutiliser pour une fonction que j'ai faite

  9. #9
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Finalement j'ai fait ça :

    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
    Sub test()
    Dim dateDep As Date
    Dim DateFin As Date
    Dim i As Long
    DateFin = Now - 7
    dateDep = DateFin - 7 * 12
    'MsgBox (dateDep)
    Dim TabSemAnnee(2 To 14, 1 To 2) As String
    For i = 2 To 14
        TabSemAnnee(i, 1) = Year(dateDep)
        If DatePart("ww", dateDep, vbMonday, vbFirstFourDays) < 10 Then
            TabSemAnnee(i, 2) = "0" & DatePart("ww", dateDep, vbMonday, vbFirstFourDays)
        Else
            TabSemAnnee(i, 2) = DatePart("ww", dateDep, vbMonday, vbFirstFourDays)
        End If
        MsgBox (TabSemAnnee(i, 1) & "-" & TabSemAnnee(i, 2))
        dateDep = dateDep + 7
    Next i
    et la ça marche En fait j'ai pas besoin d'une deuxième boucle, ni de ma date de fin de cette manière, j'ai juste besoin de ma date de départ

    Merci pour votre aide en tout cas

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

Discussions similaires

  1. [VBA-E] boucle sur chaque feuille d un classeur
    Par johndeuf dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/12/2006, 12h39
  2. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 16h47
  3. [VBA E] boucle sur textbox d'une userform
    Par zoumzoum59 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 03/07/2006, 21h37
  4. Réponses: 8
    Dernier message: 15/06/2006, 21h56
  5. [VBA-E]Boucle Wend sans fin ??
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 26/05/2006, 17h14

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