Determination Suite

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 :rolleyes:
 

Pièces jointes

  • Suite.xlsx
    10.4 KB · Affichages: 40

Dranreb

XLDnaute Barbatruc
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:

CISCO

XLDnaute Barbatruc
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
 

Dranreb

XLDnaute Barbatruc
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)
 

F2T

XLDnaute Occasionnel
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

  • Suite2.xlsm
    16.9 KB · Affichages: 31

CISCO

XLDnaute Barbatruc
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 :rolleyes:


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:

Dranreb

XLDnaute Barbatruc
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)
 

F2T

XLDnaute Occasionnel
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.:confused:
 

Pièces jointes

  • Suite4.xlsm
    16.8 KB · Affichages: 25

F2T

XLDnaute Occasionnel
oui, les calculs sont bien en automatique...
De plus j'avais oublié une contrainte, il y a d'autres données qui s'intercalent entre les noms et la colonne de donnée...
 

Pièces jointes

  • Suite5.xlsm
    17.2 KB · Affichages: 29

Dranreb

XLDnaute Barbatruc
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
 

Statistiques des forums

Discussions
312 371
Messages
2 087 697
Membres
103 644
dernier inscrit
bsalah