Compter positif négatif

Bonjour à tous,

Quelqu'un aurait il une formule pour calculer le nombre de changement de signe dans une colonne donnée avec pour difficulté supplémentaire : on ne tient pas compte des changements qui seraient générés par une valeur inférieure ( en valeur absolue ) à 1000

Dis comme ça ce n'est pas très clair mais avec la pièce jointe vous comprendrez directement !

Je pensais trouver rapidement mais non ça ne vient pas !

Merci !!

Bonne journée,

Vbabeginner

25test.xlsx (10.40 Ko)

Bonjour,

un essai :

=SOMMEPROD((ABS(C9:C24)>=1000)*(SIGNE(C9:C24)<>SIGNE(C10:C25)))

@ + +

Bonjour,

Je ne vois que 3 avec les conditions fixées. Teste cette formule suivante :

=SOMMEPROD((SIGNE($C$9:$C$25)<>SIGNE($C$10:$C$26))*(ABS($C$9:$C$25)<=ABS($C$10:$C$26)))

Bonjour R@chid,

Bonjour le Forum,

Excellent R@chid ! Je ne connaissais pas SIGNE()! Je retiendrai pour la prochaine fois !

Un très grand merci à toi !

Bonne journée,

Vbabeginner


Bonjour Raja,

Ta formule indique en effet 3 ! Pourtant le résultat est 4. Un pour chaque oui. J'ai vérifié et je pense que l'exemple est correct.

La formule de R@chid me donne également le résultat que j'attendfais de 4.

Merci à toi en tout cas !

Cordialement,

Vbabeginner

Re,

@ R@chid : J'ai testé la formule dans d'autres circonstances et malheureusment elle ne me donne pas le résultat desirée. TU peux le voir ci-joint.

La logique est la suivante :

Pour une cellule donnée je regarde la cellule directement au dessus. Si elle l'abs() de cette cellule est < 1000 alors je n'en tient pas compte ( on ne tient pas compte de 0 non plus ) pour faire la comparaison des signes et je passé à la cellule du dessus. Si l'abs() de cette nouvelle cellule est > à 1000 alors je compare le signe de la cellule donnée et cette dernière cellule. Si different alors on a 1.

Est-ce plus clair ?

Cordialement,

Vbabeginner

6test.xlsx (10.76 Ko)

Re,

ok désolé, voir PJ si cela te convient

8vbabeginner-2.xlsx (11.16 Ko)

Bonjour,

Pas tout à fait ! Le premier oui que j'ai indiqué est bien correct !

On regarde -200 000 ... Il n'y a pas de changement de signe avec le -5 mais comme abs( -5) est < à 1000 alors je vais regarder la cellule plus haut : 200 000. On compare -200 000 et 200 000 et là il y a bien un changement de signe. => on compte 1.

Tu vois ce que je veux dire ? Difficile à expliquer avec des mots

Merci !!

Re,

oui je vois,

je vais voir comment pourrait-on remédier cela

c'est pas facile

Merci ! Oui je sais !! J'ai eu pas mal de difficultés en charchant une formule !

Merci de te pencher là dessus. SI ça ne va pas je verrai avec VBA ça doit être un peu plus facile.

Merci

Vbabeginner

Bonjour à tous,

Je ne suis pas encore très bien réveillé, mais cela me paraît un peu compliqué d'aller chercher un changement de signes entre deux valeurs non consécutives avec des fonctions classiques...

Une fonction personnalisée ?

Function NBCHANGESIGNE(plage As Range, Optional cdvalabs As Double = 0) As Long
    Dim cd%, chnt&, i&, n&
    Application.Volatile
    If plage.Columns.Count > plage.Rows.Count Then
        n = plage.Columns.Count
        Set plage = plage.Resize(1)
    Else
        n = plage.Rows.Count
        Set plage = plage.Resize(, 1)
    End If
    With plage
        Do While cd = 0
            i = i + 1
            If Abs(.Cells(i)) > cdvalabs Then cd = -Sgn(.Cells(i))
        Loop
        For i = i + 1 To n
            If Abs(.Cells(i)) > cdvalabs Then
                If Sgn(.Cells(i)) = cd Then
                    chnt = chnt + 1: cd = -cd
                End If
            End If
        Next i
    End With
    NBCHANGESIGNE = chnt
End Function

On fournit la plage à tester à la fonction. Une plage d'une ligne ou d'une colonne est prise en compte. Si la plage fait plusieurs lignes et plusieurs colonnes, la fonction ne prendra en compte que la première ligne si le nombre de colonnes est supérieur au nombre de lignes, sinon la première colonne.

La condition de valeur absolue à considérer pour les valeurs de la plage est fournie sous forme numérique. L'argument est optionnel, s'il est omis, sa valeur par défaut sera 0.

Cordialement.

Bonjour,

@Mferrand : vu le résultat crois moi tu ne dois pas te réveiller d'avantage: tu es bien opérationnel !

Un très grand merci ! Ca mache impéccablement!

Si d'aventure je n'ai pas de formule ta fonction fera très très bien l'affaire !

@ Rachid : ne te donne donc pas trop trop de mal si une formule n'est pas facile ! J'ai déjà un sauveur !

Merci à tous pour vous être penchés sur la question !

Cordialement,

Vbabeginner

VBABEGINNER a écrit :

Bonjour Raja,

Ta formule indique en effet 3 ! Pourtant le résultat est 4. Un pour chaque oui. J'ai vérifié et je pense que l'exemple est correct.

La formule de R@chid me donne également le résultat que j'attendfais de 4.

Vbabeginner

Re,

Veux-tu retourner ton fichier initial avec 4 oui et à coté ton raisonnement ? J'ai une logique assez basique.

Re,

j'aime pas donner des solutions avec des colonnes intermédiaires mais je suis censé le faire.

je vais essayer de trouver une autre solution en une seule formule.

Voir PJ

33vbabeginner-4.xlsx (11.91 Ko)

@ + +

Salut ,

C'est super !! Très fort !!! Merci R@chid ! Moi avec une (ou plusieurs ) colonne intermédiaires cela me convient tout à fait !

Un grand merci !

Ps : je sens que tu vas relever le défi avec une formule unique sans intermédiaire

Merci !!

Vbabeginner

Rechercher des sujets similaires à "compter positif negatif"