Compter le nombre de "X" qui se suivent...

Guyse du 22

XLDnaute Nouveau
Bonjour à tous,

Cela fait plusieurs semaines que je planche sur le sujet sans trouver la solution. Je pense que le problème réside dans les termes que j'utilise. En effet, je parlait dans un précédent post d'écarts et de séries. N'ayant eu aucune réponse (hormis excel-lent). Je repose mon problème avec d'autre termes. En effet je souhaite trouver :
- le nombre de "A" maximum qui se suivent dans la colonne 1
- le nombre minimal de "A" qui se suivent dans la colonne 1
- le nombre de fois maximum qui se suivent sans la présence de "A"
- le nombre de fois minimum qui se suivent sans la présence de "A"

Je vous joint un fichier .xls d'exemple pour mieux comprendre.

Je souhaite créer les formules qui me permettent d'obtenir ces résultats en fin de tableau.

L'objectif est de remplacer les valeurs "en gris et italique" que j'ai taper à la main. Je dupliquerai ensuite ces formules dans les autres colonnes.

Je souhaiterais obtenir les résultats par l'intermédiaire de formules mais pas de macros sauf si il n'y a pas le choix (car je ne connais pas du tout les macros).

Comptant sur votre participation.

Cordialement
 

Pièces jointes

  • Test ecarts et series.xls
    21.5 KB · Affichages: 136
  • Test ecarts et series.xls
    21.5 KB · Affichages: 139
  • Test ecarts et series.xls
    21.5 KB · Affichages: 144

tbft

XLDnaute Accro
Re : Compter le nombre de "X" qui se suivent...

Réponse rapide à ta première question (entre deux coups de tél)

essai en modifiant la ligne else comme suit

tiens moi au courant je regarde ta deuxième question


Option Explicit
Option Base 1

Function nb_maxi(valeur As String, tableau_recherche) As Integer
Dim i As Integer, j As Integer, nb As Integer, maxi As Integer

' repérage du nombre de ligne
nb = UBound(tableau_recherche.Value, 1)
'mise à zéro des maximetres
j = 0
maxi=0

For i = 1 To nb
If tableau_recherche(i, 1).Value = valeur Then
' quand le test si dessus est bon on incrémente la valeur intermédiaire "j"
j = j + 1
If j > maxi Then maxi = j
Elseif not(tableau_recherche(i, 1).Value=vbnullstring) then
j = 0
End If
Next i
nb_maxi = maxi
End Function
 

Guyse du 22

XLDnaute Nouveau
Re : Compter le nombre de "X" qui se suivent...

re:

Regarde les formules de B25 à E25, tu verras une évolution des plages, 1 puis 2 puis 3 puis 4 colonnes

Bonjour Wilfried 42,
Ok j'ai bien saisie. Cependant, je remarque que C est la suite de B...
Ce dont j'ai besoin c'est d'étendre à 5 colonnes et que la recherche de A se fasse par lignes. Pour info chaque lettre ne peut être présente qu'une fois par ligne (contrairement à ton tableau ou A existe plusieurs fois sur une même lignes), jamais 2 A sur la ligne 1. Je m'explique :
ligne 1 :| A | B | C | D | E |
ligne 2 :| C | C | D | A | F |
ligne 3 :| vide | vide | vide | vide | vide |
ligne 4 :| J | K | A | F | E |
ligne 5 :| G | B | C | D | E |

2ème chose : il faut que tes formules VBA ignore les lignes vides.

Alors je voudrais par exemple que ta formule MAX(gw_freq = A) recherche A par ligne et sur les 5 colonne pour que le résultat de l'exemple ci dessus soit pour A : 3 (ligne 1, ligne 2 et ligne 4 car ligne 3 vide ignorée). Toujours dans l'exemple ci dessus, ta formule MAX(gw_freq = "><") pour A donnerait le résultat suivant : 1 (ligne 5 et pas ligne 3 car ignorée car vide).

Comme tu le vois, cela se corse un peu. Je serais super content si tu trouvais une solution. En effet, avec une solution pour ce problème, j'en aurais fini avec ma gestion d'Ecarts et de Séries. Cependant, j'ai d'autres sujet à aborder très prochainement.

En attendant de tes nouvelles pour mes 2 demandes additionnelles, je continue à chercher de mon coté. Je vous tiens au courant si je trouve quelque chose.

Merci encore.
 

wilfried_42

XLDnaute Barbatruc
Re : Compter le nombre de "X" qui se suivent...

re:

voici une évolution de la fonction précédente avec transposition du travail par ligne, tu as le choix de travailler soit par colonne, soit par ligne
Code:
=Max(Gw_Freq(Maplage;"A";;Vrai)
Vrai travail par ligne, à défaut, travail par colonne
 

Pièces jointes

  • ecarts et series3.xls
    58 KB · Affichages: 63

job75

XLDnaute Barbatruc
Re : Compter le nombre de "X" qui se suivent...

Bonjour Guyse, le fil, le forum,

Ci-joint une solution qui peut vous intéresser.

La macro est dans le code de la feuille (clic droit sur l'onglet et visualiser le code).

Les résultats sont calculés quand l'une des cellule B24 ou B25 est renseignée.

A+
 

Pièces jointes

  • Test ecarts et series.xls
    29.5 KB · Affichages: 60
  • Test ecarts et series.xls
    29.5 KB · Affichages: 63
  • Test ecarts et series.xls
    29.5 KB · Affichages: 64

Guyse du 22

XLDnaute Nouveau
Re : Compter le nombre de "X" qui se suivent...

Réponse rapide à ta première question (entre deux coups de tél)

essai en modifiant la ligne else comme suit

tiens moi au courant je regarde ta deuxième question

Ok, super pour la formule nb_maxi, cela fonctionne (vide ignoré). J'ai tenté de de faire la modification pour nb_maxi_sans mais cela ne fonctionne pas (elle n'ignore pas les cases vides). Voici la formule VBA que j'ai modifié, peux tu me dire ce qui ne va pas :

Function nb_maxi_sans(valeur As String, tableau_recherche) As Integer
Dim i As Integer, j As Integer, nb As Integer, maxi As Integer
' repérage du nombre de ligne
nb = UBound(tableau_recherche.Value, 1)
'mise à zéro des maximetres
j = 0
maxi = 0

For i = 1 To nb
If tableau_recherche(i, 1).Value <> valeur Then
' quand le test si dessus est bon on incrémente la valeur intermédiaire "j"
j = j + 1
If j > maxi Then maxi = j
ElseIf Not (tableau_recherche(i, 1).Value = vbNullString) Then
j = 0
End If
Next i
nb_maxi_sans = maxi
End Function

Tiens moi au courant pour la deuxième question.
 

Guyse du 22

XLDnaute Nouveau
Re : Compter le nombre de "X" qui se suivent...

Bonjour Guyse, le fil, le forum,

Ci-joint une solution qui peut vous intéresser.

A+

Je comprends le principe. mais comme je précisait précédemment A n'existera qu'une fois sur la lignes (incluant les 5 colonnes)...
sur l'exemple :
ligne 1 :| A | B | C | D | E |
ligne 2 :| C | C | D | A | F |
ligne 3 :| vide | vide | vide | vide | vide |
ligne 4 :| J | K | A | F | E |
ligne 5 :| G | B | C | D | E |

la logique doit etre :
je recherche A dans ligne 1 : je trouve donc = 1
ensuite je cherche A dans ligne 2 : je le trouve donc = résultat précédent + 1
ensuite je cherche A dans ligne 3 : ligne vide donc = résultat précédent soit 2
ensuite je cherche A dans ligne 4 : je le trouve donc = résultat précédent + 1 soit 3
ensuite je cherche A dans ligne 5 : je ne le trouve pas donc fin du calcul de la formule VBA =MAX(gw_freq=A) (soluce wilfried) ou =nb_maxi(A) (soluce de TBFT) doit donner : 3

Je ne sait pas si je suis clair. C'est relativement compliqué. La dernière proposition de TBFT colle de plus en plus.
 

Guyse du 22

XLDnaute Nouveau
Re : Compter le nombre de "X" qui se suivent...

re:

voici une évolution de la fonction précédente avec transposition du travail par ligne, tu as le choix de travailler soit par colonne, soit par ligne
Vrai travail par ligne, à défaut, travail par colonne

Je ne comprends pas. Pour info, je n'ai pas besoin d'assurer une continuité de A vers B vers C vers E et vers F. Ce sont des colonnes complètement différentes.

Cordialement
 

tbft

XLDnaute Accro
Re : Compter le nombre de "X" qui se suivent...

voici pour la deuxième question


Code:
Function nb_maxi_tableau(valeur As String, tableau_recherche) As Integer
Dim i As Integer, j As Integer, nb_i As Integer, maxi As Integer
Dim k As Integer, nb_k As Integer, tag As Boolean, vide As Boolean
  nb_i = UBound(tableau_recherche.Value, 1)
  nb_k = UBound(tableau_recherche.Value, 2)
  j = 0
  For i = 1 To nb_i
    tag = False  ' valeur vrai si "valeur" est trouvé dans la ligne
    vide = True
    For k = 1 To nb_k
      If tableau_recherche(i, k).Value = valeur Then tag = True
      If tableau_recherche(i, k).Value <> vbNullString Then vide = False
    Next k
    If tag Then
      j = j + 1
      If j > maxi Then maxi = j
    ElseIf Not (vide) Then
      j = 0
    End If
  Next i
  nb_maxi_tableau = maxi
End Function

Function nb_maxi_sans_tableau(valeur As String, tableau_recherche) As Integer
Dim i As Integer, j As Integer, nb_i As Integer, maxi As Integer
Dim k As Integer, nb_k As Integer, tag As Boolean, vide As Boolean
  nb_i = UBound(tableau_recherche.Value, 1)
  nb_k = UBound(tableau_recherche.Value, 2)
  j = 0
  For i = 1 To nb_i
    tag = False
    vide = True
    For k = 1 To nb_k
      If tableau_recherche(i, k).Value = valeur Then tag = True
      If tableau_recherche(i, k).Value <> vbNullString Then vide = False
    Next k
    If Not (tag) Then
      j = j + 1
      If j > maxi Then maxi = j
    ElseIf Not (vide) Then
      j = 0
    End If
  Next i
  nb_maxi_sans_tableau = maxi
End Function

est tu d'accord?
 

Guyse du 22

XLDnaute Nouveau
Re : Compter le nombre de "X" qui se suivent...

voici pour la deuxième question

est tu d'accord?

Après avoir intégrer ton nouveau code pour le tableau, j'observe 2 problème.
1 - nb_maxi_tableau = #NOMS ?
2 - nb_maxi_sans_tableau = total erroné.

Je te joins le tableau de test que j'ai réactualisé. J'ai inscrit manuellement "en italique et gris" les valeurs que nous devont obtenir.

Merci de jetter un coup d'oeil sur les formules VBA des lignes :
- Nbre maximum de fois ou la lette se suit :
- Nbre de fois maximum sans la présence de la lette :

Tiens moi au courant. J'ai hete de te lire car je sens que nous ne sommes plus très loin de trouver.

Merci
 

Pièces jointes

  • tbft - Test ecarts et series avec formules VBA sur plage.xls
    42.5 KB · Affichages: 65
  • tbft - Test ecarts et series avec formules VBA sur plage.xls
    42.5 KB · Affichages: 63
  • tbft - Test ecarts et series avec formules VBA sur plage.xls
    42.5 KB · Affichages: 58

Guyse du 22

XLDnaute Nouveau
Re : Compter le nombre de "X" qui se suivent...

essaye avec en B28
=nb_maxi_tableau(B25;$B$2:$F$21)

Autant pour moi...

C'est mieux effectivement. C28, D28, E28 et F28 = Résultat OK.
Par contre B28 = 4 or cela devrait être 3 ??? Ne serait-ce pas à cause de la ligne 4 (vide) ?

Une raison pour les erreurs de résultats de la fonction nb_maxi_sans_tableau en B35, C35, D35, E35 et F35 ?
 

tbft

XLDnaute Accro
Re : Compter le nombre de "X" qui se suivent...

oups

petit correctif

regarde la fonction au niveau des tests
if flag then
je l'ai modifié avec and not(vide) pour ne pas tenir compte des lignes vides...

Désolé pour la boulette
 

Pièces jointes

  • tbft - Test ecarts et series avec formules VBA sur plage.xls
    43.5 KB · Affichages: 56
  • tbft - Test ecarts et series avec formules VBA sur plage.xls
    43.5 KB · Affichages: 61
  • tbft - Test ecarts et series avec formules VBA sur plage.xls
    43.5 KB · Affichages: 56

Guyse du 22

XLDnaute Nouveau
Re : Compter le nombre de "X" qui se suivent...

oups

Désolé pour la boulette

Aucun problème, c'est tout bon pour les 2 fonctions VBA nb_maxi_tableau et nb_maxi_sans_tableau.

C'est un énorme pas pour moi. Merci beaucoup.

Dernière question : Est-ce que je peut réutiliser c'est 2 fonctions personnalisées en les cumulants avec les fonctions de bases d'excel pour calculer les valeurs en ? "rouge" dans la pièce jointe que j'ai actualisé.

Si oui, je fonce. Si non, as-tu une solution.

PS : J'ai mis en "gris et italique" les résultats que l'on doit trouver (comme tout à l'heure).
 

Guyse du 22

XLDnaute Nouveau
Re : Compter le nombre de "X" qui se suivent...

la pièce jointe que j'ai oublié de joindre pour TBFT dans le message précédent.
 

Pièces jointes

  • tbft - Test ecarts et series avec formules VBA sur plage.xls
    42 KB · Affichages: 50
  • tbft - Test ecarts et series avec formules VBA sur plage.xls
    42 KB · Affichages: 53
  • tbft - Test ecarts et series avec formules VBA sur plage.xls
    42 KB · Affichages: 52

job75

XLDnaute Barbatruc
Re : Compter le nombre de "X" qui se suivent...

Rebonjour,

Suite à mon post précédent,

Je comprends le principe. mais comme je précisait précédemment A n'existera qu'une fois sur la lignes (incluant les 5 colonnes

j'ai donc revu la solution proposée qui, si j'ai bien compris le problème, devient finalement plus simple.

Les résultats sont maintenant recalculés quelles que soient les cellules modifiées (en particulier celles du tableau).

Nota : il peut y avoir plusieurs "A" par ligne, ça n'a pas d'importance.

A+
 

Pièces jointes

  • Test ecarts et series.xls
    40 KB · Affichages: 54
  • Test ecarts et series.xls
    40 KB · Affichages: 60
  • Test ecarts et series.xls
    40 KB · Affichages: 62
Dernière édition:

Discussions similaires

Réponses
9
Affichages
125

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa