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 :

Numéro de semaine en prenant compte l'année


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 46
    Par défaut Numéro de semaine en prenant compte l'année
    Bonjour à tous,

    J'ai un calendrier où l'on trouve sur une ligne la date du lundi de chaque semaine de l'année et sur la ligne supérieure, le numéro de semaine correspondant à la date. (voir exemple ci dessous)

    N° de semaine 1 2 3 4 ...
    Date 04/01/2016 11/01/2016 18/01/2016 25/01/2016 ...

    Ce tableau est sur 2 ans, j'ai donc à chaque fois 2 fois le même numéro de semaine.
    Ce que je n'arrive pas à faire, c'est rentrer un date et que l'année soit prise en compte. C'est-à-dire que si je rentre la date du 15/01/16, qu'il me sélectionne que la semaine 2 de l'année 2016. Actuellement, il me sélectionne la semaine 2 de 2016 puis 2017.
    Je vous mets mon code aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sem = DatePart("ww", TextBox3.Value, vbMonday, vbFirstFourDays)
     
     
     
        For j = 5 To 109
            If sem = DatePart("ww", .Cells(2, j), vbMonday, vbFirstFourDays) Then
                .Cells(1, j).Select
            Else
                n = n + 1
            End If
        Next j
    Si quelqu'un a une idée je suis preneur
    A bientôt et merci !

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Bonjour,

    Dans ta boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        For j = 5 To 109
            If sem = DatePart("ww", .Cells(2, j), vbMonday, vbFirstFourDays) Then
                .Cells(1, j).Select
            Else
                n = n + 1
            End If
        Next j
    Tu parcours toutes les cellules, donc il va te sélectionner jusqu'à la fin de la ta boucle For.
    Tu as plusieurs solutions à ta disposition :


    - Soit tu fais un Exit for :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For j = 5 To 109
            If sem = DatePart("ww", .Cells(2, j), vbMonday, vbFirstFourDays) Then
                .Cells(1, j).Select
                Exit For
            Else
                n = n + 1
            End If
        Next j
    Qui te permet de sortir de ta boucle For dès qu'il trouve la valeur souhaitée.

    - Soit tu fais une boucle While, avec un booléan qui change dès la valeur trouvée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    j = 5
    Bool = False
    While Bool = False and j = 109
            If sem = DatePart("ww", .Cells(2, j), vbMonday, vbFirstFourDays) Then
                .Cells(1, j).Select
                Bool = True
            Else
                n = n + 1
            End If
    j = j+1    
    Loop
    le risque de celle-ci est de tomber sur une boucle info, ce qui n'est peut-être pas la meilleure des solutions

    - Ensuite, pourquoi ne pas regarder AUSSI l'année de tes cellules, et l'année renseignée ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    anne = year(TextBox3.Value)
    sem = DatePart("ww", TextBox3.Value, vbMonday, vbFirstFourDays)
     For j = 5 To 109
            If sem = DatePart("ww", .Cells(2, j), vbMonday, vbFirstFourDays) and .Cells(2, j) = anne Then
                .Cells(1, j).Select
            Else
                n = n + 1
            End If
        Next j
    Cette dernière est, je pense, la mieux adaptée à ton besoin. A toi de voir et adapter
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2015
    Messages : 46
    Par défaut
    Citation Envoyé par illight Voir le message
    - Ensuite, pourquoi ne pas regarder AUSSI l'année de tes cellules, et l'année renseignée ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    anne = year(TextBox3.Value)
    sem = DatePart("ww", TextBox3.Value, vbMonday, vbFirstFourDays)
     For j = 5 To 109
            If sem = DatePart("ww", .Cells(2, j), vbMonday, vbFirstFourDays) and .Cells(2, j) = anne Then
                .Cells(1, j).Select
            Else
                n = n + 1
            End If
        Next j
    Cette dernière est, je pense, la mieux adaptée à ton besoin. A toi de voir et adapter
    J'ai modifié un petit détaille ligne n°5 (le "year" devant .cells(2,j) et c'est exactement ce que je cherchais à faire.
    Voici le code final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        anne = Year(TextBox3.Value)
        sem = DatePart("ww", TextBox3.Value, vbMonday, vbFirstFourDays)
        For j = 5 To 109
              If sem = DatePart("ww", .Cells(2, j), vbMonday, vbFirstFourDays) And Year(.Cells(2, j)) = anne Then
                  .Cells(1, j).Select
              Else
                  n = n + 1
              End If
          Next j
    Merci pour ta rapidité et toutes ces propositions

    A bientôt.
    Karl

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

Discussions similaires

  1. Trouver un mois à partir d'un numéro de semaine et de l'année
    Par patbeautifulday dans le forum Contribuez
    Réponses: 2
    Dernier message: 27/05/2015, 11h59
  2. Récupérer la date à partir d'un numéro de semaine et de l'année
    Par aurelientp dans le forum Général Java
    Réponses: 4
    Dernier message: 11/01/2010, 14h43
  3. Réponses: 1
    Dernier message: 26/10/2009, 16h51
  4. [AC-2007] Numerotation prenant en compte l'année
    Par Imitator92 dans le forum IHM
    Réponses: 16
    Dernier message: 27/08/2009, 13h44
  5. [Calendar] Problème de numéro de semaine de l'année
    Par gaia_dev dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 29/11/2004, 12h44

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