Formule NB à condition que la donnée soit consécutive.

Fermé
Ibraoc Messages postés 2 Date d'inscription vendredi 10 avril 2020 Statut Membre Dernière intervention 10 avril 2020 - Modifié le 10 avril 2020 à 11:47
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 12 avril 2020 à 10:08
Bonjour,
https://mon-partage.fr/f/iESzWcrE/

j'ai un blocage sur un fichier excel de suivi des absences.
c'est un planning sur lequel les jours d'absence sont renseignés sur l'année entière. (colonne D à NE)
lorsqu'une personne est absente le jeudi 10.4.2020 nous renseignons un "1" dans la cellule de ce jour. )les cellules ou pas d'absence sont vides)

en fin d'année nous devons savoir le nombre d'arrêt dans les celulles (colonne NN à NY du tableau).
de 1 à 3 jours ,
puis de 4 à 8 jours
, puis de 9 à 21 jours
et enfin supérieurs à 21 jours.

Il me faudrait donc une formule qui me permettrait de savoir combien de fois le salarié a été absent de 1
 à 3 jours dans l'année et ainsi de suite.


exemple si Mr DUPONT a été absent 5 fois 2 jours dans l'année, il faudrait que le résultat de la formule pour les arrêts de 1 à 3 jours soit =5
puis s'il a été absent 2 fois 25 jours, le résultat pour les arrêt supérieurs à 21 jours doit être = 2...

ça à l'air difficile à réaliser mais je tente quand même...
d'avance merci.
A voir également:

5 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 418
10 avril 2020 à 11:26
bonjour
sans garantie de la solution, pour partager le classeur, ici par exemple:
http://mon-partage.fr
et revenez coller le lien créé sur le site
ajoutez si besoin quelques explications dans le fichier
crdlmnt
1
Raymond PENTIER Messages postés 58764 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 19 décembre 2024 17 256
12 avril 2020 à 00:26
Bonjour Vaucluse, bonjour Ibraoc.

"ça à l'air difficile à réaliser" : Tu as raison, je ne pense pas qu'on puisse trouver une solution sans VBA ; d'après moi seule une macro pourrait effectuer ces calculs.
0
Raymond PENTIER Messages postés 58764 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 19 décembre 2024 17 256
12 avril 2020 à 01:33



Si cela peut aider un de vous, voici une manipulation pour trouver la durée de chaque période d'absence :
https://cjoint.com/c/JDlxCsvLnrx
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 418
12 avril 2020 à 08:52
Bonjour
le plus simple pour éviter du VBA serait d'incrémenter dans votre tableau les jours successifs d'absence:
1 pour le premier jour, 2 pour le 2° 3 pur le 3° etc.. et recommencer à 1 pour chaque période
ainsi on peut compter le calcul des jours uniquement par les valeurs NUM et les groupes par NB.SI.
crdlmnt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
12 avril 2020 à 10:08
Bonjour à tous,

oui, en l'état, par formule ça risque d'être plutôt à rallonge.

Une fonction personnalisée à mettre dans un module standard :
Function nbArret(plage As Range)
    Dim datas, col As Long, result(1 To 1, 1 To 4) As Long, nb As Long, ok As Boolean
    datas = plage.Value
    'nb = datas(1, 1)
    For col = 1 To UBound(datas, 2)
        If datas(1, col) = 1 Then
            nb = nb + 1
        Else
            If nb > 0 Then ok = True
        End If
        ok = ok Or col = UBound(datas, 2)
        If ok And nb > 0 Then
            Select Case nb
                Case 1 To 3
                    result(1, 1) = result(1, 1) + 1
                Case 4 To 8
                    result(1, 2) = result(1, 2) + 1
                Case 9 To 21
                    result(1, 3) = result(1, 3) + 1
                Case Else
                    result(1, 4) = result(1, 4) + 1
            End Select
            nb = 0: ok = False
        End If
    Next col
    nbArret = result
End Function


Pour inscrire la formule sur la feuille :
- soit tu sélectionnes les 4 cellules résultats et :
=nbArret(D6:NE6)

Formule matricielle à valider avec Shift+Ctrl+Entrée
La formule doit s'entourer de { } si la validation est correcte.
Voir NN6:NQ6

- soit tu sélectionnes une seule cellule et tu choisis la colonne du résultat voulu (de 1 à 4) avec Index() et :
=INDEX(nbArret(D7:NE7);;1)

Ca fait 4 appels à la fonction au lieu d'un, mais vu ton fichier ça ne devrait pas être gênant.
https://www.cjoint.com/c/JDmifEIJNFV
eric
0