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

VBA Discussion :

Recherche du premier lundi d'une année.


Sujet :

VBA

  1. #1
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut Recherche du premier lundi d'une année.
    Bonjour à la communauté.
    Voilà, je cherche, uniquement en VBA, à trouver la date du premier lundi de l'année. Ce qui me donnera le point de départ de toutes les semaines de l'année.
    J'aimerais, pas exemple, sortir le 3 pour l'année 2022 par exemple (car le premier lundi de cette année est le 3).
    Ma variable est Annee et je souhaiterais 3 comme résultat, je saurais que c'est le premier lundi.
    Bien à toi, la communauté.
    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Salut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function FirstMondayInYear(Value As Long) As Date
      FirstMondayInYear = DateSerial(Value, 1, 1) - Weekday(DateSerial(Value, 1, 1), vbMonday) + 1
      If Year(FirstMondayInYear) <> Value Then FirstMondayInYear = FirstMondayInYear + 7
    End Function

    Attention que cela ne te permettra pas de calculer le n° du semaine de l'année, la numéro 1 pouvant contenir des dates de l'année précédente
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Bonsoir Pierre et mille mercis pour ton aide.
    Mais je n'ai pas compris : "Attention que cela ne te permettra pas de calculer le n° du semaine de l'année, la numéro 1 pouvant contenir des dates de l'année précédente".
    Que veux tu dire par là ?
    En ajoutant des multiples de 7, je ne pourrais pas connaitre le début de toutes les semaines de l'année ?
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    La fonction renvoie le premier lundi de janvier, mais tu parlais d'établir la liste des semaines de l'année, et j'ai compris, peut-être à tort, que tu souhaitais utiliser les numéros de semaine.

    Donc, si c'est ok pour toi d'avoir le premier lundi de janvier, la fonction est ok. Tout dépend de ce que tu souhaites mettre en place
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Je pensais qu'en ajoutant des multiple de 7, je tomberais sur tous les lundi de l'année...
    Mais "Value" dans ton code, serait l'année ? Et en integer ?
    En tous cas, merci pour ton aide...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par DenisHen Voir le message
    Je pensais qu'en ajoutant des multiple de 7, je tomberais sur tous les lundi de l'année...
    Mais "Value" dans ton code, serait l'année ? Et en integer ?
    En tous cas, merci pour ton aide...
    Oui oui, si tu ajoutes des multiples de 7, tu trouveras les lundis de l'année. J'avais mal compris ton histoire de semaine, désolé
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    J'ai essayé essayé plusieurs tentatives.
    J'ai testé depuis un Sub : MsgBox PremierLundi("01/01/2022"), mais je ne sais pas trop quoi faire en fait avec ta fonction...
    Voici le tout, pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Sub PremierLundiAnnee()
        MsgBox PremierLundi("2022")
    End Sub
    Function PremierLundi(Value As Long) As Date
      PremierLundi = DateSerial(Jour, 1, 1) - Weekday(DateSerial(Value, 1, 1), vbMonday) + 1
      If Year(PremierLundi) <> Value Then PremierLundi = PremierLundi + 7
    End Function
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Ma fonction reçoit une année et retourne le premier lundi de cette année. Elle retourne donc une date.

    Voici deux exemples d'utilisation: à gauche pour trouver le premier lundi d'une série d'années, et à droite pour commencer la série des lundis de 2022

    Nom : 2022-01-19_064355.png
Affichages : 339
Taille : 79,1 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    On pourrait se poser la question de l'utilité d'une fonction pour remplacer deux lignes. Perso, je développe en essayant toujours d'atomiser mes fonctions, c'est-à-dire d'écrire des fonctions qui ne font qu'une chose, puis de les assembler. Cela permet deux choses:
    1. tester chaque petite fonction séparément du reste: elle doit donc recevoir tout ce dont elle a besoin en paramètres et ne peut pas utiliser de variables publiques;
    2. récupérer le code créé pour l'utiliser dans d'autres projets, ce qui permet de
      1. systématiser l'approche d'écriture du code
      2. d'utiliser des fonctions qui ont été testées
      3. gagner du temps.


    Idéalement, lorsque l'on sait que l'on réutilisera les fonctions dans d'autres projets, on les regroupe dans des modules "Tools" que l'on embarque dans chaque projet. On crée ainsi une couche d'abstraction, une sorte de "framework" sur lequel on appuie une approche systématique d'écriture. Ca fait gagner énormément de temps, tant pour la création du code que pour sa maintenance.

    Nom : 2022-01-19_082711.png
Affichages : 322
Taille : 299,6 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 926
    Points
    55 926
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par DenisHen Voir le message
    J'ai essayé essayé plusieurs tentatives.[...]
    Normalement, il faut passer l'année en Long (2022) et pas en String ("2022"). En utilisant "2022" en dur, ça ne pose pas de problème car VBA transtype automatiquement "2022" en 2022, mais si tu passais une variable String, ça poserait problème à cause du type de la valeur passée (String) à la place du type attendu (Long), vu que par défaut, les arguments sont passés ByRef.


    Dans ton code, tu utilises la variable Jour à la ligne 5: PremierLundi = DateSerial(Jour, 1, 1) - Weekday(DateSerial(Value, 1, 1), vbMonday) + 1. Or, cette variable n'est définie nulle part et elle vaudra donc 0... Bizarrement, DateSerial l'interprétera comme 2000, et donc, tu renverras toujours le 1er lundi de l'année 2000. Tu dois utiliser PremierLundi = DateSerial(Value, 1, 1) - Weekday(DateSerial(Value, 1, 1), vbMonday) + 1.


    Normalement, on devrait toujours déclarer et typer les variables => Mon billet de blog qui explique pourquoi
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre habitué Avatar de DenisHen
    Homme Profil pro
    Dessinateur / projeteur
    Inscrit en
    Novembre 2013
    Messages
    384
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Dessinateur / projeteur
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Novembre 2013
    Messages : 384
    Points : 198
    Points
    198
    Par défaut
    Bonjour Pierre.
    En relisant ton code, ce matin, j'avais trouvé "Jour" à la place de "Value"... J'ai corrigé et ça fonctionne super bien...
    Je te remercie pour ton code, qui contient des termes que je ne connaissais absolument pas ! ! !
    Désolé, je n'ai accès à ma boite mail que le soir...
    Encore un grand merci pour ton aide...
    Denis...
    Windows 7, 8 et 10 / Debian / RaspBian / AutoCAD 3D 2023

    Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
    Davantage d'avantages, avantagent davantage (Bobby Lapointe).
    La connaissance s'accroît quand on la partage (Socrate).
    Tant va la cruche à l'eau que l'habit n'amasse pas mousse. (Moi)
    Un clavier azerty en vaut deux (developpez.net).

Discussions similaires

  1. [AC-2013] Recherche entre deux dates d'une année scolaire précise
    Par morobaboumar dans le forum Requêtes et SQL.
    Réponses: 25
    Dernier message: 11/11/2019, 09h03
  2. Récupérer le premier lundi avant une date ?
    Par Zebulon777 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 13/01/2012, 14h06
  3. Réponses: 4
    Dernier message: 29/09/2008, 17h34
  4. recherche premier jour d'une semaine
    Par lazzeroni dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 08/06/2008, 17h03
  5. Executer une action premier lundi chaque mois
    Par Pierren dans le forum Access
    Réponses: 1
    Dernier message: 15/01/2007, 20h07

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