XL 2010 Suite de nb en doublon et +

Foie4

XLDnaute Junior
Bonsoir,

Dans un tableau j'ai des nombres et certains font des suites (1-2-3 ou 7-8 ou 21-22-23-24...)

Lorsque je compare 2 lignes qui ont des suites je voudrais savoir combien se "recoupent" :

Par exemple en L3 il y'a 17-18-19-20 et en L4 19-20-21-22-23 et bien nous avons 2 nb qui se "recoupent"
(le 19 et 20).
Voir mon exemple sur le fichier
merci de votre aide
 

Pièces jointes

  • Suite de nb en doublon et+.xlsx
    11 KB · Affichages: 17

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Foie4,

Un essai avec une fonction VBA. Le code est dans module1. Le code comprend la description des paramètres de la fonction:
Function CommunSuite(xplage As Range, xligne1&, xligne2&, xquoi&)

Pour voir son utilisation, examiner les formules des cellules AC4, AD4 et AG4, AH4. Ces quatre formules sont à recopier vers le bas.
VB:
Function CommunSuite(xplage As Range, xligne1&, xligne2&, xquoi&)

' cette fonction possèdent les arguments suivants :
'   xplage    ->    c'est la plage d'entrée
'   xligne1   ->    c'est le numéro de la première des deux lignes à comparer
'                   la numérotation est relative à la plage d'entrée
'                   par exemple 3 correspond à la 3ème ligne de xplage
'                   (et non pas de la feuille de calcul)
'   xligne2   ->    c'est le numéro de la deuxième des deux lignes à comparer
'                   la numérotation est relative à la plage d'entrée
'   xquoi     ->    indique ce que la fonction doit retourner
'             si xquoi = 0, alors la fonction retourne le nombre total d'éléments de suite communs
'             si xquoi > 0, alors la fonction retourne la chaine des nombres communs

Dim t1, t2, j&, res&, elem$

  t1 = xplage.Rows(xligne1): t2 = xplage.Rows(xligne2)
  If t1(1, 2) = Empty Then t1(1, 1) = Empty
  For j = 2 To UBound(t1, 2) - 1
    If t1(1, j - 1) = Empty And t1(1, j + 1) = Empty Then t1(1, j) = Empty
  Next j
  If t1(1, UBound(t1, 2) - 1) = Empty Then t1(1, UBound(t1, 2)) = Empty
  If t2(1, 2) = Empty Then t2(1, 1) = Empty
  For j = 2 To UBound(t2, 2) - 1
    If t2(1, j - 1) = Empty And t2(1, j + 1) = Empty Then t2(1, j) = Empty
  Next j
  If t2(1, UBound(t2, 2) - 1) = Empty Then t2(1, UBound(t2, 2)) = Empty
  For j = 1 To UBound(t1, 2)
    If (t1(1, j) = t2(1, j)) And t1(1, j) <> Empty Then
      res = res + 1
      elem = elem & ", " & t1(1, j)
    End If
  Next j
  If xquoi > 0 Then
    CommunSuite = IIf(Left(elem, 2) = ", ", Mid(elem, 3), elem)
  Else
    CommunSuite = res
  End If
End Function

Errata : pas mis bonne version. Prendre la V2.
 

Pièces jointes

  • Foie4- Suite de nb en doublon et+ V2.xlsm
    23.5 KB · Affichages: 23
Dernière édition:

Foie4

XLDnaute Junior
Bonsoir mapomme, le forum,

merci beaucoup pour cette proposition, qui est super efficace.
Je voulais poser une autre question :
Combien de nb "seul" (qui n'est pas dans une suite) recoupe un nb d'une suite ?
Par exemple en L3 il y'a 7 et en L4 7-8 et bien nous avons 1 nb qui se "recoupe" (le 7).
Voir sur le fichier colonne AK à AM
merci encore
 

Pièces jointes

  • Suite de nb en doublon et+ V2.xlsm
    21.5 KB · Affichages: 12

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @Foie4,

Combien de nb "seul" (qui n'est pas dans une suite) recoupe un nb d'une suite ?
Par exemple en L3 il y'a 7 et en L4 7-8 et bien nous avons 1 nb qui se "recoupe" (le 7).
Voir sur le fichier colonne AK à AM

Si j'ai bien compris... Voir la fonction SingletonSuite dont le code a été ajouté à module1.
 

Pièces jointes

  • Foie4- Suite de nb en doublon et+ V3.xlsm
    28.4 KB · Affichages: 24

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16