Transmettre infos d'un planning à une feuille du jour

Bonjour à tous,

Désolé par avance si la question a déjà été posée, je fais au mieux pour respecter la charte, merci à vous.

Je travaille dans un hôpital, au sein du service restauration de ce dernier, et faisant des tableaux et plannings par-ci par-là, je cherche à améliorer la chose et gagner du temps, en transmettant la bonne info d'un agent au bon endroit dans la feuille du jour.

Difficile d'expliquer la problématique dans le titre, mais la voici en détail :

Le service restauration est composé de 90 agents environ. il y a donc une dizaine de plannings. (self, production chaude, production froide, magasin, etc)

On va se concentrer sur le cas du planning du self.

J'ai donc d'un côté, le planning des agents du self, mois par mois, ici c'est Juillet.

De l'autre, comme il y a du monde, nous suivons cela avec des "feuille du jour" c'est une feuille qui récapitule tous les agents présents ce jour.

Actuellement, nous remplissons ces feuilles du jour en recopiant comme des ânes le planning, et c'est un travail qui prend vraiment un temps de zinzin pour une plus value minime, mais surtout qui peut être une grande source d'erreur.

Ce que je cherche à faire, c'est d'automatiser ce recopiage, mais le problème que je rencontre, c'est qu'il faut qu'Excel mette le bon agent au bon endroit en fonction du jour sélectionné.

Vous avez en PJ les documents.

Sur le planning du self, au mardi 1er Juillet, on peut voir un agent présent en 1, 3 agents présents en 2, un agent en 5, un en 6 et un en 7.

Donc sur ma feuille du jour j'ai recopié exactement qui est où.

J'aimerai réussir à faire en sorte que, pour le Mardi 1er Juillet, Excel sache que pour l'horaire 1, il me mette d'office Mme TRUC. L'horaire 2, il me mettent tous ceux qui sont en 2, et ainsi de suite.

Dans le cas du 1 par exemple, il faut qu'en sélectionnant la colonne de chiffres allant de B5 à B14, la cellule de la feuille du jour trouve le 1 (qui est en B8) et m'inscrive le nom qui s'y réfère, à savoir Mlle TRUC, qui elle est en A8, et m'inscrive son nom, vous comprenez ?

J'espère être le plus clair possible, et surtout j'espère réussir à me faire comprendre, car c'est pas évident.

Par avance un immense merci à vous pour votre temps, et désolé si un sujet similaire existe, je ne sais pas si j'ai les connaissances ou le vocabulaire pour un rechercher un truc de la sorte dans tous les sujets.

Bonjour,

Une proposition (via une macro VBA)

Sélectionner la feuille du mois pour lequel générer la feuille planning, puis faire alt-F8 et lancer la macro (la macro est conçue pour ce classeur, toute modification de sa structure nécessitera une adaptation de la macro).

WA-OU impressionnant merci merci vraiment ! C'est exactement ca que je cherchais à faire.

Maintenant comment je peux faire pour conserver la macro et l'applique à d'autres plannings ?

En fait j'ai d'un côté le doc excel de la Feuille du jour vierge à part. Et de l'autre l'ensemble des plannings (un doc excel pour le self comme ceci mais avec 4 autres agents de +, un autre doc pour la production chaude, un doc pour la froide, etc).

Sachant que l'objectif serait de le faire pour chaque mois par la suite, une fois le planning d'Août validé, hop on génère les feuilles du jour instantanément.

Ce serait parfait de partir du doc Feuille du jour, et que la macro aille chercher les infos dans tous les autres plannings pour se compléter, plutôt qu'ajouter un onglet à ce seul planning, qui ne sera pas pertinent car il ne tient pas compte des autres plannings.

Encore merci je suis impressionné, je lisais quelques autres topics pour voir un peu, tout content de faire quelques tableaux excel plutôt jolis et deux-trois formules basiques !

Bonsoir,

Comme indiqué, je n'ai pu faire que sur base de ce que tu as fourni comme fichier et comme explications. Répondre à tes questions sans voir à quoi ressemblent tes fichiers et tes données, c'est très compliqué.

Tu peux toujours essayer ceci : (sinon il faudra que tu mettes des infos plus précises sur ce que tu as (fichier exemple représentatif) et ce que tu veux obtenir comme résultat).

Tu prends le fichier (feuilledujour.xlsm) que j'ai mis sur le forum. Tu l'ouvres, tu ouvres également ton fichier qui contient tes feuilles planning (elles doivent avoir la même structure que celle qui se trouve dans le fichier exemple que tu as mis, titres au même endroit, info jour dans les mêmes colonnes, le mot HORAIRE à la fin de la liste des personnes, ...). Tu sélectionnes la feuille planning qui te convient et tu lances la macro via alt-F8.

9feuilledujour.xlsm (22.81 Ko)

Hello,

Une proposition PowerQuery, je rejoins h2so4 (que je salue) sur le fait qu'on n'a pas le format complet de tes fichiers donc sur base de ton fichier voici les seuls prérequis :

- Dans la cellule tout en haut il faut que tu tapes la date au format jj/mm/aaaa, ça mettra les deux lignes du dessous à jour

- Coller ensuite tout ton ton tableau du mois à partir de la ligne 5. (il faut aussi que tu mettes les tableaux horaires etc en dessous. Enfin bref garder le même format et le même nombre de ligne entre chaque tableau etc mais je rpésume qu'ils sont tous construits comme ça donc pas de souci.

Après tu as juste à aller sur la feuille2 et faire clic droit sur le tableau puis actualiser sur le tableau et filtrer selon ta date pour avoir tous les tableaux par jour.

@+

Bonjour,

Bien noté je vous répondrai de manière complète dès le début de semaine, de retour au boulot avec l''ensemble des documents. Je pensais naïvement que la macro était "facilement" duplicable pour les autres plannings.

En effet à la louche il y a d'un côté le doc feuille du jour, et de l'autre les 8-9 plannings concernés qui remplissent la feuille du jour.

En tout cas un immense merci pour vos retours vraiment, merci pour votre temps et votre patience, et à Lundi ou Mardi avec des infos plus complètes

Bonjour à vous mes sauveurs, j'espère que vous avez passé un bon week-end, et je me permets de vous remercier encore une fois pour le temps que vous m'accordez à faire le boulot à ma place à cause de mon incompétence, j'en suis encore désolé.

Donc @BAROUTE78, je n'ai pas encore bien compris précisément la manœuvre que tu souhaites me faire faire, mais je m'y pencherai plus précisément quand j'aurais le temps.

Cependant je te confirme que oui, l'ensemble des plannings démarrent en A5 avec le 1er agent, et vont jusqu'à AC5 ou AF5 selon les mois (de Février 28jours à Janvier 31jours).

Ils descendent également jusqu'à la ligne 19 ou 20 au maximum en fonction du nombre d'agents par planning, Donc de A5 à AF20. Cependant attention à certains plannings qui, avec moins d'agents, risquent d'avoir d'autres infos sur ces lignes 15 à 20, comme les horaires).

Voici donc les documents en entier et anonymisés :

La feuille du jour qu'on utilise en réalité :

Et l'ensemble des plannings dont j'ai besoin

Dans mes rêves les plus fous, la manip démarre à partir de la feuille du jour, et en une touche, comme l'a proposé @h2s04, tout vient s'incrémenter automatiquement pour le mois voulu en créant un nouvel onglet (un onglet par jour, sur le doc de la feuille du jour)

Puis en quelques clics refaire pareil pour adapter la macro au mois d'après, etc etc. mais je sens que cela risque d'être plus compliqué que "quelques clics" pour changer de mois.

Disons que j'aimerai réussir à me débrouille seul une fois tous les éléments en main pour éviter d'avoir à vous solliciter trop, mais j'ai l'impression que le travail que vous allez me proposez risque d'être trop avancé et de dépasser mes compétences, et qu'à la fin je me retrouve un outil trop complexe pour moi !

Encore merci à vous sincèrement.

Bonsoir,

un premier jet sur base des nouveaux fichiers que tu as mis. Il me semble qu'il y a des codes qui ne sont pas à leur place (en tout cas sur base des infos que j'ai trouvées dans le classeur feuille-du-jour-cuisine.xls) des codes différents pour le même horaire (8,SK,CR,CRE), des codes identiques pour des horaires différents(1 à 8,P,...), des codes non repris (DS,+), ...

Je n'ai pas pris le temps de gérer tous les cas d'erreur possibles, donc très probable que la macro plante s'il y a quelque chose qu'elle n'a pas prévu.

Waou, j'imagine travail de titan pour faire tout ca.

En effet je te confirme qu'il y a quelques petites coquilles de ce genre : Crèche est des fois mis en CR, des fois en CRE. Tout comme l'Hopital de jour (HDJ ou HJ).

J'ai par ailleurs refait la feuille du jour, tendant, je pense, vers un modèle définitif, si jamais : la voici.

Cependant je rencontre un souci que je n'avais pas avant :

image

De ce fait en l'état, impossible de lancer et tester la macro pour le moment. Tu as une solution pour contourner cela ? Sachant que dans le premier jet que tu m'as proposés l'autre fois, juste celui du self, la macro marchait très bien, et là je viens de retester à l'instant, et cela marche toujours

En fait pour être précis : la macro "feuilledujour.xlsm!Module1.planningjour" ne marche pas et me dit :

image

tandis que la "planningjour" marche.

Une solution que je peux mettre en place tout seul ? Ou je dois contacter mon service informatique ?

bonjour,

pour ce qui est du problème de sécurité, peut-être dois-tu mettre ce fichier dans un répertoire autorisé à contenir des fichiers excel avec macro.

si cela ne fonctionne toujours pas, je pourrais te faire essayer une autre solution.

à savoir te :

  • donner le fichier sans macro
  • donner le texte des macros sur le forum
  • donner les instructions pour charger ce code dans le fichier sans macro
  • donner les instructions pour adapter les boutons pour qu'ils lancent les bonnes macros.

en attendant ta réponse :

voici une nouvelle version adaptée, (sache que tes modifications de présentation représentent un boulot conséquent !).

Bonjour,

Désolé pour la modification de la feuille du jour. Cela dit je pense qu'elle ne devrait plus trop bouger.

Qu'est ce qui peut m'indiquer où se trouve un répertoire autorisant les macros sur mon PC ?

Sachant que l'autre jour, je cherchais une macro pour copier le contenu d'une cellule sans copier les bordures autour, et je tombe sur ce poste, tiens donc !

https://forum.excel-pratique.com/excel/proteger-les-bordures-des-cellules-d-une-feuille-34866

Et je teste alors la macro suivante proposée par Deraks : Selection.PasteSpecial Paste:=xlPasteAllExceptBorders

Or même souci, rien que cette petite macro toute bête ne marche pas, alors que pour rappel, ta macro "planningjour" de ton premier poste, marche toujours pour autant. Quelle différence finalement entre celle qui marche et celle qui ne marche pas ?

bonjour,

Qu'est ce qui peut m'indiquer où se trouve un répertoire autorisant les macros sur mon PC ?

aller dans fichier ->options,

puis centre de gestion de la confidentialité,

puis cliquer sur paramètres de la gestion de la confidentialité,

puis emplacements approuvés

Ca me semble léger je crois

image

re,

essaie ceci

télécharge et ouvre ce fichier

ensuite copie et insère le code VBA suivant :

ensuite fait un clic-droit sur le bouton générer planning pour un jour et associe-lui la macro feuilledujour

puis fait un clic-droit sur le bouton générer planning pour tous les jours du mois et associe-lui la macro feuillesdumois

puis sauvegarde le document au format xlsm (excel avec macros) au même endroit que le fichier qui contient la macro qui fonctionne

et enfin vérifie si cela fonctionne (comme tu veux). Comme je n'avais pas initialement compris qu'il fallait générer toutes les feuilles pour un mois, le code n'est pas optimisé (il ouvre et ferme tous les fichiers planning pour chaque jour)

Sub feuilledujour()
    Application.StatusBar = ""
    Application.ScreenUpdating = False
    Do Until ddjok(ddj)
        ddj = InputBox("date pour laquelle établir la feuille du jour (format jj/mm/aa)")
        If ddj = "" Then Exit Sub
        If ddjok(ddj) Then Exit Do
        MsgBox ddj & " Date incorrecte"
    Loop
    Application.StatusBar = "en cours"
    genfeuil ddj 'génère planning du jour
    MsgBox "génération du planning terminée"
    Application.StatusBar = ""
End Sub

Sub feuillesdumois()
    Application.StatusBar = ""
    Do Until moisok(ddj)
        ddj = InputBox("mois pour lequel établir les feuilles du jour (format mm/aa)")
        If ddj = "" Then Exit Sub
        If moisok(ddj) Then Exit Do
        MsgBox ddj & " mois incorrect"
    Loop
        ddjvt = Split(ddj, "/")
    ddj = DateSerial(ddjvt(1), ddjvt(0), 1)
    For i = ddj To Application.WorksheetFunction.EoMonth(ddj, 0)
      Application.StatusBar = "génération feuille pour le " & Format(i, "dd/mm/yyyy")
      Application.ScreenUpdating = False
      genfeuil i 'génére le planning pour le jour i
    Next i
    Application.StatusBar = ""
End Sub
Sub genfeuil(ddj)
' génération d'une feuille planning cuisine pour la date ddj
    ddjvt = Split(ddj, "/")
    ddj = DateSerial(ddjvt(2), ddjvt(1), ddjvt(0))
    annee = Format(ddj, "yyyy")
    listemois = Split(",Janvier,Février,Mars,Avril,Mai,Juin,Juillet,Août,Septembre,Octobre,Novembre,Décembre", ",")
    mois = listemois(ddjvt(1)) & " " & annee        'feuille dans le classeur
    Set twb = ThisWorkbook
    On Error Resume Next
    Application.DisplayAlerts = False
    twb.Sheets(Format(ddj, "dd.mm.yy")).Delete
    Application.DisplayAlerts = True
    On Error GoTo 0

    twb.Sheets("modèle").Copy after:=twb.Sheets(twb.Sheets.Count)
    Set wsp = ActiveSheet
    wsp.Name = Format(ddj, "dd.mm.yy")
    wsp.Range("D4") = Format(ddj, "dddd, d mmmm yyyy")
    chemin = twb.Sheets("instructions").Range("J4") & "\"

    ' fichier 1-planning-année-self.xls
    nf = Replace("1-planning-année-self.xls", "année", annee)
    Set wb = Workbooks.Open(chemin & nf)
    If wb Is Nothing Then MsgBox "fichier " & chemin & nf & " non trouvé": Exit Sub
    Set ws = wb.Sheets(mois)        'la feuille dans le classeur
    Set re = Nothing
    Set re = ws.Range("A1:A100").Find("HORAIRE", lookat:=xlPart, MatchCase:=False)
    If re Is Nothing Then MsgBox "la feuille " & ws.Name & " du fichier " & wb.Name & "        'a pas la bonne structure": Exit Sub
    dl = re.Row - 2
    col = ddjvt(0) + 1        ' colonne du jour sélectionné
    'HORAIRE 1 : Ouverture Self 7H20-14H40       HORAIRE 5 : Self 10H35-17H55                        HORAIRE 7 : Self 14H05-21H25                        HORAIRE P : 9H05-16H25                          RH : Repos Hebdomadaire                 FE : Jour Férié
    'HORAIRE 2 : Self 8H35-15H55                 HORAIRE 6 : Self 13H05-20H25                        HORAIRE 8 : Snack 8H35-15H55                        HORAIRE 3 : Prod Froide : 8H05-15H25                            CA : Congé Annuel                   FOR : Formation
    code2 = 29
    For i = 5 To dl
        If ws.Cells(i, 1) <> "" Then
            co = ws.Cells(i, col)
            Select Case co
                Case "RH", "CA", "FE", "FOR"
                Case 1
                    wsp.Range("g28") = ws.Cells(i, 1)
                Case 2
                    wsp.Cells(code2, "g") = ws.Cells(i, 1)
                    code2 = code2 + 1
                Case 5, 6, 7
                    wsp.Cells(co + 23, "i") = ws.Cells(i, 1)
                Case "P"
                    If wsp.Range("i33") = "" Then
                       wsp.Range("i33") = ws.Cells(i, 1)
                    Else
                       wsp.Range("i34") = ws.Cells(i, 1)
                    End If
            End Select
        End If
    Next i
    wb.Close False

    ' fichier seq2-planning-année-groupe-seq1.xls
    For seq1 = 1 To 3
        seq2 = seq1 + 1
        nf = Replace("seq2-planning-année-groupe-seq1.xls", "année", annee)
        nf = Replace(nf, "seq1", CStr(seq1))
        nf = Replace(nf, "seq2", CStr(seq2))
        Set wb = Workbooks.Open(chemin & nf)
        If wb Is Nothing Then MsgBox "fichier " & chemin & nf & " non trouvé": Exit Sub
        Set ws = wb.Sheets(mois)        'la feuille dans le classeur
        Set re = Nothing
        Set re = ws.Range("A1:A100").Find(" : ", lookat:=xlPart, MatchCase:=False)
        If re Is Nothing Then MsgBox "la feuille " & ws.Name & " du fichier " & wb.Name & "        'a pas la bonne structure": Exit Sub
        dl = re.Row - 2
        col = ddjvt(0) + 1        ' colonne du jour sélectionné
        '1 : Repas à domicile 6H35-13H55             PLM : Laverie Matin 7H05-14H25                      5 : Tranchage W.E. 6H35-13H55
        '2 : Repas à domicile 8H05-15H25             7 : Laverie Soir 13H05-20H25                        6 : Déconditionnement W.E. 7H05-14H25
        '3 : Production Froide 8H05-15H25                8 : Laverie  9H35-16H55                     CRE: crèche
        '4 : Production Froide 6H35-13H55                SK : Snack : 8H05-15H25

        code3 = 8
        code7 = 10
        For i = 5 To dl
            If ws.Cells(i, 1) <> "" Then
                co = ws.Cells(i, col)
                Select Case co
                    Case "RH", "CA", "FE", "FOR"
                    Case 0
                        wsp.Range("i8") = ws.Cells(i, 1)
                    Case 1
                        If wsp.Range("c8") = "" Then
                            wsp.Range("c8") = ws.Cells(i, 1)
                        Else
                            wsp.Range("c9") = ws.Cells(i, 1)
                        End If
                    Case 2
                        If wsp.Range("c10") = "" Then
                            wsp.Range("c10") = ws.Cells(i, 1)
                        Else
                            wsp.Range("c11") = ws.Cells(i, 1)
                        End If
                    Case 3
                        If code3 < 13 Then
                           wsp.Cells(code3, "g") = ws.Cells(i, 1)
                           code3 = code3 + 1
                        End If
                    Case 4
                        If wsp.Range("e8") = "" Then
                            wsp.Range("e8") = ws.Cells(i, 1)
                        Else
                            wsp.Range("e9") = ws.Cells(i, 1)
                        End If
                    Case "PLM"
                        wsp.Range("k8") = ws.Cells(i, 1)
                    Case 7
                        If code7 < 13 Then
                           wsp.Cells(code7, "K") = ws.Cells(i, 1)
                           code7 = code7 + 1
                        End If
                    Case 8
                        wsp.Range("k9") = ws.Cells(i, 1)
                    Case "SK"
                        wsp.Range("i11") = ws.Cells(i, 1)
                    Case "CRE"
                End Select
            End If
        Next i
        wb.Close False
    Next seq1

    ' fichier seq2-planning-année-prod-chaude-seq1.xls
    For seq1 = 1 To 2
        seq2 = seq1 + 4
        nf = Replace("seq2-planning-année-prod-chaude-seq1.xls", "année", annee)
        nf = Replace(nf, "seq1", CStr(seq1))
        nf = Replace(nf, "seq2", CStr(seq2))
        Set wb = Workbooks.Open(chemin & nf)
        If wb Is Nothing Then MsgBox "fichier " & chemin & nf & " non trouvé": Exit Sub
        Set ws = wb.Sheets(mois)        'la feuille dans le classeur
        Set re = Nothing
        Set re = ws.Range("A1:A100").Find(" : ", lookat:=xlPart, MatchCase:=False)
        If re Is Nothing Then MsgBox "la feuille " & ws.Name & " du fichier " & wb.Name & "        'a pas la bonne structure": Exit Sub
        dl = re.Row - 2
        col = ddjvt(0) + 1        ' colonne du jour sélectionné
        'PT1 : Pâtisserie : 06H05-13H25              PV1 : Production Viande : 6H05-13H25                D1 : Décondit. 1 : 06H05-13H25                      0 : Prod. Froide Sem. 13H05-20H25                       PF3:Prod froide 8h                  RH : Repos Hebdomadaire
        'PT2 : Pâtisserie : 09H05-16H25              PV2 : Production Viande : 7H05-14H25                D2 : Décondit. 2 : 07H5-14H25                       7 : Prod. Froide W.E. 11H05-18H25                                           CA : Congés Annuels
        'DT1 : Diététique : 06H05-13H25              L1 : Légumes : 6H05- 13H25                          D3 : Décondit. 3 : 11H05-18H25                      CF : Ch. Fr. Prod. Fin. : 07H05-14H25                                           FE : Jour Férié
        'DT2 : Diététique : 09H05-16H25              L2 : Légumes : 7H05-14H25                           B : Boucherie : 06H35-13H55                         OP : Operculage : 08H05-15H25                                           FOR : Formation
        '10 : Acheminement 5H35-12H55                A : Acheminement 6H35-13H55 CAP                         CE : Cellule :  8h05-13h25                      HJ : 7H05-14H25         CR : 6H35 - 13H55

        code2 = 11
        codeplus = 22
        For i = 5 To dl
            If ws.Cells(i, 1) <> "" Then
                co = ws.Cells(i, col)
                Select Case co
                    Case "RH", "CA", "FE", "FOR"
                    Case "PT1"
                        wsp.Range("g22") = ws.Cells(i, 1)
                    Case "PT2"
                        wsp.Range("g23") = ws.Cells(i, 1)
                    Case "DT1"
                        wsp.Range("i22") = ws.Cells(i, 1)
                    Case "DT2"
                        wsp.Range("i23") = ws.Cells(i, 1)
                    Case "PV1"
                        wsp.Range("e16") = ws.Cells(i, 1)
                    Case "PV2"
                        wsp.Range("e17") = ws.Cells(i, 1)
                    Case "PL1"
                        wsp.Range("e20") = ws.Cells(i, 1)
                    Case "PL2"
                        wsp.Range("e21") = ws.Cells(i, 1)
                    Case "D1"
                        wsp.Range("c16") = ws.Cells(i, 1)
                    Case "D2"
                        wsp.Range("c17") = ws.Cells(i, 1)
                    Case "D3"
                        wsp.Range("c18") = ws.Cells(i, 1)
                    Case "OP"
                        wsp.Range("c21") = ws.Cells(i, 1)
                    Case "A"
                        wsp.Range("i19") = ws.Cells(i, 1)
                    Case "B"
                        wsp.Range("c24") = ws.Cells(i, 1)
                    Case "CF"
                        wsp.Range("g16") = ws.Cells(i, 1)
                    Case "CE"
                        wsp.Range("g19") = ws.Cells(i, 1)
                    Case "UB"
                        wsp.Range("k19") = ws.Cells(i, 1)
                    Case "HJ", "HDJ"
                        wsp.Range("k16") = ws.Cells(i, 1)
                    Case 10
                        wsp.Range("i16") = ws.Cells(i, 1)
                    Case "+"
                        If codeplus < 25 Then
                           wsp.Cells(code7, "K") = ws.Cells(i, 1)
                           codeplus = codeplus + 1
                        End If
                End Select
            End If
        Next i
        wb.Close False
    Next seq1

    ' fichier 7-planning-année-magasin.xls
    nf = Replace("7-planning-année-magasin.xls", "année", annee)
    Set wb = Workbooks.Open(chemin & nf)
    If wb Is Nothing Then MsgBox "fichier " & chemin & nf & " non trouvé": Exit Sub
    Set ws = wb.Sheets(mois)        'la feuille dans le classeur
    Set re = Nothing
    Set re = ws.Range("A1:A100").Find("G1 :", lookat:=xlPart, MatchCase:=False)
    If re Is Nothing Then MsgBox "la feuille " & ws.Name & " du fichier " & wb.Name & "        'a pas la bonne structure": Exit Sub
    dl = re.Row - 2
    col = ddjvt(0) + 1        ' colonne du jour sélectionné
    'HORAIRE A : 08H05 - 15H25
    'HORAIRE B : 10H05 - 17H25
    code2 = 31
    For i = 5 To dl
        If ws.Cells(i, 1) <> "" Then
            co = ws.Cells(i, col)
            Select Case co
                Case "RH", "CA", "FE", "FOR"
                Case "G1"
                    wsp.Range("C28") = ws.Cells(i, 1)
                Case "G2"
                    wsp.Range("C29") = ws.Cells(i, 1)
                Case 1
                    wsp.Range("C30") = ws.Cells(i, 1)
                Case 2
                    If code2 < 35 Then
                       wsp.Cells(code2, "c") = ws.Cells(i, 1)
                       code2 = code2 + 1
                    End If
            End Select
        End If
    Next i
    wb.Close False

    ' fichier 8-planning-année-creche.xls
    nf = Replace("8-planning-année-creche.xls", "année", annee)
    Set wb = Workbooks.Open(chemin & nf)
    If wb Is Nothing Then MsgBox "fichier " & chemin & nf & " non trouvé": Exit Sub
    Set ws = wb.Sheets(mois)        'la feuille dans le classeur
    Set re = Nothing
    Set re = ws.Range("A1:A100").Find("HORAIRE", lookat:=xlPart, MatchCase:=False)
    If re Is Nothing Then MsgBox "la feuille " & ws.Name & " du fichier " & wb.Name & "        'a pas la bonne structure": Exit Sub
    dl = re.Row - 2
    col = ddjvt(0) + 1        ' colonne du jour sélectionné

    code2 = 28
    For i = 5 To dl
        If ws.Cells(i, 1) <> "" Then
            co = ws.Cells(i, col)
            Select Case co
                Case "RH", "CA", "FE", "FOR"
                Case "CR"
                    If code2 < 31 Then
                       wsp.Cells(code2, "e") = ws.Cells(i, 1)
                       code2 = code2 + 1
                    End If
            End Select
        End If
    Next i
    wb.Close False

    ' fichier 9-planning-année-greenbox.xls
    nf = Replace("9-planning-année-greenbox.xls", "année", annee)
    Set wb = Workbooks.Open(chemin & nf)
    If wb Is Nothing Then MsgBox "fichier " & chemin & nf & " non trouvé": Exit Sub
    Set ws = wb.Sheets(mois)        'la feuille dans le classeur
    Set re = Nothing
    Set re = ws.Range("A1:A100").Find("HORAIRE", lookat:=xlPart, MatchCase:=False)
    If re Is Nothing Then MsgBox "la feuille " & ws.Name & " du fichier " & wb.Name & "        'a pas la bonne structure": Exit Sub
    dl = re.Row - 2
    col = ddjvt(0) + 1        ' colonne du jour sélectionné
    'HORAIRE A : 08H05 - 15H25
    'HORAIRE B : 10H05 - 17H25
    code2 = 33
    For i = 5 To dl
        If ws.Cells(i, 1) <> "" Then
            co = ws.Cells(i, col)
            Select Case co
                Case "RH", "CA", "FE", "FOR"
                Case "A"
                    wsp.Range("e32") = ws.Cells(i, 1)
                Case "B"
                    If code2 < 35 Then
                       wsp.Cells(code2, "e") = ws.Cells(i, 1)
                       code2 = code2 + 1
                    End If
            End Select
        End If
    Next i
    wb.Close False

    ' fichier 10-planning-année-responsables-cuisine1.xls
    nf = Replace("10-planning-année-responsables-cuisine1.xls", "année", annee)
    Set wb = Workbooks.Open(chemin & nf)
    If wb Is Nothing Then MsgBox "fichier " & chemin & nf & " non trouvé": Exit Sub
    Set ws = wb.Sheets(mois)        'la feuille dans le classeur
    Set re = Nothing
    Set re = ws.Range("A1:A100").Find(" : ", lookat:=xlPart, MatchCase:=False)
    If re Is Nothing Then MsgBox "la feuille " & ws.Name & " du fichier " & wb.Name & "        'a pas la bonne structure": Exit Sub
    dl = re.Row - 2
    col = ddjvt(0) + 1        ' colonne du jour sélectionné
    'HORAIRE A : 08H05 - 15H25
    'HORAIRE B : 10H05 - 17H25
    codeP = 28
    For i = 5 To dl
        If ws.Cells(i, 1) <> "" Then
            co = ws.Cells(i, col)
            Select Case co
                Case "RH", "CA", "FE", "FOR"
                Case "P"
                    If codeP < 35 Then
                      wsp.Cells(codeP, "k") = ws.Cells(i, 1)
                      codeP = codeP + 1
                    End If
            End Select
        End If
    Next i
    wb.Close False
End Sub
Function ddjok(ddj)
    'fonction de validation d'une date format j/m/a

    Dim ddjv(0 To 2) As Long
    ddjok = False
    ddjvt = Split(ddj & "/", "/")
    If UBound(ddjvt) <> 3 Then Exit Function
    If Len(ddjvt(2)) <> 2 And Len(ddjvt(2)) <> 4 Then Exit Function
    For i = 0 To 2
        If Not IsNumeric(ddjvt(i)) Then Exit Function
        ddjv(i) = CLng(ddjvt(i))
    Next i
    If ddjv(1) > 12 Or ddjv(1) = 0 Then Exit Function
    Select Case ddjv(1)
        Case 1, 3, 5, 7, 8, 10, 12
            If ddjv(0) > 31 Then Exit Function
        Case 4, 6, 9, 11
            If ddjv(0) > 30 Then Exit Function
        Case 2
            If ddjv(0) > (28 + IIf((ddjv(2) Mod 4) = 0, 1, 0)) Then Exit Function
        Case Else
            Exit Function
    End Select
    ddjok = True
End Function
Function moisok(ddj)
    'fonction de validation d'une date format j/m/a

    Dim ddjv(0 To 1) As Long
    moisok = False
    ddjvt = Split(ddj & "/", "/")
    If UBound(ddjvt) <> 2 Then Exit Function
    For i = 0 To 1
        If Not IsNumeric(ddjvt(i)) Then Exit Function
        ddjv(i) = CLng(ddjvt(i))
    Next i
    If ddjv(0) > 12 Or ddjv(0) = 0 Then Exit Function
    If Len(ddjvt(1)) <> 2 And Len(ddjvt(1)) <> 4 Then Exit Function
    moisok = True
End Function

Bonjour,

Désolé du temps de réponse, j'en suis là actuellement

image

Je ne dois pas enregistrer d'abord ? Car quand je tente d'enregistrer justement ca me dit ca :

image

Je sens qu'il détecte la douille là !

Bonjour,

ce message indique que tu dois choisir de sauver le fichier avec les macros, donc avec l'extension .xlsm (à choisir dans la liste des formats de fichiers au moment de la sauvegarde)

Bonjour,

Je pense avoir bien fait la manoeuvre, voici ou j'en suis :

Quand je clique sur 'générer planning du jour', il m'apparait cette fenêtre

image

Je mets donc la date du 01/07/25, et OK, et ce message d'erreur apparait :

image

Et en cliquant sur Débogage cela m'envoi sur cette ligne :

image

Merci pour ta grande patience d'ailleurs...

Sache que j'ai eu une fois un deux un message d'erreur m'indiquant une utilisation de macro interdite par l'administrateur, que ce ficher peut être modifié par des tiers car dans un emplacement en réseau (alors qu'il est bien sur mon disque à moi, et non pas le dossier partage que nous avons en commun, etc). Mais cela semble être passé pour le moment.

bonjour,

ce message d'erreur signifie qu'il ne trouve pas la feuille nommée "instructions" dans le classeur qui contient les macros.

Ok je comprends, mais pour autant je n'ai aucun fichier excel ou classeur appartenant à un fichier excel portant ce nom. Que puis-je faire ?

bonjour,

le fichier feuille-du-jour-cuisine.xlsx que j'ai mis jeudi à 15:01 contient bien cette feuille. As-tu bien suivi les instructions que j'ai fournies ? c'est dans ce fichier qu'il faut mettre les macros.

Rechercher des sujets similaires à "transmettre infos planning feuille jour"