Détection de la plus grande plage avec 3 valeurs.

jopont

XLDnaute Impliqué
Comptage des plus grande plage de trois types de valeurs

Bonjour,
Je cherche sur une à compter le plus grand nombre de valeurs consécutive.
Les valeurs peuvent être RF, P1 ou cellule vide.

J'ai réussi avec une fonction à compter les motifs RF consécutifs, mais si il y a des cellules vides ou des valeurs P1,elles ne s'ajoutent pas.




Comment résoudre ce problème

merci
 

Pièces jointes

  • essaimax_RFP1.xlsm
    17.9 KB · Affichages: 66
  • essaimax_RFP1.xlsm
    17.9 KB · Affichages: 69
  • essaimax_RFP1.xlsm
    17.9 KB · Affichages: 68

jopont

XLDnaute Impliqué
Re : Détection de la plus grande plage avec 3 valeurs.

non ce n'est pas ce que je souhaite, je n'avais saisi le set c.
pour lire chaque colonne il faut donc mettre set c = c(1,2) ?
Cela expliquerait-il le fait que j'ai toujours 0 en résultat de la fonction.

Pour faire le calcul sur les feuilles de janvier à décembre, est que je peux faire for t = 8 To t = 20, étant donné que la feuille janvier est en position 8 et décembre en 20 ?

merci pour votre aide
 

jopont

XLDnaute Impliqué
Re : Détection de la plus grande plage avec 3 valeurs.

Bonjour,
Dans le code ci-dessous, j'ai toujours pour résultat de la fonction periode 0.
le début de la lecture des cellules se fait en C4, c'est pourquoi j'ai mis lig = 4
Code:
range("C" & lig)
.
Les feuilles du classeur de janvier à décembre vont respectivement de 8 à 20, c'est pourquoi j'ai mis
Code:
For t = 8 To t = 20
Je n'arrive pas à trouver pourquoi la fonction détecte uniquement 0, pourtant j'ai bien des période avec du RF ou du P1 ou du "vide".
merci
Code:
Option Explicit

Function periode(Optional lig As Long = 4)
Application.Volatile 'selon le besoin…
Dim c As Range, t As Integer, Cpte As Integer
If lig < 4 Then lig = 4
For t = 8 To t = 20
  Set c = Sheets(t).Range("C" & lig)
  Do While IsDate(Sheets(t).Cells(1, c.Column))
    If c = "RF" Or c = "" Or c = "P1" Then
    Cpte = Cpte + 1
    
    Else
      If periode < Cpte Then periode = Cpte
      Cpte = 0
           End If
      If periode < Cpte Then periode = Cpte
    Set c = c(1, 2)
  Loop
Next
End Function
 

jopont

XLDnaute Impliqué
Re : Détection de la plus grande plage avec 3 valeurs.

J'ai vérifié :
Code:
Do While IsDate(Sheets(t).Cells(1, c.Column))
cela fonctionne bien.

Pourquoi j'ai toujours 0; alors que sur la feuille 8 j'ai bien du format de date en ligne 1.
J'ai également des donnée du type RF ou P1 ou "" en colonne C à partir de la ligne 4.

merci
 

Discussions similaires

Statistiques des forums

Discussions
312 845
Messages
2 092 764
Membres
105 529
dernier inscrit
StarExcel