Comptage entre...

ALEA()

XLDnaute Occasionnel
Bonjour,

J'essaye de compter entre X et Y puis Z et Y puis X et Z... en colonne F (nombres en rouge).
J'ai expliqué dans mon petit fichier de 3 lignes.
Pour vous, ce sera une paille de le faire, pour moi c'est un arbre...
Merci

Bonnes fêtes à tous.
 

Pièces jointes

  • ecart.xlsx
    10 KB · Affichages: 55

CISCO

XLDnaute Barbatruc
Bonsoir

Peut être, mais cela veut juste dire que je n'ai pas compris ce que tu appelles une combinaison. Est-ce que tu pourrais mettre plus d'exemples.
Dans mon précédent post, je supposai que tu avais une liste du style
1 2 3 4 5
1 2 3 4 6
1 2 3 4 7
....
1 2 3 4 31
1 2 3 4 32
_______
1 2 3 5 5
1 2 3 5 6
1 2 3 5 7
....
1 2 3 5 31
1 2 3 5 32
_______
1 2 3 6 5
1 2 3 6 6
....
1 2 3 6 31
1 2 3 6 32.

donc 3 * 28.

Qu'est-ce qui manque ?

@ plus
 

KenDev

XLDnaute Impliqué
Bonjour à tous,

en F1:
VB:
=CmbRnk(49;5;A1:E1)-1
en F2 et copier sur la colonne:
VB:
=CmbRnk(49;5;A2:E2)-CmbRnk(49;5;A1:E1)

VB:
Function CmbRnk(ByVal a&, ByVal b&, ByVal Rng As Range) As Variant
  Dim i&, j&, Tb&()
  Tb = RngToTab(Rng)
  If UBound(Tb) = 0 Then CmbRnk = CVErr(xlErrNum): Exit Function
  If Not IsCmb(a, b, Tb) Then CmbRnk = CVErr(xlErrNum): Exit Function
  CmbRnk = 1
  For i = 2 To Tb(1): CmbRnk = CmbRnk + CmbNb(a + 1 - i, b - 1): Next i
  For j = 2 To b: For i = Tb(j - 1) + 2 To Tb(j): CmbRnk = CmbRnk + CmbNb(a + 1 - i, b - j): Next i, j
End Function

Private Function RngToTab(ByVal Rng As Range) As Long()
  Dim ai&, am&, bi&, bm&, i&, j&, Tb&(), ws As Worksheet
  Set ws = Rng.Worksheet
  ai = Rng.Row: am = Rng.Rows.Count: bi = Rng.Column: bm = Rng.Columns.Count
  ReDim Tb(am * bm)
  On Error GoTo Line1
  For i = ai To ai + am - 1: For j = bi To bi + bm - 1
  Tb((i - ai) * bm + j - bi + 1) = ws.Cells(i, j)
  Next j, i
Line2:
  RngToTab = Tb: Exit Function
Line1:
  ReDim Tb(0): GoTo Line2
End Function

Private Function IsCmb(ByVal a&, ByVal b&, Tb&()) As Boolean
  Dim i&
  If UBound(Tb) <> b Then Exit Function
  If a < 1 Or b < 1 Or b > a Then Exit Function
  For i = 1 To UBound(Tb)
  If Not (Tb(i) > Tb(i - 1)) Or Tb(i) > a Or Tb(i) < 1 Then Exit Function
  Next i
  IsCmb = True
End Function

Private Function CmbNb(ByVal a&, ByVal b&) As Double
  Dim c&
  c = a - b
  If b < c Then c = b
  If c = 0 Then CmbNb = 1 Else CmbNb = MthFac(a, c) / MthFac(c)
End Function

Private Function MthFac(ByVal a&, Optional Nb& = 0) As Double
  Dim i&, n&
  If Nb = 0 Then Nb = a
  MthFac = 1
  For i = 0 To Nb - 1: MthFac = MthFac * (a - i): Next i
End Function

@CISCO
de 1 2 3 4 5 à 1 2 3 4 49 = 49-5 = 44
1 2 3 5 6 = +1
de 1 2 3 5 6 à 1 2 3 5 49 = 49-6 = 43
1 2 3 6 7 = +1
de 1 2 3 6 7 à 1 2 3 6 32 = 32-7=25
total: 44+43+25+2=114

Cordialement,
KD
 

CISCO

XLDnaute Barbatruc
Bonjour

Bonjour à tous,

@CISCO
de 1 2 3 4 5 à 1 2 3 4 49 = 49-5 = 44
1 2 3 5 6 = +1
de 1 2 3 5 6 à 1 2 3 5 49 = 49-6 = 43
1 2 3 6 7 = +1
de 1 2 3 6 7 à 1 2 3 6 32 = 32-7=25
total: 44+43+25+2=114

Cordialement,
KD
Merci KenDev... Pas évident pour autant...

@ALEA() Les 114 possibilités listées auraient été beaucoup plus explicites.
Où se trouvent X (Est-ce 1 2 3 4 5 ou 1 2 3 6 32 ?), Y et Z ?
Dans le raisonnement proposé par KenDev, quand se sert-on de la série 1 4 5 28 30 sur la ligne 2 ? Tu vas me répondre qu'on ne s'en sert pas. Si c'est le cas, autant ne pas la mettre et alors, pourquoi fait-on avec le 49 de la ligne 3 ? Puisque KenDev a compris, c'est que c'est faisable, ou qu'il y a des sous-entendus que tu as oubliés de nous expliquer.

@ plus
 

Discussions similaires

Statistiques des forums

Discussions
312 234
Messages
2 086 475
Membres
103 226
dernier inscrit
smail12