Formule filtrée

Bonjour à tous,

Sur mon Onglet Hebdo, j'aimerai bien qu'à partir de la ligne 371 pour chaque jour de la semaine écrire une formule qui me ramène le nombre de cellules non vide si la valeur filtrée correspond soit à un lundi, mardi etc.... jusqu'au dimanche.

J'avais dans un premier temps calculé pour toutes les ligne de mon calendrier avec une formule du type

=NBVAL(C2:AI2) 

mais le critère de fin AI2 change pour chaque tableau généré et je voulais rendre ca dynamique mais sans grand résultats.

A partir de la ligne 371 je voulais récupérer les données précédemment calculer lorsque mon tableau est filtré avec une formule du type

=SOUS.TOTAL(3;C339:AH339)

.Mais impossible de définir la bonne plage. Deplus je voulais ajouter la notion du jour dans mon filtre.

Pour faire claire ma formule pour la case lundi devrai être

= valeur du nombre de cellule non vide de la partie filtrée si le jour de la ligne correspond à un lundi

J'espères que mes explications sont compréhensibles.

Je reste à votre disposition en cas de questions, merci d'avance pour vos idées ou vos solutions.

Si vous avez des idées pour rédiger quelques chose correspondant à ceci.

Bonjour,

une manière de faire

P.

patrick1957 a écrit :

Bonjour,

une manière de faire

P.

Merci, moi qui espérai que quelqu'un avait une solution ...

Bonjour,

Si j'ai compris la question...

Cdlt.

Merci jean-Eric,

Merci pour ton tableau mais ce n'est pas tous à fait ca que je voulais. Je voulais juste la somme globale du nombre de personne travaillant le lundi. Tu me ramène le nombre de personne au poste pour le jour voulue.

mais on approche.

[Edit]

De plus lorsque je change de semaine la premiere fois, j'ai le débogueur qui s'active !!! et les comptes dans le tableau ne reviennent pas à zero. Par contre apres avoir arreter le debogueur le filtrage est bon.

Si tu as d'autre idées je suis preneur

Si tu as d'autres questions pour éclaircir ta lanterne fait moi signe j'essaierai d’être plus claire.

Merci,

Je me demandais si on pouvais pas utiliser mon calcule de N° semaine dans la colonne B pour le rafraîchissement du tableau


Pour information

Eriiic m'avait proposer ceci

=NBVAL(DECALER($C$1:$AA$1;EQUIV(SOUS.TOTAL(1;$A$2:$A$366)+LIGNE()-371;$A$2:$A$366;0);))

Mais ca bug sur les semaines de début et de fin d'année (01/01 et 31/12) qui ne sont pas des semaines entières

RE,

Un nouvel essai !...

Cdlt.

edlede a écrit :

Merci, moi qui espérai que quelqu'un avait une solution ...

ce qui veut dire ?

Bonsoir patrick,

patrick1957 a écrit :
edlede a écrit :

Merci, moi qui espérai que quelqu'un avait une solution ...

ce qui veut dire ?

Que j'ai trouver que la mention "zéro" dans mes cases soit j'ai du louper quelques choses on dirai... tu avais fait un code?

Cordialement,

Bonsoir Jean-Eric,

c'est simplement parfait, du coup j'ai prépares mon fichier pour la seconde formules, une formule peux en cacher une autre lol,

En fait j'aimerai sur la colonne d'a coté, calculer les personnes réellement en poste (Soit le total-les abs) du coup j'ai changé un peu mon onglet WsPrm pour avoir une liste de poste séparée des repos. le nom de la liste des postes utilisé sera inscrite en WsPrm.[D1] comme dans l'exemple fourni.( ca devrai servir pour faire un range.value)

Je te joint le fichier,

Par contre ayant séparé ma liste en deux, je voulais faire une fusion des deux listes vers un nom unique du coup j'ai essayer un nom du style SerList1 : "=Post1 & AbList1" dans une listebox Mais ça ne marche pas as tu une idée pour regrouper ses deux listes.

Si tu peux jeter un oeil,

Merci

Bonjour,

Poster sur différents forums sans le signaler avec les liens est le meilleur moyen pour qu'on se désintéresse de tes futures questions.

Si tu as peut-être déjà la réponse ailleurs depuis 3h, autant qu'on consacre notre temps à un autre demandeur. Logique...

eric

Bonjour,

la remarque de Eric est pertinente. Et je me suis demandé si j'allais donner une suite.

J'ai cependant modifié le fichier avec ta dernière question. Tu peux par la suite reproduire la construction des plages nommées pour poursuivre ton projet.

Cordialement.

edlede a écrit :

Bonsoir patrick,

patrick1957 a écrit :
edlede a écrit :

Merci, moi qui espérai que quelqu'un avait une solution ...

ce qui veut dire ?

Que j'ai trouver que la mention "zéro" dans mes cases soit j'ai du louper quelques choses on dirai... tu avais fait un code?

Cordialement,

Oui dans module1 que j'ai "rattaché" à ton code de sélection des semaines

Que j'ai trouver que la mention "zéro" dans mes cases soit j'ai du louper quelques choses on dirai... tu avais fait un code?

Cordialement

Oui dans module1 que j'ai "rattaché" à ton code de sélection des semaines

rho purée, je l'ai pas vu du tous, je regarde ca quand même, et merci du coup pour le temps passé dessus

Jean-Eric a écrit :

Bonjour,

la remarque de Eric est pertinente. Et je me suis demandé si j'allais donner une suite.

J'ai cependant modifié le fichier avec ta dernière question. Tu peux par la suite reproduire la construction des plages nommées pour poursuivre ton projet.

Cordialement.

Bonjour,

Je viens de regarder seulement ton code et je ne serai pas contre quelques explications si possible

ainsi que pour la case check

J'ai également vu un petit bug que j'ai pas réussi à comprendre : lorsque je saisie un agent dans la colonne Rh1 il est comptabilisé avec les agente en poste alors qu'il devrai être en absent. Si tu as une idées ou des explications.

J'ai pas encore testé mais j'ai l'impression que tu as fixé les absences à partir de la colonne Y? si c'est le cas ca va me poser un problème sachant que le nombre de poste varie pour chaque utilisateur. Pour cela, j'ai défini deux listes, une liste Post ( nom de la liste utiliser retranscrit En D2 de WsPrm) et une liste d'AbList. le numero des listes s'incrémenterons d'après le choix sélectionné dans la Combobox. Si par commodité tu préfères utilisé la liste absence je transcrirai cette donnée en D2 plutôt que le nom de la liste du poste.

En tous cas superbe travaille

Merci,

RE

Pour la plage des absents, modifier ainsi (parties surlignées) :

ActiveWorkbook.Names.Add _
            Name:=ActiveSheet.Name & "!d.absents", _
            RefersTo:=rng.Offset(1, 24).Resize(rng.Rows.Count - 1, rng.Columns.Count - 26) _
                      .SpecialCells(xlCellTypeVisible)

C'est à toi de déterminer les plages ! Je t'ai montré comment les nommer [ALT F11, voir module wshebdo (hebdo)].

Tu peux virer la partie check. J'ai certainement voulu vérifier quelque chose, mais c'est inutile.

Pour le reste, je ne me suis amusé à comprendre ton fichier.

Cdlt.

ActiveWorkbook.Names.Add _

Name:=ActiveSheet.Name & "!d.absents", _

RefersTo:=rng.Offset(1, 24).Resize(rng.Rows.Count - 1, rng.Columns.Count - 26) _

.SpecialCells(xlCellTypeVisible)

Parfait ca corrige effectivement le problème,

si j'ai bien compris il faut que je fasse un compte de ma liste que j'ajoute 1 pour le

rng.Offset(1, 24)

et un +2 pour

rng.Columns.Count - 26

Voilà C'est parfait voici la dernière version du code qui rend ça dynamique.

Private Sub Comboweek_Change()
Dim ns As Long
Dim rng As Range
Dim i, j As Integer
On Error Resume Next
NbColTot
NbColAg
i = NbColTot()
j = NbColAg()

Application.ScreenUpdating = False
    ns = Comboweek.ListIndex + [FW]
    Wshebdo.Range("calendw").AutoFilter Field:=2, Criteria1:=ns
    Set rng = Me.AutoFilter.Range

    ActiveWorkbook.Names.Add _
            Name:=ActiveSheet.Name & "!d.dates", _
            RefersTo:=rng.Offset(1, 0).Resize(rng.Rows.Count - 1, 1) _
                      .SpecialCells(xlCellTypeVisible)

    ActiveWorkbook.Names.Add _
            Name:=ActiveSheet.Name & "!d.données", _
            RefersTo:=rng.Offset(1, 2).Resize(rng.Rows.Count - 1, i) _
                      .SpecialCells(xlCellTypeVisible)

    ActiveWorkbook.Names.Add _
            Name:=ActiveSheet.Name & "!d.absents", _
            RefersTo:=rng.Offset(1, 2).Resize(rng.Rows.Count - 1, j) _
                      .SpecialCells(xlCellTypeVisible)
    Set rng = Nothing
End Sub

avec en module

Function NbColTot()
Dim a, b
Dim n, m, p

a = WsPrm.Range("NomPost")
b = WsPrm.Range("Abs")
n = Range(a).Rows.Count
m = Range(b).Rows.Count
NbColTot = (n + m)
End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function NbColAg()
Dim a

a = WsPrm.Range("NomPost")
NbColAg = Range(a).Rows.Count
End Function

Un grand merci pour les informations et pour le temps passé dessus.

Rechercher des sujets similaires à "formule filtree"