Mesurer la régularité d'une croissance sur une plage incomplète

Bonjour à tous,

Dans l'exemple joint, je cherche à déterminer si une plage de nombres (colonnes B à G) est croissante sans interruption.

Si la valeur de la colonne G est supérieurs à celle de la colonne B, les valeurs sont globalement croissantes mais s'il y a eu ne serait-ce qu'une baisse, je veux renvoyer "NON" dans le test final (colonne I).

- Mon problème : ma formule ne fonctionne pas s'il y a des trous en début ou fin de ligne (exemples 3 et 4).

- Bonus 1 : je voudrais pouvoir déterminer, si les valeurs sont croissantes, combien il y a eu de baisses dans la série (colonne J). Dans l'exemple 1, la réponse serait 2.

- Bonus 2 : ma "formule" (ET(B3<C3;C3<D3;D3<E3;E3<F3;F3<G3)) est vraiment bourrin et je suis sûr qu'il y a plus intelligent pour obtenir le même résultat.

Je précise que je travaille avec Excel 2013.

Bien à vous,

Mathieu

Bonjour,

Si VBA vous est permis, testez la fonction ci-dessous.

  • L'indice C dans =Progression(B9:G9;"C") donne la valeur Oui ou Non.
  • L'indice N dans =Progression(B9:G9;"N") donne le nombre de baisses si > 0.

La fonction est du type volatile, c'est à dire qu'elle est recalculée si une valeur est modifiée dans le fichier. Cela peut être pénalisant pour le temps de réponse. Dans ce cas, il faut neutraliser la ligne avec le caractère ' et recalculer l'aire des formules.

Option Explicit

Function Progression(ByVal AireProgression As Range, ByVal TypeResultat As String) As Variant

Dim I As Integer, ValeurEnCours As Integer, ValeurDebut As Integer, ValeurFin As Integer, Resultat As Integer

    Progression = ""
    Resultat = 0

    Application.Volatile ' Neutraliser si pas de nécessité

    ValeurDebut = CInt(AireProgression(1))
    ValeurEnCours = ValeurDebut
    ValeurFin = CInt(AireProgression(AireProgression.Count))

    For I = 2 To AireProgression.Count
        With AireProgression(I)
             Debug.Print CInt(.Value) & ", " & ValeurEnCours
             If CInt(.Value) < ValeurEnCours Then Resultat = Resultat + 1
             ValeurEnCours = CInt(.Value)
        End With
    Next I

    Select Case TypeResultat
           Case "N"
                 If Resultat > 0 Then Progression = Resultat
           Case "C"
                If Resultat > 0 Then
                   Progression = "Non"
                Else
                   If ValeurFin > ValeurDebut Then
                      Progression = "Oui"
                   Else
                      Progression = "Non"
                   End If
                End If
    End Select

End Function
capture

Eh bien cela fonctionne parfaitement.

Merci beaucoup!

Rechercher des sujets similaires à "mesurer regularite croissance plage incomplete"