Prévenir d'une absence dans un planning salarié

Bonjour à tous,

Suite à une demande de mon supérieur hiérarchique, j'ai du me lancer dans excel ( logiciel que je ne maîtrise pas très bien...),

Alors voilà mon cas :

Mon supérieur hiérarchique aimerait avoir dans son planning du mois une cellule qui nous préviendrait des futurs absences à prendre en comptes ( 15 jours à partir de la date d'aujourd'hui) : exemple : nous sommes le 10/10/2018, et nous voulons que 15 jours après cette date, si dans le planning il y a écrit RTT ou CP ( congé payé) pour PAUL et ISABELLE, alors devant la cellule de PAUL ET ISABELLE, dans la colonne ABSENCE on retrouve RTT si c'est un RTT ou CP si c'est un CP ( et cela pour chaque salarié).

pouvez vous m'aider à trouver une solution à cela svp ?

j'ai beau essayer plein de formule avec SI, AUJOURD'HUI, AUJOURD'HUI+15, RECHERCHE, INDEX, EQUIV ou même mise en forme conditionnelle, mais rien...

je vous joint mon fichier comportant une matrice avec le planning semaine des salariés du mois d'octobre en ordonné et le jour du mois en abscisse.

un tableau avec la date du jour et la date du jour+15, un tableau avec les différentes sortes d'absence et un tableau (salarie/abscence), et c'est ici que j'aimerais retrouver le résultat.

j'espère avoir été clair dans ma demande

N'hésiter à me poser des questions pour plus d'informations.

je vous remercie d'avance pour votre aide

Bienvenue Moesovic,

Est-ce que ton supérieur t'a précisé vouloir passé uniquement par formule ou la VBA est possible également ?

Bonjour Juice,

Non je n'ai pas eu plus de précisions que cela, la méthode ne l'intéresse pas forcément, mais plus le résultat.

Il est vrai que je me suis lancé dans les formules car j'ai des connaissances ( certes très peu) sur les formules et non sur le VBA.

C'est une notion que je n'ai pas du tout.

Mais si vous pouvez m'aider par VBA, je suis preneur, cela me donnera l'occasion d'élargir mes connaissances sur Excel.

Bon bah cool : )

Je te fais sa mais j'ai une dernière question :

La disposition du tableau que tu nous a mis en pièce jointe est bien celle de ton tableau originale ?

Pas de collègue en plus, pas d'info sur une autre feuille, de colonne masqué ou autre chose : ) ?

Un code VBA se doit être précis dans les références aux colonnes et aux lignes.

Donc la moindre modification entre un fichier test et le fichier original peux faire des choses moyen cool :p

Édit : Je te modifie la disposition de ton fichier pour qu'il sois bien plus lisible et simple à codifier.

Je reviens vers toi quand j'ai fini le code

Me revoilà avec ton fichier modifié ;D

Tu peux rajouter autant de colonne pour les jours et autant de salariés que tu veux

Le fichier tournera quand même

Par contre ! La VBA se lance à l'ouverture du fichier

C'est à dire que la mise à jour est automatiquement faite quand tu ouvre ton fichier

Restant à dispo !

Ci-dessous la Boucle pour ceux qui veulent pas télécharger le fichier

Sub Planning()
Dim a As Long, b As Long, c As Long, d As Long
Dim x As Long, y As Long, z As Long
Dim Name As String
Dim Ajd As Date
'Notre variable Ajd prend la date du jour
Ajd = Date
'On compte notre nombre de colonne dans le planning
a = Range("A1:A6500").End(xlToRight).Column
'On cherche la colonne qui est égal à la date du jour (var Ajd)
For c = 4 To a
    If Cells(1, c) = Ajd Then
        Exit For
    End If
Next
'Maintenant, on cherche la colonne qui est égal à AUJOURDHUI+15
For b = 4 To a
    If Cells(1, b) = Ajd + 15 Then
        Exit For
    End If
Next
'On connais à présent la plage à analyser (cherche nos "CP" et/ou "RTT")
'En effet, cette plage débutera à la colonne n°(c)
'Et finira à la colonne n°(b)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'On compte notre nombre de salarié
x = Range("B" & Rows.Count).End(xlUp).Row
For y = 2 To x
    d = c
    z = y + 1
    For d = d To b
        If Cells(y, d) = "RTT" Or Cells(z, d) = "RTT" Then
            Cells(y, 3) = "RTT"
            Exit For
        End If
        If Cells(y, d) = "CP" Or Cells(z, d) = "CP" Then
            Cells(y, 3) = "CP"
            Exit For
        End If
    Next
    y = y + 1
Next
End Sub
20pour-moesovic.xlsm (19.50 Ko)

Merci Juice pour ton aide !

Mais je dois t'avouer que je ne saisie pas totalement comment cela fonctionne et comment je peux modifier les données.

Donc le fichier prendre en compte les données sous chaque jour, et le résultat dans la cellule ( ABSENCE) correspond bien à la date du jour+15 jours à partir de celui-ci.

Donc dans la colonne absence on trouvera le résultat (RTT, CP,MAL, TAD...) 15 jours après la date d'aujourd'hui ?

et si je modifie les données qui sont dans la matrice D2:AH11, le résultat dans absence prendra compte du changement aussi ?

je m'excuse d'avance pour toutes les questions que je pose, mais il faut que je puisse l'expliquer ...

Serait-il possible d'y ajouter une colonne à coté d'absence qui sera "JOUR D'ABSENCE", comme ça on sait quand est-ce que débute l'absence du salarié ?

je dois surement trop en demander, mais JUICE tu me retire une épine du pied, je te remercie déjà pour ce que tu as fais

Par ailleurs, quand je modifie les données dans mon tableau, le résultat dans absence n'est pas pris en compte est-ce normal

De plus, prend-t-il en compte les MAL et TC en plus ?

je m'excuse encore de toutes ces demandes, mais ne comprenant pas réelement le VBA je me questionne sur le fonctionnement du tableau dans la feuille...

je te remercie d'avance JUICE

xDDD

On reprend point par point

Donc dans la colonne absence on trouvera le résultat (RTT, CP,MAL, TAD...) 15 jours après la date d'aujourd'hui ?

De plus, prend-t-il en compte les MAL et TC en plus ?

On ne devait pas prendre en compte, uniquement les RTT et les CP ? Tu veux prendre en compte tout les libellés d'absence en faite ?

et si je modifie les données qui sont dans la matrice D2:AH11, le résultat dans absence prendra compte du changement aussi ?

Par ailleurs, quand je modifie les données dans mon tableau, le résultat dans absence n'est pas pris en compte est-ce normal

Comme je te le disais, le fichier ce met à jour à son ouverture.

Mais c'est pas une mauvaise idée de le mettre plutôt à jour lorsque tu modifie une cellule dans la plage concerné.

Je te codifie sa

Serait-il possible d'y ajouter une colonne à coté d'absence qui sera "JOUR D'ABSENCE", comme ça on sait quand est-ce que débute l'absence du salarié ?

Oui aucun problème, je vais la rajouter et le codifier aussi

J'attend ton retour à ma première question, et je me remet sur ton fichier

Oui, j'aurais bien aimée que tout les libellés soient pris en comptes. Cela me faciliterais la tâches et me permettra d'avoir un maximum d'information sur les absence.

et du coup, le résultat dans la cellule absence est celui d'aujourd'hui + 15 jours ? c'est à dire : il prend en compte les absences que 15 jours après la date d'aujourd'hui, ou prend-t-il en compte les absence qui sont présentes entre aujourd'hui et 15 jours après ?

Il prend en compte les absences entre la date du jours et la date du jours + 15 jours.

Il s'arrête automatiquement au premier libellé d'absence trouvé dans cette plage, donc le plus proche de la date du jour sans dépasser les 15 jours suivants

D'accord, parfait, cela me convient aussi, c'est même surement mieux que mon idée de départ.

En tout cas, je tiens vraiment à te remercier du temps que tu prends pour m'aider sur ce cas là.

Un plaisir ^^ !

Voilà ton nouveau fichier du coup

Il se met à jour à l'ajout de nouveau libellé dans ta plage ;D

Le code modifié également :

Sub Planning()
Dim a As Long, b As Long, c As Long, d As Long
Dim x As Long, y As Long, z As Long
Dim Name As String, Col As String
Dim Ajd As Date
'Notre variable Ajd prend la date du jour
Ajd = Date
'On compte notre nombre de colonne dans le planning
a = Range("A1:A6500").End(xlToRight).Column
'On cherche la colonne qui est égal à la date du jour (var Ajd)
For c = 5 To a
    If Cells(1, c) = Ajd Then
        Exit For
    End If
Next
'Maintenant, on cherche la colonne qui est égal à AUJOURDHUI+15
For b = 5 To a
    If Cells(1, b) = Ajd + 15 Then
        Exit For
    End If
Next
'On connais à présent la plage à analyser (cherche nos "CP" et/ou "RTT")
'En effet, cette plage débutera à la colonne n°(c)
'Et finira à la colonne n°(b)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'On compte notre nombre de salarié
x = Range("B" & Rows.Count).End(xlUp).Row
For y = 2 To x
    d = c
    z = y + 1
    For d = d To b
        If Cells(y, d) <> "" Then
            Cells(y, 3) = Cells(y, d)
            Cells(y, 4) = Cells(1, d)
            Exit For
        End If
        If Cells(z, d) <> "" Then
            Cells(z, 3) = Cells(z, d)
            Cells(z, 4) = Cells(1, d)
            Exit For
        End If
    Next
    y = y + 1
Next
Application.EnableEvents = True
End Sub
9pour-moesovic.xlsm (19.02 Ko)

je te remercie, c'est ce qu'il me fallait,

Juste est-ce normale que le résultat dans absent et jour d'absence ne change pas quand je modifie les données dans la matrice ( E2:Ai11) ?

et serait-il possible de changer cela ? c'est à dire, si il n'y a rien dans le mois pour Paul et que je décide de mettre des CP à Paul manuellement, alors à ce moment là le résultat dans absence et jour d'absence changent.

Merci encore !! tu dois vraiment en avoir marre de moi

Re !

Bah si je l'ai mit sa :0

Tu a bien activé tes macro à l'ouverture du fichier ?

Sinon j'ai remarqué un bug aussi sur celui que je t'ai envoyé, donc voilà un fichier corrigé !

Restant à dispo

17pour-moesovic.xlsm (21.39 Ko)

Re

Oui c'est parfait, c'est exactement ce qu'il me fallait !

Je te remercie une fois de plus pour ton aide !

Rechercher des sujets similaires à "prevenir absence planning salarie"