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

Ibraoc Messages postés 2 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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.

5 réponses

  1. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
  2. Raymond PENTIER Messages postés 58219 Date d'inscription   Statut Contributeur Dernière intervention   17 485
     
    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
  3. Raymond PENTIER Messages postés 58219 Date d'inscription   Statut Contributeur Dernière intervention   17 485
     


    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
  4. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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