Calculer l'occurence selon plusieurs critères

Bonjour,

Je voudrais automatiser l'occurrence : combien de fois l'agent est sur la ligne 5 à 9, ainsi de suite sur toute les lignes.

Par la suite celle-ci est comptabilisé dans la feuille calcul SECTO en fonction des lignes

Dans le fichier du planning il y a des "secteurs" : 2,3,4, URG puis 7,8,9,10,

sachant que le secteur 3 = 7 = 8 = 9 = 10 et et le secteur 2 = 4, URG est unique

Les secteurs représentes des salles composée de chambres soit de 5 lits (2 = 4) , soit de 3 lits (3 = 7 = 8 = 9 = 10), soit URG

J'ai fais 3 feuilles ou seront répertorier le nom d'agent par rapport au numéro de semaines et le nombre de fois où il a été sur le secteur.

Ainsi que le nom de l'agent s'ajoute sur la ligne si celui-ci n'existe pas.

Si déjà quelqu'un peut m'éclairer pour calculer l'occurrence. Actuellement cela me prend beaucoup de temps au travail alors qu'en automatisant cela me permettrait de noter chaque agent a quel endroit il se situe sur la semaine.

Merci d'avance pour l'aide que vous m'apporterez et vers quel direction je dois commencer.

Bonjour,

Le plus simple pour une occurence est un NB.SI.ENS()

Ici, ton fichier ne reflète pas tes explications (pas de feuille, où sont les agents, etc ...).

Cdlt,

Je me suis trompé de fichier je vous le renvois

Bonjour,

Un exemple en 5 lits avec SOMMEPROD

Cdlt,

5plan.xlsx (52.45 Ko)

Je ne comprend pas comment ca marche car ca marche bien sur le premier nom mais sur le deuxième il y a une erreur il y est 5 fois calcul que 3 fois du coup j'ai du mal a comprendre comment ca marche.

Je me dirigerais plus sur du code VBA. Surtout pour rajouter les noms automatiquement mais j'arrive pas a comprendre comment cela fonctionne.

Bonsoir,

il faut enlever les "$" à $A2 de la première formule avant de la recopier vers le bas.

Ensuite il n'y a pas 5 données pour le dormeur mais 4, car la 5 ième est en lit "URG" non pris en compte dans la feuille "5 lits"

@ bientôt

LouReeD

Bonsoir,

Merci LouReeD pour la correction, il est temps que j'aille me coucher je ne vois plus clair !

Bonne soirée !

J'en ai trouvé une autre, il manque une paire de parenthèse sur le deuxième SOMMEPROD :

A la place de : =SOMME(SOMMEPROD((Feuil1!$B$5:$V$9=$A3)*1);SOMMEPROD(Feuil1!$B$16:$V$20=$A3)*1)

écrire : =SOMME(SOMMEPROD((Feuil1!$B$5:$V$9=$A3)*1);SOMMEPROD((Feuil1!$B$16:$V$20=$A3)*1))

@ bientôt

LouReeD

Bon je suis mauvais mais je ne comprend pas comment ca fonctionne...

Je vais essayer de trouver un code se raprochant... J'ai regarder sommeprod comment ca fonctionnait pourtant....

Merci de votre aide !

Bonsoir,

SOMMEPROD contrôle la présence de la valeur en A3 sur chaque cellule de la plage B5:V9. Pour chaque égalité vérifiée, la valeur renvoyée est VRAIE que je converti en 1 en multipliant par 1. Ensuite SOMMEPROD additionne chaque valeur.
SOMMEPROD((Feuil1!$B$5:$V$9=$A3)*1)

Je fais une simple SOMME de deux SOMMEPROD car tu as deux plages.

Cdlt,

Bonsoir,

en fait la plupart du temps, hors comptabilité, SOMMEPROD est détourné de sa fonction originelle...

Si on traduit la fonction : elle fait la somme des différents produits. SOMMEPROD est une fonction matricielle c'est à dire qu'elle peut travailler sur une plage de cellule et effectuer un produits sur ces lignes et à l'issue elle additionne le résultat de ces différents produits.

Ici on la détourne un peu en créant des "produits" issus de tests logique qui donne soit VRAI, soit FAUX, hors sous Excel, VRAI =1 et FAUX =0.
Donc si vous faites un test sur une plage A1:A10="LouReeD", pour chaque ligne de la plage, le test renverra soit VRAI =1 ou FAUX =0 en fonction de la présence de "LouReeD", ce qui peut donner s'il y a LouReeD inscrit une ligne sur deux le résultat suivant : 1,0,1,0,1,0,1,0,1,0

Ca c'est pour le test, mais SOMMEPROD est avant tout un produit qui sous entend qu'il faut une deuxième valeur pour pouvoir le faire sinon rien = 0 tous les produits seraient à 0 du coup la somme serait à 0, c'est pourquoi sur une conditions simple il faut mettre en deuxième valeur 1

SOMMEPROD( (A1:A10="LouReeD") * (1) ) ce qui donne :

1*1=1
0*1=0
1*1=1
0*1=0
1*1=1
0*1=0
1*1=1
0*1=0
1*1=1
0*1=0

Du coup la somme est égale à 5 !

Si vous aviez deux conditions à tester, il suffirait de modifier le (1) par ce nouveau test, par exemple le nombre de fois où il y a LouReeD ET une valeur en colonne B > 15 => =SOMMEPROD( (A1:A10="LouReeD") * ( B1:B10>15) )
Il en serait de même s'il y avait une troisième condition... etc... Chaque test vérifié = 1, chaque test non vérifié = 0, du coup il n'y aura que VRAI lorsque toutes les tests sont VRAI est VRAI =1 sous Excel... Et la fonction en fait la somme. NB.SI.ENS() fait de même est (je crois) moins lourde pour Excel en utilisation.

En espérant avoir été clair...

@ bientôt

LouReeD

Très clair LouReeD encore merci !

Je crois que NB.SI.ENS est plus rapide, mais malheureusement il me semble qu'elle ne fonctionne que sur une matrice unidimensionnelle non ? En tout cas c'est comme ça que je l'ai apprise :)

Dans l'attente de ton retour.

A peut-être ! je ne maitrise pas ! elle n'existait pas à l'origine... Mais c'était dans le contexte de mon exemple, qui n'est évidemment pas le reflet de la demande qui est elle sur plusieurs lignes ET colonnes !

Il me reste en tellement à apprendre ! J'arrive tout juste à sortir des formules matricielles avec PETITE.VALEUR, INDEX, EQUIV et Cie, mais je n'ai pas réussi sur l'exo de MFC de semaine lors de la diminution d'une valeur, bravo @ vous pour celle-là !

@ bientôt

LouReeD

Merci pour l'explication un peu plus claire tout en restant dans le flou un petit peu sans pratique

Comment pourrais-je adapter en fonction du numéro de semaine et l'ajout automatique de nom si celui si n'existe pas ?

Merci d'avance pour le temps que vous prenez a me répondre :)

Bonjour,

Pourquoi ne pas avoir tous les noms sur chaque feuille ?

Pour ce qui est des numéros de semaines, tu devrais C/C en valeur à chaque changement de semaine ou que tu refais ton planning.

De mémoire il me semble que je t'avais fait une macro non ? Dans ce cas il suffit que les formules soient copiées collées en valeur pour la semaine avant l'export du planning définitif.

Bonne soirée.

La macro fonctionne nickel oui, et c'est celle que je vais utiliser pour rajouter les noms sur chaque feuille ça c'est bon. Je l'ai adapté déjà.

C'est plus la semaine a automatiser car je ne serais pas le seul sur le document. Sachant que le fichier commence a être de plus en plus complet : gestion des agents, planning hebdomadaire, fiche de contact pour appel de personnel...

Sinon ça marche nickel avec la correction de LouReed !

Pour ce qui est de la semaine il te suffit, une fois que tu as fait tes affectations, de faire un copier coller de la colonne de la semaine de ton planning sur chacune des 3 feuilles, puis d'exporter ton classeur vers un nouveau classeur (il me semble que c'est ce que je t'avais fait), et enfin d'initialiser ton nouveau planning S12.

Le tout par macro.

Oui je l'avais adapté par le suite :

Private Sub Worksheet_Change(ByVal Target As Range)
Set r = Intersect(Target, Range("Tableau1[FONCTION]"))
If Not r Is Nothing Then
    For Each cell In r.Cells
        If cell.Value = "AS" Or cell.Value = "IDE" Then
            snom = Intersect(Range("Tableau1[IDENTITE]"), cell.EntireRow).Value
            With Sheets("CALCUL SECTO 5LITS").Range("LIT5TAB[IDENTITE]")
                If Application.CountIf(.Cells, snom) = 0 Then .Cells(.Rows.Count + 1, 1).Value = snom
            End With
            With Sheets("CALCUL SECTO 3LITS").Range("LIT3TAB[IDENTITE]")
                If Application.CountIf(.Cells, snom) = 0 Then .Cells(.Rows.Count + 1, 1).Value = snom
            End With
            With Sheets("CALCUL SECTO URG").Range("URGTAB[IDENTITE]")
                If Application.CountIf(.Cells, snom) = 0 Then .Cells(.Rows.Count + 1, 1).Value = snom
            End With
        End If
    Next cell
End If
End Sub

Ca marche nickel sans souci pour rajouter les noms.

Je vais voir comment essayer d'adapter à l'aide d'un bouton avec une boucle pour chaque semaine. Si j'étais seul sur le fichier ça irait mais vu que je ne suis pas seul je ne peux pas me permettre. Le but du fichier c'est qu'il reste en place par la suite pendant longtemps.

6agentnewv0-68.zip (454.80 Ko)

Bonjour tardivement,

Tu peux boucler ainsi par exemple :

Sub INITIALISER()
Dim FEUILLES As Variant
Dim FEUILLE As Variant
FEUILLES = Array("CALCUL SECTO 5LITS", "CALCUL SECTO 3LITS", "CALCUL SECTO URG")
For Each FEUILLE In FEUILLES
    With Worksheets(FEUILLE)
        Set SEMAINE = .Rows(1).Find(What:="S" & Worksheets("Feuil1").Range("D1").Value)
        .Range(.Cells(1, SEMAINE.Column), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, SEMAINE.Column)).COPY
        .Cells(1, SEMAINE.Column).PasteSpecial Paste:=xlPasteValues
    End With
Next
Worksheets("Feuil1").Range("D1").Value = Worksheets("Feuil1").Range("D1").Value + 1
End Sub

Cdlt,

Merci de réfléchir encore à cette heure ci, j'avais déjà créer un bouton pour changer de semaine auto avec enregistrement du planning sur un autre fichier excel mais bonne strategie de copier pour figer puis de faire suivre. Merci pour cette macro. Plus qu'a adapter...

Merci encore. Je verrais ca demain !

Rechercher des sujets similaires à "calculer occurence criteres"