XL 2010 Nb cellule entre chaque valeur identique

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

chokili20

XLDnaute Junior
Bonsoir,

Une demande pour calculer combien il y'a de cellule entre chaque valeur identique.
Par exemple, sur une ligne, entre chaque "2" combien y'a t il de cellule (1 puis 4 puis 3 puis 1 puis 2 etc...)
Attention, tableau avec des #N/A.

Je n'ai pas tout mis, mais tableau conséquent donc VBA ou pas je veux bien tout tester.

Merci à vous tous
 

Pièces jointes

Bonjour chokili20, Bebere,

Utilisation de cette fonction VBA matricielle dans le fichier joint :
Code:
Function Nentre(t, x%)
Dim ub%, i%, y As Variant, j%, n%
t = t 'matrice, plus rapide
ub = UBound(t, 2)
For i = 1 To ub
    y = t(1, i)
    If IsNumeric(y) Then
        If y = x Then
            For j = i + 1 To ub
                y = t(1, j)
                If IsNumeric(y) Then
                    If y = x Then
                        If j > i + 1 Then n = n + 1: t(1, n) = j - i - 1
                        i = j - 1
                        Exit For
                    End If
                End If
            Next j
        End If
    End If
Next i
ub = Application.Min(Application.Caller.Count, ub)
For i = n + 1 To ub: t(1, i) = "": Next i
Nentre = t 'matrice ligne
End Function
Sélectionner BA3:BK3, entrer la formule dans la barre de formule et valider en bloc matriciellement par Ctrl+Maj+Entrée.

Copier BA3:BK3 et Collage spécial-Formules vers les plages BA4:BK29 - BL3:BV29 - BW3:CG29.

A+
 

Pièces jointes

Dernière édition:
Re,

Avec cette variante le calcul précédent prend seulement 1,8 milliseconde :
Code:
Function Nentre(t, x%)
Dim ub%, a(), i%, y As Variant, j%, n%
t = t 'matrice, plus rapide
ub = UBound(t, 2)
ReDim a(1 To Application.Caller.Count)
For i = 1 To ub
    y = t(1, i)
    If IsNumeric(y) Then
        If y = x Then
            For j = i + 1 To ub
                y = t(1, j)
                If IsNumeric(y) Then
                    If y = x Then
                        If j > i + 1 Then n = n + 1: a(n) = j - i - 1
                        i = j - 1
                        Exit For
                    End If
                End If
            Next j
        End If
    End If
Next i
Nentre = a 'vecteur ligne
End Function
Pour masquer les valeurs zéro les tableaux des résultats doivent être mis au format personnalisé 0;;

Fichier (2).

A+
 

Pièces jointes

Bonsoir à tous,
Je remonte ce sujet car j'ai une nouvelle question.
La 1e fois ma demande concernait les écarts des valeurs sur une ligne.
Cette fois ci je voudrais calculer les écarts sur une colonne.
J'ai repris la solution de job75 (merci encore), mais je ne sais comment faire car c'est du VBA.
J'ai fait un essai en adaptant la formule et ça ne va pas.
Voici un tableau avec en feuille 2 ma demande.
Merci
 

Pièces jointes

Bonsoir chokili20,

Utilisez cette nouvelle fonction :
Code:
Function Nentre2(t, x%)
Dim ub%, a(), i%, y As Variant, j%, n%
t = t 'matrice, plus rapide
ub = UBound(t)
ReDim a(1 To Application.Caller.Count, 1 To 1)
For i = 1 To ub
    y = t(i, 1)
    If IsNumeric(y) Then
        If y = x Then
            For j = i + 1 To ub
                y = t(j, 1)
                If IsNumeric(y) Then
                    If y = x Then
                        If j > i + 1 Then n = n + 1: a(n, 1) = j - i - 1
                        i = j - 1
                        Exit For
                    End If
                End If
            Next j
        End If
    End If
Next i
Nentre2 = a 'vecteur colonne
End Function
Fichier (3).

A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
504
Réponses
7
Affichages
361
Réponses
1
Affichages
338
Retour