Function nSeq&(xtab As Range, xseq As Range)
Dim vtab, vseq, vres(), OK As Boolean, i&, j&, m&, n&
' acquisition des tableaux des valeurs de la source
' et de la séquence à rechercher
vtab = xtab.Value: vseq = xseq.Value
'pour chaque ligne de la source
For i = LBound(vtab) To UBound(vtab)
' on crée un tableau de même dimemension
' que celui de la séquence à rechercher
ReDim vres(LBound(vseq) To UBound(vseq), LBound(vseq, 2) To UBound(vseq, 2))
' pour chaque colonne de la ligne i
For j = LBound(vtab, 2) To UBound(vtab, 2)
' on va comparer l'élément vtab(i, j) de la source
' à chaque élément de la séquence à rechercher.
' donc pour chaque ligne de la séquence à rechercher
For m = LBound(vseq) To UBound(vseq)
' pour chaque colonne de la séquence à rechercher
For n = LBound(vseq, 2) To UBound(vseq, 2)
If Not IsEmpty(xseq(m, n)) Then
' l'élement de la séqence n'est pas vide
' si vtab(i, j) est égale à l'élément xseq(m, n)
' de la séquence alors on l'ajoute (logiquement parlant)
' à l'élement vres(m, n) via l'opérateur OR
vres(m, n) = vres(m, n) Or (vtab(i, j) = xseq(m, n))
Else
' si l'élément de la séquence est vide, alors on considère
' que la recherche est un succès
vres(m, n) = True
End If
Next n
Next m
Next j
' Fin du parcours des colonnes pour la ligne i
' la séquence est présente dans la ligne i , si on y a trouvé
' chaque élément de la séquence. Autrement dit si chaque
' élément du tableau vres est à TRUE.
OK = True
' on vérifie que chaque élément de vres est à true
' on utilise pour cela l'opérateur AND
For m = LBound(vseq) To UBound(vseq)
For n = LBound(vseq, 2) To UBound(vseq, 2)
OK = OK And vres(m, n)
Next n
Next m
' si OK = TRUE (toutes les valeurs sont présentes dans la ligne)
' on ôte OK de nSeq (en VBA, TRUE vaut -1 et FALSE vaut 0)
nSeq = nSeq - OK
' on passe à la ligne suivante
Next i
End Function