Nombre d'occurences sur les lignes paires d'une colonne

tallix

XLDnaute Nouveau
Bonjour à tous,
Je gère en milieu hospitalier(un hôpital lyonnais) des plannings de postes de travail .

Mon Problème:

J'ai un tableau à deux entrées, en ligne les noms de soignants et en colonne les dates du mois
Sur la ligne du nom du soignant il y a le poste théorique et sur sa ligne de dessous son poste réel qui est annoté que s'il y a eu des changements:
exemple:
____________________________________________________________________
Total S :..............1........0.........1........1.........0........1.........1.........0
Total M :.............2........2.........1.........0........1........ 0.........0 ........0
Total N :.............0........0..........0 ........0........0.........0........1.........2
______________________________________________________________________
..........................Lu.......Ma.....Me......Je........Ve........Sa.......Di.......Lu...
____________________________________________________________________
Durand Paul .........S........S........M........M........M........R........R........N...
...................................Am......Am......Am............................................
____________________________________________________________________
Dupont Jean ........M........M........M........R........R........S........S........ N...
................................................S........S........Fo.......Fo.......................
____________________________________________________________________
Boucher Renée....M........M.........M........R........R........S........S........N...
.........................................................................................N........R...
____________________________________________________________________
J'aimerai avec une fonction ou par défaut en vba compter par colonne le nombre de soignants présents le soir(S), le Matin(M), la nuit(N) etc pour chaque jour. Repos(R) ,Arret maladie(Am), Formation(Fo).
Je vous remercie pour l'aide que vous pourrez m'apporter:rolleyes:

Ok ci joint mon classeur allégé. Je rentre chez moi et je me connecte au site. Merci et à tout a l'heure
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Nombre d'occurences sur les lignes paires d'une colonne

Bonjour tallix


Merci de fournir le tableau.​


Bonne journée.


ℝOGER2327
#6991


Vendredi 20 As 141 (Saint Olibrius, augure - fête Suprême Quarte)
2 Frimaire An CCXXII, 6,3145h - turnep
2013-W47-5T15:09:17Z


P.s. : Bonjour R@chid.
 

R@chid

XLDnaute Barbatruc
Re : Nombre d'occurences sur les lignes paires d'une colonne

Bonjour,
Je n'ai pas eu de réponses. Ai-je mal formulé ma demande?
C'est normal de ne pas avoir eu de réponses, car on ne reçoit pas de notification lors de la modification du poste, la prochaine fois quand on vous demande un fichier exemple il vaut mieux de le suivre par un nouveau msg..

Pour ton fichier, je le voie comme une usine à gaz dont je n'ai pas fait le plan d'installation, il faut nous dire sur quel onglet on doit faire le calcul et qu'est ce qu'on va calculer, je voie pas..
sinon je préfère toujours un fichier exemple alléger juste quelques lignes pour qu'on puisse te mettre sur le bon piste..

@ te relire
 

tallix

XLDnaute Nouveau
Re : Nombre d'occurences sur les lignes paires d'une colonne

Voilà le fichier simplifié un maximum(une seule feuille)

Donc sur la ligne où se trouve le nom (par exemple Durand 1) on a le roulement Prévu en debut d'année et sur la ligne qui se trouve sous ce même nom on inscrit les eventuels changements de postes , les CA et autres.
A chaque changement de la deuxième ligne une macro calcule le nombre d'agents présents dans la colonne du jour.

Sur les onze 1ères lignes sont placées les formules qui comptablisents le nombre d'agents présents par jour. j'ai réalisé une macro(présente dans le classeur) qui fait cela mais je la trouve compliquée et j'aurai préféré une formule.
A bientôt et merci à vous
 

Pièces jointes

  • roulement pour web.xlsm
    41.7 KB · Affichages: 58
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Nombre d'occurences sur les lignes paires d'une colonne

Bonjour tallix.


J'ai longuement étudié votre classeur et je dois dire que je m'y perds. J'ai essayé de comprendre la procédure TotauxVerticaux. Sans succès : je ne parviens pas à comprendre pourquoi faut-il tenir compte du jour NumCol+1 pour comptabiliser le nombre d'agents présents le jour NumCol :​
VB:
    If Cells(J, NumCol + 1).Value <> "" And Cells(J + 1, NumCol).Value = poste.Value Then
Bref, je crois que votre problème me dépasse.

Ceci dit, même si je ne comprends pas ce que doit faire votre code, il me semble que vous pouvez le simplifier comme suit :​
VB:
Sub TotauxVerticaux()
Dim J&, DerLig&, LaLigne&, Formule, Poste As Range
    DerLig = Cells(Columns(1).Rows.Count, NumCol).End(xlUp).Row
    Application.EnableEvents = False
    For Each Poste In Range("A1:A5", "A7:A9").Cells
        LaLigne = Poste.Row
        Formule = Empty
        For J = 16 To DerLig Step 2
            If Cells(J, NumCol).Value = Poste.Value And Cells(J + 1, NumCol).Value = "" Then Formule = Formule + 1
            If Cells(J, NumCol + 1).Value <> "" And Cells(J + 1, NumCol).Value = Poste.Value Then Formule = Formule + 1
        Next J
        If LCase(Left(Poste, 4)) <> "sous" Then
            Cells(LaLigne, NumCol).Value = Formule
        End If
    Next Poste
    Application.EnableEvents = True
End Sub


Bonne continuation.


ℝOGER2327
#7001


Mardi 24 As 141 (Saint Berbiguier, martyr - fête Suprême Quarte)
6 Frimaire An CCXXII, 4,3754h - mâche
2013-W48-2T10:30:03Z
 
Dernière édition:

tallix

XLDnaute Nouveau
Re : Nombre d'occurences sur les lignes paires d'une colonne

Bonjour et merci beaucoup pour votre réponse,

Vous avez raison pour "If Cells(J, NumCol + 1).Value <> "" And Cells(J + 1, NumCol).Value = poste.Value Then"
il devait s'écrire "If Cells(J+1, NumCol ).Value <> "" And Cells(J + 1, NumCol).Value = poste.Value Then".

La ligne "If LCase(Left(Poste, 4)) <> "sous" Then" n'est en fait pas utile. C'est un ersatz d'un précédent code.


Votre simplification montre que vous avez parfaitement compris ma routine et donc sa finalité, de plus vous y avez trouvé une incohérence.

Je vais tester ce matin au boulot votre simplification et vous faire un retour.

A très bientôt
 

ROGER2327

XLDnaute Barbatruc
Re : Nombre d'occurences sur les lignes paires d'une colonne

Re...


Bonjour et merci beaucoup pour votre réponse,

Vous avez raison pour "If Cells(J, NumCol + 1).Value <> "" And Cells(J + 1, NumCol).Value = poste.Value Then"
il devait s'écrire "If Cells(J+1, NumCol ).Value <> "" And Cells(J + 1, NumCol).Value = poste.Value Then".

La ligne "If LCase(Left(Poste, 4)) <> "sous" Then" n'est en fait pas utile. C'est un ersatz d'un précédent code.


Votre simplification montre que vous avez parfaitement compris ma routine et donc sa finalité, de plus vous y avez trouvé une incohérence.

Je vais tester ce matin au boulot votre simplification et vous faire un retour.

A très bientôt
C'est plus clair comme ça. (Mais qu'est-ce qu'on peut perdre comme temps à cause de problèmes posés à la va-vite, sans rien vérifier !!!)

Le code pourrait être :​
VB:
Private Sub Worksheet_Change(ByVal Cible As Range)
Dim Cel As Range, Plg As Range
  If ActiveSheet.CodeName Like "Mois*" Then
    With [B16:AF51]
      Set Plg = Intersect(.Cells, Cible)
      If Not Plg Is Nothing Then
        For Each Cel In Plg.Columns
          TotVert Intersect(.Cells, Columns(Cel.Column))
        Next
      End If
    End With
  End If
End Sub

Private Sub TotVert(Dat As Range)
Dim c, pDat%, Poste As Range, RefPoste As Range
  Set RefPoste = [A1:A5,A7:A9].Cells
  For Each Poste In RefPoste.Cells
    c = Empty
    For pDat = 1 To Dat.Count Step 2
      If Dat.Cells(pDat + 1, 1).Value = Poste.Value Then
        c = c + 1
      ElseIf Dat.Cells(pDat + 1, 1).Value = Empty And Dat.Cells(pDat, 1).Value = Poste.Value Then
        c = c + 1
      End If
    Next
    Application.EnableEvents = False
    Poste.Offset(0, Dat.Column - 1) = c
    Application.EnableEvents = True
  Next
End Sub

Il me semble qu'une simple formule en B1 (à recopier partout où c'est nécessaire) serait tout aussi efficace :​
Code:
=SOMMEPROD(((B$17:B$51=$A1)+(B$16:B$50=$A1)*(B$17:B$51=""))*MOD(LIGNE($17:$51);2))


Bonne journée.



ℝOGER2327
#7003


Mercredi 25 As 141 (Saint Lewis Caroll, profesSainteur - fête Suprême Quarte)
7 Frimaire An CCXXII, 4,2734h - chou-fleur
2013-W48-3T10:15:22Z
 

ROGER2327

XLDnaute Barbatruc
Re : Nombre d'occurences sur les lignes paires d'une colonne

Re...


(...)

Je vais tester ce matin au boulot votre simplification et vous faire un retour.

A très bientôt
C'est très-aimable. Merci d'avance.​


ℝOGER2327
#7053


Jeudi 12 Sable 141 (Sainte Choupe, mère de famille - fête Suprême Quarte)
22 Frimaire An CCXXII, 6,9741h - bruyère
2013-W50-4T16:44:16Z
 

Statistiques des forums

Discussions
311 720
Messages
2 081 917
Membres
101 839
dernier inscrit
laurentEstrées