Compter une suite (écart direct)

Le
Lemailler
Bonjour,

Je désire résoudre un problème sans générer de nouvelle colonne c=
omme
indiqué ci-dessous.
Problème : En colonne A se trouve une très longue liste de nombre dont
je désire connaître la plus longue suite pour une valeur donnée (éc=
art
direct en terme mathématique).
Colonne A = 2 - 0 - 0 - 5.5 - 5.5 - 0 - 0 - 0 - 3.5 etc.
Ici la plus longue suite pour 0 = 3 pour 5.5 = 2

Cela est facile à résoudre en créant une colonne intermédiaire, mais
comme mes tableaux sont déjà très chargés il me faut trouver autre
chose.
Colonne A = liste des données et Colonne B = colonne intermédiaire

A B
2 - 0
0 - 1
0 - 2 Formule de la colonne B = SI(A3=0;B2+1;0)
5,5 - 0
5,5 - 0
0 - 1
0 - 2
0 - 3
3,5 - 0

3 MAX(B1:B9)

Etudiant actuellement les formules matricielles, il m'a semblé dans un
premier temps que je tenais la solution avec les matricielles qui
retournent un seul résultat, malheureusement cela ne colle pas. En
effet, la colonne "virtuelle" que peut générer une formule matricielle
pour ses calculs intermédiaires (la colonne B que je me refuse
d'ajouter) doit se référer à elle-même pour se calculer.

Mon raisonnement est-il correct à propos de la formule matricielle ?
Doit-on en passer par l'écriture d'une fonction personnalisée ?

Merci par avance.
Lemailler
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Hervé
Le #4675141
Bonjour,
Avec une fonction personalisée à mettre soit dans un module standard du
classeur concerné, soit dans un module standard de PERSO.XLS si utilisée
dans plusieurs classeurs. Il te faut indiquer la plage (qui peut être une
seule cellule), la valeur cherchée et le type de séparateur utilisé, dans
ton exemple, le tiret.
Exemple de formule : ìART_DIRECT(A1:B7;C9;"-")

Function ECART_DIRECT( _
Plage As Range, _
Arg, _
Separateur As String _
) As Integer

Dim Cel As Range
Dim Tbl
Dim Chaine As String
Dim Valeur As String
Dim I As Integer
Dim J As Integer
Dim K As Integer

'oblige le recalcul
Application.Volatile

'parcours la plage
For Each Cel In Plage
J = 0
'supprime les espaces
Chaine = Replace(Cel.Value, " ", "")
'type String
Valeur = CStr(Arg)
'la chaine est découpée dans un tableau
Tbl = Split(Chaine, Separateur)
'recherche la suite la plus longue
For I = 0 To UBound(Tbl)
If Tbl(I) = Valeur Then
J = J + 1
'mémorise la valeur la plus élevée
If J > K Then K = J
Else
J = 0
End If
Next I
Next Cel

ECART_DIRECT = K

End Function

Hervé.

"Lemailler"
Bonjour,

Je désire résoudre un problème sans générer de nouvelle colonne comme
indiqué ci-dessous.
Problème : En colonne A se trouve une très longue liste de nombre dont
je désire connaître la plus longue suite pour une valeur donnée (écart
direct en terme mathématique).
Colonne A = 2 - 0 - 0 - 5.5 - 5.5 - 0 - 0 - 0 - 3.5 etc.
Ici la plus longue suite pour 0 = 3 pour 5.5 = 2

Cela est facile à résoudre en créant une colonne intermédiaire, mais
comme mes tableaux sont déjà très chargés il me faut trouver autre
chose.
Colonne A = liste des données et Colonne B = colonne intermédiaire

A B
2 - 0
0 - 1
0 - 2 Formule de la colonne B = SI(A3=0;B2+1;0)
5,5 - 0
5,5 - 0
0 - 1
0 - 2
0 - 3
3,5 - 0

3 MAX(B1:B9)

Etudiant actuellement les formules matricielles, il m'a semblé dans un
premier temps que je tenais la solution avec les matricielles qui
retournent un seul résultat, malheureusement cela ne colle pas. En
effet, la colonne "virtuelle" que peut générer une formule matricielle
pour ses calculs intermédiaires (la colonne B que je me refuse
d'ajouter) doit se référer à elle-même pour se calculer.

Mon raisonnement est-il correct à propos de la formule matricielle ?
Doit-on en passer par l'écriture d'une fonction personnalisée ?

Merci par avance.
Lemailler
Publicité
Poster une réponse
Anonyme