Planning travail , si Cellule = tel poste alors x heure

Super Dhany merci beaucoup , c'est déjà une superbe avancée pour moi et je peux te dire que ça va m'être très utile .

Alors je te souhaite une bonne nuit , moi étant au travail je vais potasser encore un peu le sujet .

Autre question pour comprendre ton code VBA :

Option Explicit

Function TotH() As Double

Application.Volatile

Dim chn$, tot#, nb#, lig&, col%: lig = Application.Caller.Row

For col = 6 To 36

chn = Cells(lig, col): nb = -9 * (chn <> "" And chn <> "R")

Select Case chn

Case "AM", "GA": If Cells(2, col) = 2 Then nb = 8

Case "N": If Cells(2, col) <> 6 Then nb = 8

Case "F": nb = 8

Case "J": nb = 10

Case "PJ", "PN": nb = 12

Case "CP": nb = 7.7 '42 mn / 60 = 0,7

Case "G": nb = 7.5 '30 mn / 60 = 0,5

End Select

tot = tot + nb

Next col

TotH = tot

End Function

J'y vois les postes suivants : AM/GA/N/F/J/PJ/PN/CP/G/

Il me manquerait donc : PM/GP/RC/Q et pourtant que je les testes ils s'additionnent bien , tu les a cachés quelque part ? ^^

non, non, y'a rien d'caché ; c'est juste que nb est correctement initialisé par défaut :

    For col = 6 To 36
      chn = Cells(lig, col): nb = -9 * (chn <> "" And chn <> "R")
      Select Case chn
        ...
        ...
      End Select
      tot = tot + nb
    Next col

pour chaque colonne 6 à 36 (F à AJ) :

* chn prend le contenu de la cellule qui est à l'intersection de lig et col, lig étant la ligne où est placée la formule =TotH()

* nb est initialisé par défaut avec : nb = -9 * (chn <> "" And chn <> "R") ; comme le cas le plus courant est 9 h, j'aurais pu mettre simplement : nb = 9 (ce qui est valable pour tous tes postes « manquants ») ; mais en fait, c'est un peu plus compliqué car nb doit être initialisé à 0 si chn est vide ou contient "R" (Récupération) ; pour ces 2 cas, le test (chn <> "" And chn <> "R") est FAUX, valeur 0, et -9 * 0 = 0 ; à l'inverse, quand chn n'est pas vide et qu'il est différent de "R", le test est VRAI, valeur -1, et -9 * -1 = 9

* l'initialisation correcte de nb étant faite 0 ou à 9), tous les Case du Select ont pour but de remplacer cette valeur par une autre selon chaque cas concerné ; par exemple 8 h pour "F" (sans condition) ; ou 8 h pour "AM" et "GA" (condition : lundi) ; ou 8 h pour "N" (condition : pas un vendredi) ; faudrait donc ajouter des conditions pour les jours fériés, mais ça, c'est vraiment pas facile !

* après le bloc Select Case chn .. End Select nb contient le bon nombre d'heures selon chaque poste ; il suffit d'en faire la somme dans la variable tot avec : tot = tot + nb

dhany

C’est super avec les explications et tout je comprend nickel ... la seule comme tu dis serait de trouver une pointure pour me régler la durée de temps de travail sur le AM et le N les jlendemains de jours fériés !! En tout cas chapeau bas l’artiste et merci grandement pour ce résumé parfait ! Je vous doit combien docteur ? ^^

Une question : aurais tu une solution à mon problème sur les heures que j'aimerais en Heures/minutes et non pas en centième d'heure en AK11 par exemple pour l'employé 1 ?

j'ai bien lu ta demande, je travaille dessus.

dhany

Il est parfait ! il est parfait je vous dit !!!

ça y'est, voici la nouvelle version :


y'a 2 modifs dans le code VBA :

Function TotH() As String

* cette fois, le type du retour de la fonction est String et pas Double

* fin de la fonction, juste après Next col :

  Next col
  chn = ""
  If tot > 0 Then
    nb = Int(tot): chn = Round((tot - nb) * 60, 0)
    chn = nb & " h " & Format(chn, "00") & " mn"
  End If
  TotH = chn
End Function

y'a 2 modifs sur la 2ème feuille Excel :

* plage de cellules AK11:AK27 : format Standard au lieu de 0,00;;

j'ai d'ailleurs supprimé ce format personnalisé, car il est devenu inutile.

* nouvelle largeur de la colonne AK : 13,56


note bien que 179,9 h = 179 h 54 mn ; ce que tu peux vérifier avec :

0,9 h × 60 = 54 et 54 / 60 = 0,9 ; CQFD

dhany

C'est tout à fait ce qu'il me fallait , et en plus de répondre au besoin que j'avais , tu as expliquer ça de manière simple . Merci Merci Merci

Un grand service que tu m'as rendu la , je suis content . et j'apprend en +

Par contre question je remet ce code vba pour chaque mois ( juillet etc etc ) ???

et si jamais par la passe le magicien qui pourrait les lendemains de jours fériés faire dire à mon planning qu'un AM (matin ) est d'une durée de 8h et pas 9h comme les autres jours (sauf le lundi qui est comme un lendemain de jour férié ) et qu'un N (nuit) est d'une durée de 9h les veilles de jours fériés ( pas comme les autres jours de semaine sauf les vendredis de nuit . Ce serait au top !

tu a écrit :

Par contre question : je remet ce code vba pour chaque mois ( juillet etc etc ) ???

non, non, y'a plus besoin d'modifier l'code VBA !

la fonction personnalisée TotH() est placée dans un module standard tel que Module1 ; cette fonction peut être appelée depuis n'importe quelle feuille, exactement comme tu le fais pour une fonction intégrée d'Excel ; donc pour chacune de tes feuilles, il te suffit de mettre en colonne AK la formule =TotH() ; tu n'as même pas à modifier le format de nombre de la cellule puisque par défaut, c'est le format Standard ; tu as juste à mettre une largeur de colonne de 13,56

attention : en fait, tu peux mettre la formule dans n'importe quelle cellule, SAUF en colonne F à AJ, car la fonction utilise ces cellules de la ligne active.

dhany

Ok Dhany , encore plus simple que ce que je pensais ! merci pour tout ... je teste tout ça et je viendrait donner un petit retour de tout ça !

attention : on s'est croisés, et j'ai modifié mon post précédent ! relis-le car j'y ai mis une note très importante !

dhany

Question / si je veux rajouter dans la formule visual basic un paramètre , je peux ? j'ai tester sans enregistrer mais cela m'a notifier erreur de débogage , car je m'aperçois quand je met MA ( maladie ) que ça me génère 9h alors que MA = 0h

MA = 0 h ? allons bon, tu as déjà oublié mes explications sur l'initialisation de nb ?

cellule vide ou heures de Récupération ou heures de Maladie = même combat ! smile149

nb = -9 * (chn <> "" And chn <> "R" And chn <> "MA")

que la force soit avec toi, camarade Loic !

C'est bon ça y est , la j'ai compris , j'ai changer la formule en visual basic et ça fonctionne !

Loic a écrit :

là j'ai compris, j'ai changé la formule en visual basic et ça fonctionne !

bravo ! y'a une autre question, à part celle des jours fériés ?

Aucune Chef , tout roule

ok, alors j'indique ci-dessous la suite de cet exo, pour l'intervenant suivant (car j'suis pas calé en paramétrage de jours fériés).


[quote="dans son post de 21:03, Loic"]si jamais par là passe le magicien qui pourrait les lendemains de jours fériés faire dire à mon planning qu'un AM (matin) est d'une durée de 8h et pas 9h comme les autres jours (sauf le lundi qui est comme un lendemain de jour férié) et qu'un N (nuit) est d'une durée de 9h les veilles de jours fériés (pas comme les autres jours de semaine sauf les vendredis de nuit), ce serait au top ![/quote]

n'hésitez pas à paramétrer ma fonction personnalisée TotH() selon les jours fériés.


vous pouvez partir de ce fichier, qui est le plus récent :

il contient la modif pour "MA" = 0 h

Option Explicit

Function TotH() As String
  Application.Volatile
  Dim chn$, tot#, nb#, lig&, col%: lig = Application.Caller.Row
  For col = 6 To 36
    chn = Cells(lig, col): nb = -9 * (chn <> "" And chn <> "R" And chn <> "MA")
    Select Case chn
      Case "AM", "GA": If Cells(2, col) = 2 Then nb = 8
      Case "N": If Cells(2, col) <> 6 Then nb = 8
      Case "F": nb = 8
      Case "J": nb = 10
      Case "PJ", "PN": nb = 12
      Case "CP": nb = 7.7   '42 mn / 60 = 0,7
      Case "G": nb = 7.5    '30 mn / 60 = 0,5
    End Select
    tot = tot + nb
  Next col
  chn = ""
  If tot > 0 Then
    nb = Int(tot): chn = Round((tot - nb) * 60, 0)
    chn = nb & " h " & Format(chn, "00") & " mn"
  End If
  TotH = chn
End Function

dhany

Bonsoir,

petit up pour cet exo d'Atomiik Loic non résolu entièrement :

il manque un paramétrage pour les jours fériés !

(relire mon post ci-dessus, du 15 septembre à 22:15)

dhany

Salut Dhany , bonjour à Tous !

Et parfois sur une ligne , le cumul n'est pas bon , exemple en Juin ligne 11 pour Opérateur1 , cumul de 153h mensuel alors que ça devrait faire 82h , mais je m'aperçois quand commençant à remplir la ligne 12 , tout se recalcule bien . Alors j'ai peur d'une chose c'est que le calcul soit fausser très souvent et que du coup ne soit pas fiable ... alors WHAT ELSE ?

Rechercher des sujets similaires à "planning travail tel poste heure"