Roger a demandé s’il y avait un moyen de calculer l’intervalle entre les occurrences de valeurs dans une liste. Par exemple, il a plusieurs milliers de nombres dans la colonne A. En regardant la valeur dans la cellule A351, la dernière fois que cette valeur s’est produite dans la liste était dans la cellule A246. Il aimerait une formule qui pourrait être placée dans la cellule B351 et renvoyer 105, la différence entre 351 et 246.

Cette approche est difficile à mettre en œuvre dans Excel car Excel n’est pas très performant pour effectuer une recherche vers l’arrière, dans une colonne. Si la prémisse pouvait être inversée, la tâche deviendrait beaucoup plus simple. Par exemple, si une formule dans la cellule B246 peut renvoyer la valeur 105, indiquant l’intervalle jusqu’à la prochaine occurrence de la valeur dans la cellule A246, au lieu de calculer la dernière occurrence. La formule suivante calcule la prochaine occurrence de la valeur dans la cellule A1:

=MATCH(A1,A2:$A$65536,0)

Placez cette formule dans la cellule B1 et copiez-la selon le nombre de cellules nécessaires. Si la valeur de la colonne A ne se reproduit pas dans la colonne, la formule renvoie l’erreur # N / A. Si vous préférez que la formule renvoie 0, alors les travaux suivants:

=IF(ISNA(MATCH(A1,A2:$A$65536,0)),0,MATCH(A1,A2:$A$65536,0))

Si vous devez absolument compter à la hausse (recherchez l’occurrence précédente au lieu de l’occurrence suivante), le moyen le plus simple de le faire est d’utiliser une fonction définie par l’utilisateur. La fonction suivante, RowInterval, regardera en arrière dans une plage que vous spécifiez et retournera l’intervalle souhaité:

Function RowInterval(TestCell As Range, LookHere As Range) As Long     Dim varValue As Variant     Dim lngRow As Long

Application.Volatile     varValue = TestCell.Value          'Check for occurrences of the test value in the search range     If WorksheetFunction.CountIf(LookHere, varValue) > 0 Then         With LookHere             'Get the last row of the search range             lngRow = .Row + .Rows.Count - 1             'Start with the last cell in the search range and work up             Do Until .Item(lngRow, 1).Value = varValue                 lngRow = lngRow - 1             Loop         End With         'Subtract the number of the row containing the found occurrence         'from the number of the row containing the test value         RowInterval = TestCell.Row - lngRow     End If End Function

Pour utiliser la fonction, vous devez mettre la formule suivante dans la cellule B2, puis copier la formule vers le bas du nombre de cellules souhaitées:

=RowInterval(A2,A$1:A1)

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (2338) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-Calculating_the_Interval_between_Occurrences [Calcul de l’intervalle entre les occurrences].