• Initiateur de la discussion Initiateur de la discussion F2T
  • 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 !

F2T

XLDnaute Occasionnel
Bonjour tous le monde,

je suis face à un probleme:

je vous voudrais déterminer le nombre de fois qu'une valeur positive intervient dans une colonne de données (colonne c dans le fichier joint) avec reinitialisation lorsqu'une valeur negative intervient dans la colonne données et la meme chose en sens inverse (pour les valeurs negative) .

Dans le fichier les données a analyser par la fonction sont dans la colonne C et le resultat de la fonction en H1 dans la colonne F les étapes de calcul pour comprendre la logique.

Je pense que cela est faisable via une fonction vba, mais c'est hors de mon niveau.
Si quelqu'un sait comment faire, ca me serait bien utile...

merci bcp 🙄
 

Pièces jointes

Bonsoir.
Les chiffres de la suite peuvent déjà être déterminés par formules.
En F5 :
Code:
=SIGNE(C5)
En F6, à propager sur 12 lignes :
Code:
=SI(SIGNE(C6)<>SIGNE(C5);SIGNE(C6);SIGNE(C6)+F5)
Ou bien, en F6, à propager sur 12 lignes :
Code:
=SI(C6*C5>0;F5;0)+SIGNE(C6)
 
Dernière édition:
Bonsoir

Tu peux faire avec
Code:
RECHERCHE(9^9;FREQUENCE((C5:C17>=0)*LIGNE(C5:C17);(C5:C17<0)*LIGNE(C5:C17)))
à valider en matriciel, donc avec les 3 touches Ctrl+maj+enter (d'après une proposition de Jocelyn).

@ plus
 
Aussi :
VB:
Function NbSgn(ByVal Plage As Range) As Long
Dim T(), S&, L&
If Plage.Rows.Count = 1 Then NbSgn = Sgn(Plage.Value): Exit Function
T = Plage.Value
For L = UBound(T, 1) To 1 Step -1
   S = Sgn(T(L, 1)): If S * NbSgn < 0 Then Exit Function
   NbSgn = NbSgn + S: Next L
End Function
En H1 :
Code:
=NbSgn(C5:C17)
En F5, à propager sur 13 lignes :
Code:
=NbSgn(C$5:C5)
 
Bonjour Dranreb et Cisco,

merci bcp pour votre aide.
Pour la formule : RECHERCHE(9^9;FREQUENCE((C5:C17>=0)*LIGNE(C5:C17);(C5:C17<0)*LIGNE(C5:C17))) ca marche que pour les valeurs positives.
La fonction NbSgn est exactement ce que je recherchais ....merci ...

Si je peux me permettre j'aurais une contrainte supplementaire si je peux me permettre ...
Serait il possible de d'avoir le resultat de NbSgn en fonction d'une autre colonne...
Un peut dur a expliquer... je joins le fichier avec les données....

et encore merci pour l'aide, grandement utile 🙂

Bonne journée a vous ...
 

Pièces jointes

Bonjour

Bonjour tous le monde,
je suis face à un probleme:
je vous voudrais déterminer le nombre de fois qu'une valeur positive intervient dans une colonne ...
merci bcp 🙄


Bonjour Dranreb et Cisco,
...
Pour la formule : RECHERCHE(9^9;FREQUENCE((C5:C17>=0)*LIGNE(C5:C17);(C5:C17<0)*LIGNE(C5:C17))) ca marche que pour les valeurs positives.
...
Bonne journée a vous ...

Logique, non, vu ta demande initiale, et l'exemple, et le résultat affiché dans H1 . Si ce n'est pas ce dont tu avais besoin, il fallait peut être être plus précis dès le début, non ?

Je ne donne pas de formule pour remplir la colonne F car, avec la formule matricielle proposée, il ni en a pas besoin.

@ plus
 
Dernière édition:
Bonjour.
VB:
Function NbSgnNom(ByVal PlgDon As Range, ByVal Nom As String) As Long
Dim T(), S&, L&
T = PlgDon.Value
For L = UBound(T, 1) To 1 Step -1
   If T(L, 1) = Nom Then
      S = Sgn(T(L, 2)): If S * NbSgnNom < 0 Then Exit Function
      NbSgnNom = NbSgnNom + S: End If: Next L
End Function
En K3, à propager sur 2 colonnes :
Code:
=NbSgnNom($B$7:$C$20;K$2)
 
oui , j'avais oublié une modif en L3 mais l'erreur #NAME? est toujours là.
Peut être faut il que j'active des references VBA?
Pour infos mon excel est en anglais mais je ne pense pas que le pb vienne de la, vu que la fonction est en anglais.😕
 

Pièces jointes

Non, mais, si vous donnez au compte-goutte les condition du problème, ça ne va pas. Ça sera ma dernière proposition. Après, adaptez vous même.
VB:
Function NbSgnNom(ByVal PlgDon As Range, ByVal Nom As String) As Long
Dim T(), S&, L&, CF&
CF = PlgDon.Columns.Count
T = PlgDon.Value
For L = UBound(T, 1) To 1 Step -1
   If T(L, 1) = Nom Then
      S = Sgn(T(L, CF)): If S * NbSgnNom < 0 Then Exit Function
      NbSgnNom = NbSgnNom + S: End If: Next L
End Function
 
- 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

Réponses
15
Affichages
771
Réponses
16
Affichages
393
Retour