TbJoursFériés ne se remplit pas

Bonjour à toutes et à tous,

Je n'arrive pas à remplir le tbJoursFériés. Merci de m'aider à trouver les bonnes instructions qui permettront que tbJoursFériés ne reste pas vide si la date correspond à un jour férié.

D'avance merci pour votre réponse.

Bonnes journée et continuation à toutes et à tous. Prenez bien soin de vous.

11comptabilite.xlsm (249.49 Ko)

Bonsoir,

Mettez un point d'arrêt comme sur l'image ci-dessous, puis lancez la création menu,

image

après l'arrêt de la macro, cliquez sur DateMenu, qu'observez-vous?

Normalement "Datemenu", devrait contenir la date du jour sélectionné, non! Donc à quel moment on récupère cette valeur?

Point d'arrêt sur On Error GoTo 0

Clic sur création menus, choix de la date du menu dans le calendrier (14 juillet 2025), le programme revient dans la feuille code et sur la ligne du point d'arrêt. Cliquez sur Date menu : aucune date. Récupération : dans d'autres fichiers, il est fait appel à Récupération menus dans laquelle il n'y a rien concernant DateMenu (fichier MENUS 2025); dans le fichierBeGood, récupération menus (il y a une ligne pour DateMenu mais en commentaires) puis PrédéfinitionsSpécifiques dans laquelle il y a Maïs et radis pour menu midi retraite mais rien de spécial pour date menu. Donc, en résumé, rien pour récupérer tbDateMenus excepté dans Validation. Je crois avoir trouvé : dans la procédure cbNatureMenu_Change, il devrait y avoir un appel à tbDateMenu_Change si tbDateMenu est différent de vide. C'est peut-être cela que vous, vous appelez Récupération ?

Bonjour,

"DateMenu" n'existe pas en début de procédure, il faut soit le récupérer à partir d'une autre macro s'il existe, soit le créer dans la macro "tbDateMenu_Change".

Le plus simple pour vous est la 2ème solution, d'une part, parce que tout sera dans la même macro et d'autre part, cela permettra de vous familiariser avec la façon de procéder.

Analyse: Précédemment, dans cette macro, on a récupérer le mois (en lettre) et l'année avec:

    'Mois menu.
    TabDate = Split(tbDateMenu, " ") 'on relève tous les termes de la date qui sont séparés par un espace en le numérotant de 0 à 3
    '0 = jour en lettre, 1= jour en nombre, 2 = mois en lettre, 3 = année en nombre
    tbMoisMenu = TabDate(2) & " " & TabDate(3) ' on prend les 2ème et 3ème termes que l'on colle dans tbMoisMenu

il suffit d'appliquer le même principe pour en sortir une date complète (au format date) et de coller tout ça juste avant la ligne:

    J = WorksheetFunction.Match(CLng(DateMenu), Range("TabJoursfériés[Date jour férié]"), 0)

le code en entier:

Private Sub tbDateMenu_Change()
    Dim TabDate() As String, J As Long, JourSemaine As Long, DateMenu As Date

    'Si vérification  date menu NOK, on ne fait rien et on quitte la procédure.
    If VérifDateMenu = False Then Exit Sub

    'Vérification jour férié.
    On Error Resume Next

    '*****************************************************************************************
    'Extraction de la date au format "Date"
    TabDate = Split(tbDateMenu, " ") 'on relève tous les termes de la date qui sont séparés par un espace en le numérotant de 0 à 3
    '0 = jour en lettre, 1= jour en nombre, 2 = mois en lettre, 3 = année en nombre
    DateMenu = Format(TabDate(1) & "/" & TabDate(2) & "/" & TabDate(3), "m/d/yyyy") ' on prend les 1er, 2ème et 3ème termes que l'on colle dans tbMoisMenu

    'Mois menu.
    tbMoisMenu = TabDate(2) & " " & TabDate(3) ' on prend les 2ème et 3ème termes que l'on colle dans tbMoisMenu
    '*******************************************************************************************

    J = WorksheetFunction.Match(CLng(DateMenu), Range("TabJoursfériés[Date jour férié]"), 0)
    On Error GoTo 0
    If J <> 0 Then
        tbJoursFériés.Value = Range("TabJoursFériés[Nom jour férié]").Item(J)
    Else
        tbJoursFériés.Value = ""
    End If

    'Effacement préalable.
    'Call EffacementContrôles

    'Initialisations des listes codes articles selon code Légumes, Viandes, Deserts et date menu.
    'Appel de la procédure PrédéfinitionsSpécifiques
    Call PrédéfinitionsSpécifiques
End Sub

la partie modifiée est entre 2 lignes d'astérisques,

Cdlt

Bonjour Arturo,

Ce que vous me proposez là existe déjà et était utilisé pour remplir le tbMoisMenu. Le présent fil est basé sur le fait que le tbJoursFériés ne se remplit pas quand la date du menu correspond à un jour férié.

Test effectué qui se solde par une erreur sur cette ligne, sur la partie TabDate(3) : l'indice n'appartient pas à la sélection.

DateMenu = Format(TabDate(1) & "/" & TabDate(2) & "/" & TabDate(3), "m/d/yyyy") ' on prend les 1er, 2ème et 3ème termes que l'on colle dans tbMoisMenu

Jour férié : problème résolu (cela venait de l'appel à Calendrier : procédure tbDateMen__MouseDown). MoisMenu : ne fonctionne plus.

8comptabilite.xlsm (226.15 Ko)

Je ne sais pas ce que vous avez fait, mais j'ai donné une procédure qui marche, alors je vous renvoie le fichier sur lequel j'ai travaillé(c'est à dire celui posté hier à 10h20)

9comptabilite.xlsm (202.89 Ko)

Bonjour Arturo83,

Désolé, sur ce fil, hier, à l'heure indiquée (10 h20), il n'y a que mon message qui vous était destiné. À moins qu'il ne se trouve sur un autre fil.Le fichier que vous venez de me renvoyer donne bien les résultats souhaités. Vous avez apporté des modifications dans quelles procédures ?

Dans mon message d'aujourd'hui à 4:55, il y a la macro complète

Private Sub tbDateMenu_Change()

Pour Mois menu, j'ai vu. Pour Jours fériés, qui ne fonctionnait pas, maintenant il fonctionne : qu'avez-vous fait et où ?

Là, je sors faire mes courses. Je reviens ici vers , 17 heures 30 au plus tôt, 18 heures au plus tard.

Visiblement vous n'avez pas lu mon dernier post,

Dans mon message d'aujourd'hui à 4:55, il y a la macro complète
la partie modifiée est entre 2 lignes d'astérisques,

Entre les deux astérisques, il n'y a rien concernant Jours fériés, désolé, uniquement mois menu.

Ah bon, et ça:

image

cela concerne mois menu, mais pas jours fériés (Jour de l'an, Pâques, Lundi de Pentecôte, etc.). Reprenez votre fichier, créez un menu (14 juillet 2025 par exemple), en bas du formulaire, vers la droite, il y a un tbJours fériés et vous allez voir s'inscrire Fête nationale. Il se situe juste avant moismenu.

Bonjour,

Désolé, on ne doit pas se comprendre ou on ne parle pas de la même chose, j'ai sélectionné le 14 juillet et j'ai bien le jour férié qui s'inscrit, c'est bien ce que vous vouliez, non! J'ai recommencé l'opération avec le 20 avril et c'est Pâques qui s'affiche etc... Alors où est le problème?

image

Bonjour Arturo83,

Parfait. Vous en avez fait en sorte que MoisMenu soit réactif. Ma question était celle-ci : avez-vous fait quelque chose et où pour que tbJourFériés fonctionne et se remplisse si la date menu correspond à un jour férié ?

avez-vous fait quelque chose et où pour que tbJourFériés fonctionne et se remplisse si la date menu correspond à un jour férié ?

je vais tenter de réexpliquer autrement.

Dans la macro d'origine, à la ligne "J = WorksheetFunction.Match(CLng(DateMenu), Range("TabJoursfériés[Date jour férié]"), 0) on cherche "DateMenu" dans "TabJoursfériés" or, "DateMenu" n'existe pas, il faut donc affecter une date à cette variable, la date dans "tbDateMenu" n'est pas exploitable telle quelle est (car c'est du texte), por cela, il faut la retravailler afin qu'elle le devienne, c'est le rôle de cette ligne:

TabDate = Split(tbDateMenu, " ") qui récupère séparément tous les termes qui constituent cette pseudo date pour en créer une vraie date avec la ligne:

DateMenu = Format(TabDate(1) & "/" & TabDate(2) & "/" & TabDate(3), "m/d/yyyy") ' on prend les 1er, 2ème et 3ème termes que l'on colle dans tbMoisMenu

Maintenant que cette date est créée, on peut faire une recherche dans "TabJoursfériés" avec la ligne:

"J = WorksheetFunction.Match(CLng(DateMenu), Range("TabJoursfériés[Date jour férié]"), 0) et si le jour recherché est un jour férié, alors on l'affiche dans "tbJoursFériés". Est-ce plus clair?

Si cela vous convient, pensez à passer le sujet en "RESOLU"

Cdlt

Bonjour Arturo83,

Oui, maintenant c'est plus clair. Donc du moment que tbDateMenu a été transformé pour être exécutable, automatiquement, tbJourFérié va devenir exécutable.

Je vais clore ce fil. Les problèmes suivants concerneront, à vous de me dire dans quel ordre il devront être traité, je créerai les fils en conséquence : 1) Existence d'un menu non signalée; 2) Maïs et Radis en menu midi retraite , chacun, doit être identique deux jours ouvrés de suite; 3) Menu midi retraite : si c'est un samedi ou un dimanche, interdiction de le créer; 4) Viande menu midi weekend : si le jour menu n'est pas un samedi ou un dimanche, interdiction de le créer.

Le 3 et le 4 me semble faisable assez rapidement

Je crée un menu midi retraite mails il ne s'enregistre pas dans la feuille BD menus, tableau structuré TabBDMenus ou très mal. Ainsi la dernière colonne (code nature menu allégée) ne s'enregistre pas.

8comptabilite.xlsm (240.16 Ko)

Bonjour,

Attention de ne pas confondre "I" (la lettre i) avec le chiffre 1

, c'est ce que vous avez fait dans la macro "cmdValidationCréationMenu_Click" à la ligne:

.ListColumns("Code nature menu allégée").DataBodyRange(1) = tbCodeNatureMenuAllégée.Value

remplacez le 1 entre parenthèse par la lettre "I" en majuscule.

Rechercher des sujets similaires à "tbjoursferies remplit pas"