Formulaire + remplissage automatique d'un planning

Bonjour la communauté ! Je rencontre un petit souci avec un fichier déjà bien complet.

L’objectif serai de créer un formulaire automatique (j’ai cherché sur le forum, il y a de nombreux formulaires, plus ou moins dur à réaliser, mais aucun répondant à mon besoin.)

Mon fichier comprend de nombreux onglets, la plupart correspondent à des mois, les autres sont un récapitulatif des nombres d’heures prises par le service en question.

Le premier point concerne le remplissage des onglets « mois », grâce au formulaire de l'onglet "Demande de congés". Dans le tableau « B12:H27 » de l’onglet « Demande de congés ». Pour chaque demande il faudrait que la macro renseigne le bon «Type de CP » « colonne H12 de « Demande de congés » dans l’onglet mois correspondant à la cellule C13,C14,C15, …

Exemple :

image

Alors :

image

Merci de votre aide !

228service2.xlsm (252.06 Ko)

Bonsoir,

Ta macro de remplissage mensuel est déjà très opérante.

Je te conseil de renseigner tes demandes de congés directement sur ton onglet recap, via un formulaire si tu veux et tu verras que les RTT se renseignent tout seuls.

Leakim

80service2.xlsm (252.29 Ko)

Bonjour Leakim,

Lorsque je renseigne les données dans l'onglet récap cela ne me permet pas de remplir automatiquement les calendriers avec le bon mode de congés.

As-tu changer quelque chose pour en arriver à cette conclusion ?

Re,

Je n'ai toujours pas trouver la solution, quelqu'un a une idée de comment procéder ?

Une proposition

Sub ddeConge()
' ne pas ajouter d'autres onglets avant le premier mois ou changer la valeur suivante
origineOnglet = 3
For Each cel In Sheets("Demande de congés").Range("H13:H27")
    If cel.Value <> "" Then
        For quand = cel.Offset(0, -5) To cel.Offset(0, -3)
            onglet = Month(quand - 22) + origineOnglet
            Sheets(onglet).Select
            nom = Sheets("Demande de congés").Range("C6")
            jour = Day(quand)
            Set colJour = Sheets(onglet).Rows(9).Find(jour, LookIn:=xlValues)
            Set ligneNom = Sheets(onglet).Columns(1).Find(nom, LookIn:=xlValues)
            If colJour Is Nothing Or ligneNom Is Nothing Then
                MsgBox "Erreur demande sur ligne " & cel.Row
            Else
                'Debug.Print onglet, Sheets(onglet).Name, jour, nom, colJour.Column, ligneNom.Row
                Sheets(onglet).Cells(ligneNom.Row, colJour.Column).Offset(1, 0) = cel.Value
                Sheets(onglet).Cells(ligneNom.Row, colJour.Column).Offset(2, 0) = cel.Value
            End If
        Next
    End If
Next
End Sub
34service2.xlsm (252.86 Ko)

Bonjour Steelson,

C'est exactement ce que j'attends , y a un petit souci par contre, j'ai testé pour le 02/01/2020

image

et la macro rentre les données le 23 décembre 2021

image

J'ai une autre question, est-il possible sur Excel d'envoyer un mail à une ou plusieurs personnes, afin de valider la demande ?
ça me semble compliqué mais bon ;).

J'ai oublié de dire qu'il faut mettre en compte dans la demande de congés si c'est uniquement le matin ou l'après-midi ou le jour complet. Mais bon je ne vois pas comment l'insérer dans le demande de congés.

Cdl, Anthony

ok je corrige

pour le mail, quelle messagerie ? outlook ?

Oui outlook

Correction de la macro

Sub ddeConge()
' ne pas ajouter d'autres onglets avant le premier mois ou changer la valeur suivante
origineOnglet = 3
For Each cel In Sheets("Demande de congés").Range("H13:H27")
    If cel.Value <> "" Then
        For quand = cel.Offset(0, -5) To cel.Offset(0, -3)
            onglet = Month(quand - 22) + origineOnglet
            If Month(quand) = 1 And Day(quand) < 23 Then onglet = origineOnglet
            Sheets(onglet).Select
            nom = Sheets("Demande de congés").Range("C6")
            jour = Day(quand)
            Set colJour = Sheets(onglet).Rows(9).Find(Format(jour, "00"), LookIn:=xlValues)
            Set ligneNom = Sheets(onglet).Columns(1).Find(nom, LookIn:=xlValues)
            If colJour Is Nothing Or ligneNom Is Nothing Then
                MsgBox "Erreur demande sur ligne " & cel.Row
            Else
                'Debug.Print quand, nom, onglet, Sheets(onglet).Name, jour, nom, colJour.Column, ligneNom.Row
                Sheets(onglet).Cells(ligneNom.Row, colJour.Column).Offset(1, 0) = cel.Value
                Sheets(onglet).Cells(ligneNom.Row, colJour.Column).Offset(2, 0) = cel.Value
            End If
        Next
    End If
Next
End Sub

Pour outlook, à adapter (personnellement je ne travaille plus avec outlook)

Voilà Steelson une version qui comprend les demi-journée,

Pense tu que la notion 0.5 matin, après-midi peut être intégré dans le calcul ?

37service2-2-1.xlsm (250.40 Ko)

Je pense à ça

Pour outlook, à adapter (personnellement je ne travaille plus avec outlook)

Bonjour Steelson, tu procèdes comment si tu fais sans Outlook ?

Leakim

Bonjour Leakim

Bonjour Steelson, tu procèdes comment si tu fais sans Outlook ?

Si je suis sur google sheets > gmail

    GmailApp.sendEmail(email, objet, corps, {
      htmlBody: corps,
      attachments: [{
            fileName: fichier,
            content: reponse.getBytes(),
            mimeType: "application/pdf"
        }]
    });

Si je suis sur excel >

  • thunderbird
        Texte = "Bonjour%0a%0aVeuillez trouver ci-joint...%0a%0aBien cordialement."
        Mail = "C:\Program Files (x86)\Mozilla Thunderbird\thunderbird.exe"
        monCourriel = " -compose " & "to=" & Collaborateur & "," & "subject=" & Sujet & "," & "body=" & Texte & "," & "attachment=" & PieceJointe
        Shell Mail & monCourriel, vbNormalFocus
        'SendKeys "^{ENTER}", True 'Envoi automatique
        SendKeys "^+{ENTER}", True 'Dossier Messages en attente
  • ou CDO (gmail ou orange) ... nettement plus complexe !

Je pense à ça

que veut dire CPB ?

Je pense à ça

plutôt faire une seule zone car si on répond oui à "uniquement le matin" et oui à "uniquement l'apm", qu'est-ce qu'on fait ?

voici quand même une solution

Sub ddeConge()
' ne pas ajouter d'autres onglets avant le premier mois ou changer la valeur suivante
origineOnglet = 3
For Each cel In Sheets("Demande de congés").Range("H13:H27")
    If cel.Value <> "" Then
        For quand = cel.Offset(0, -5) To cel.Offset(0, -3)
            onglet = Month(quand - 22) + origineOnglet
            Sheets(onglet).Select
            nom = Sheets("Demande de congés").Range("C6")
            jour = Day(quand)
            Set colJour = Sheets(onglet).Rows(9).Find(jour, LookIn:=xlValues)
            Set ligneNom = Sheets(onglet).Columns(1).Find(nom, LookIn:=xlValues)
            If colJour Is Nothing Or ligneNom Is Nothing Then
                MsgBox "Erreur demande sur ligne " & cel.Row
            Else
                'Debug.Print onglet, Sheets(onglet).Name, jour, nom, colJour.Column, ligneNom.Row
                If cel.Offset(0, 1) = "NON" Then Sheets(onglet).Cells(ligneNom.Row, colJour.Column).Offset(2, 0) = cel.Value
                If cel.Offset(0, 2) = "NON" Then Sheets(onglet).Cells(ligneNom.Row, colJour.Column).Offset(1, 0) = cel.Value
            End If
        Next
    End If
Next
End Sub

Bonjour,

Merci Steelson !

Leakim

Bonjour Steelson et bonne 2021 à vous deux !

CPB = Congés payés

Concernant la modification de macro pour le matin et l'après-midi je suis d'accord avec toi, autant mettre qu'une seule liste.

Sinon j'ai testé ta macro avec les deux critères pour tester et j'ai le même problème que la première fois le mois de janvier ne marche pas :/ Je mets en copie un nouveau modèle (juste une modification sur le critère matin, après-midi).

Cordialement,

Anthony

51conge-v2.xlsm (248.88 Ko)

Bonjour à vous !

Désolé pour mon temps de réponse un petit déplacement imprévu…

Merci pour vos réponses ! J'ai réussi à construire ma macro grâce à ta macro Steelson.

Pour l'envois de mail automatique j'ai utilisé power apps, qui est selon moi plus pratique qu'une macro.

Merci à vous !

Cordialement,

Rechercher des sujets similaires à "formulaire remplissage automatique planning"