XL pour MAC Afficher la somme de valeurs uniquement dans des cellules adjacentes en lignes

  • Initiateur de la discussion Initiateur de la discussion FRANKY92
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

FRANKY92

XLDnaute Nouveau
Bonjour les champions
J'ai un tableau dans lequel sur chaque ligne figure un nom de salarié,ses jours de congés,de RTT, de récupération, de maladie, ou autre.
Je veux savoir lesquels de ces salariés ont bénéficié d'un minimum de 10 jours de congés CONSÉCUTIFS, en excluant ceux qui peuvent être indiqués ça et là.
Peut-on obtenir de sous totaux des lignes ?
Si mon explication ne suffit pas, me demander un tableau type.
Et ça urge .....merci d'avance
 
Merci pour la réactivité
Capture d’écran 2021-05-17 à 17.19.20.png
 
Une solution par fonction VBA dans le fichier joint :
VB:
Function NbJoursConsecutifs(Plage As Range, N%)
Dim critere$, pc%, i%, test As Byte, deb%, j%
critere = "#CP#REP#RTT#" 'à adapter
pc = Plage.Count
For i = 1 To pc
    test = InStr(critere, "#" & UCase(Plage(i)) & "#")
    If deb = 0 And test Then deb = i
    If deb And (test = 0 Or i = pc) Then j = i + Sgn(test) - deb: deb = 0: If j >= N Then NbJoursConsecutifs = NbJoursConsecutifs + j
Next
If IsEmpty(NbJoursConsecutifs) Then NbJoursConsecutifs = "" 'masque les valeurs zéro
End Function
Le code doit être placé impérativement dans un module standard (Module1).

Formule en AT3 à tirer vers le bas =NbJoursConsecutifs(B3:AS3;10)

Le nombre (paramètre) 10 peut être modifié.

Edit : j'ai corrigé le code (calcul de j) comme indiqué au post #19.
 

Pièces jointes

Dernière édition:
Bonjour @ tous,
tu peux calculer la plus grande série des jours consécutifs par cette formule matricielle en AT3 :
VB:
=MAX(FREQUENCE(SI(B3:AS3="CP";TRANSPOSE(LIGNE(INDIRECT("1:"&COLONNES(B3:AS3)))));SI(B3:AS3<>"CP";TRANSPOSE(LIGNE(INDIRECT("1:"&COLONNES(B3:AS3)))))))
@ valider par Ctrl+Maj+Entrée
@ tirer vers le bas

Cordialement
 
Bonjour FRANKY92, R@chid, le forum,

Bien sûr si l'on veut compter uniquement les congés payés CP on utilisera ce fichier (2) :
VB:
Function NbJoursConsecutifs(Plage As Range, N%)
Dim critere$, pc%, i%, test As Boolean, deb%, j%
critere = "CP" 'à adapter
pc = Plage.Count
For i = 1 To pc
    test = UCase(Plage(i)) = critere
    If deb = 0 And test Then deb = i
    If deb And (Not test Or i = pc) Then j = i - test - deb: deb = 0: If j >= N Then NbJoursConsecutifs = NbJoursConsecutifs + j
Next
If IsEmpty(NbJoursConsecutifs) Then NbJoursConsecutifs = "" 'masque les valeurs zéro
End Function
Edit : modifié le calcul de j.

A+
 

Pièces jointes

Dernière édition:
Bonjour JOB75, Rachid, Francky92, le forum

Merci à Rachid et Job pour les formules et fonctions

@job75
Je n'ai pas tout compris à la rédaction pour cette fonction. En la modifiant un peu, de manière peut-être un peu plus accessible -), ça me parait bien fonctionner aussi.

Et pour les deux lignes à minima :
- critere = "#CP#REP#RTT#" 'à adapter
- test = InStr(critere, "#" & UCase(Plage(i)) & "#")

J'espère que ta fonction personnalisée sera intégrée dans le répertoire des "fonctions personnalisées".
Car je n'avais jamais vu auparavant cette syntaxe et qu'elles sont utiles et ...formidables.
Une très belle fonction, merci à toi.

Bonne journée à tous
zebanx

VB:
Function NbJC(Plage As Range, N%)
Dim critere$, pc%, i%, test As Byte, deb%, j%
critere = "#CP#REP#RTT#" 'à adapter
pc = Plage.Count
a = 0
For i = 1 To pc
    test = InStr(critere, "#" & UCase(Plage(i)) & "#")
   '--1 : Compte si N jours consécutifs pour les critères
    If test = 0 Then
       If a >= N Then NbJC = IIf(NbJC = 0, a, NbJC + a)
    a = 0
    End If
    If test > 0 Then a = a + 1
Next
If IsEmpty(NbJC) Then NbJC = "" 'masque les valeurs zéro
End Function
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour