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

Softmama

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

Bonjour,

La réponse est donc 11 dans ton exemple. Cette fonction personnalisée permet de le vérifier (si c'est bien ce que tu cherches à déterminer) :
VB:
Function compte()
Application.Volatile 'selon le besoin…
Dim c As Range, t As Integer, Cpte As Integer
For t = 1 To Sheets.Count
  Set c = Sheets(t).[A2]
  Do While c.Column < 32
    If c = "RF" Or c = "" Or c = "P1" Then
      Cpte = Cpte + 1
    Else
      If compte < Cpte Then compte = Cpte
      Cpte = 0
    End If
    Set c = c(1, 2)
  Loop
Next
End Function

cf. fichier joint
 

Pièces jointes

  • essaimax_RFP1.xlsm
    18.4 KB · Affichages: 56
  • essaimax_RFP1.xlsm
    18.4 KB · Affichages: 56
  • essaimax_RFP1.xlsm
    18.4 KB · Affichages: 58

jopont

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

Si je change les valeurs sur la ligne, la fonction se met en erreur #NOM.
Comment résoudre ce problème ?

Comment passer le numéro de ligne en paramètre, afin de pouvoir exécuter la fonction sur plusieurs lignes ?

Merci
 

Softmama

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

Bonjour,

J'ai modifié le fichier en conséquence, pour y ajouter un paramètre de n° de ligne :
VB:
Option Explicit

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

Vois ce que ça donne.
 

Pièces jointes

  • Xl0000004.xls
    47 KB · Affichages: 53
  • Xl0000004.xls
    47 KB · Affichages: 51
  • Xl0000004.xls
    47 KB · Affichages: 44

jopont

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

Ok, merci pour le paramètre de ligne.
Mais pourquoi j'ai toujours l'erreur #Noms lorsque que je tape dans une cellule = compte(3)
Les macro sont activées.
On dirait que la fonction n'apparaît pas dans la liste.

Merci
 

Softmama

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

Re,

heu, je n'ai pas de #Noms de mon côté et ne vois pas ce qui peut générer ce problème dans le fichier que je t'ai posté ! Tu rencontres ce souci dans un autre fichier que tu as adapté ou dans celui que j'ai posté ??
 

jopont

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

Oups,
Je croyais que les macros étaient activées dans excel de mon portable, ce qui n'était pas le cas.
Tout fonctionne bien à présent.
Dernière petite demande, si je voulais faire fonctionner cette fonction dans un userform avec choix de la ligne, comment faire ?
La ligne correspondrait à des noms dans une liste déroulante.
merci
 

Pièces jointes

  • Xl0000004.xlsm
    20.3 KB · Affichages: 45

jopont

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

Bonjour, dans le code ci-dessous, comment dire qu'il prenne en compte uniquement quand il trouve du format de date ou lieu du "" dans la ligne 1.
Do While Sheets(t).Cells(1, c.Column) <> ""
merci
 

jopont

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

bonjour,
dans le code ci-dessous, la fonction periode renvoie toujours 0, pourquoi ?
merci

Option Explicit

Function periode(Optional lig As Long = 2)
Application.Volatile 'selon le besoin…
If lig = 0 Then lig = 4
Dim c As Range, t As Integer, Cpte As Integer
For t = 8 To t = 19
Set c = Sheets(t).Range("C" & lig)
Do While Sheets(t).Cells(1, c.Column).NumberFormatLocal = "jjj jj"
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, 3)
Loop
Next
End Function
 

Discussions similaires

Statistiques des forums

Discussions
312 322
Messages
2 087 286
Membres
103 507
dernier inscrit
tapis23