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.