Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2013 encore un truc chelou

patricktoulon

XLDnaute Barbatruc
Bonjour à tous
j'ai une simple macro qui me permet de faire la liste de toute les combinaisons de 4 nombre sur 10
alors
oui elle fonctionne
oui elle ne me fait pas de doublons
oui elle est rapide

mais il y a un petit soucis
c'est qu'elle ne devrait pas
en effet j' ai 4 boucle imbriquées
chacune démarrant a l'index + 1 de la précédente et allant jusqu'au ubound c'est a dire à 10
arrivé a un moment la boucle a,b,c,d devrait me donner par exemple x 10 10 10 ce qui serait une combinaison erronée bien sur
mais voyez vous elle ne le fait pas
alors par quel miracle vbaistique divinatoire magical évènementiel mon résultat est correct
pour info je contrôle avec une fonction combin qui me donne bien 210 combinaisons possible et mes boucle me donnent la même chose

ais-je raté un épisode ?
VB:
Sub test()
[A:E].ClearContents
Dim tbl, tblFinal(), a&, b, c&, d&
ReDim tblFinal(1 To NbCombi(10, 4), 1 To 4)
tbl = Application.Index(Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 1, 0)
For a = 1 To UBound(tbl)
For b = a + 1 To UBound(tbl)
For c = b + 1 To UBound(tbl)
For d = c + 1 To UBound(tbl)
q = q + 1
'Cells(q, 1).Resize(, 4) = Array(tbl(a), tbl(b), tbl(c), tbl(d))
tblFinal(q, 1) = tbl(a)
tblFinal(q, 2) = tbl(b)
tblFinal(q, 3) = tbl(c)
tblFinal(q, 4) = tbl(d)


Next d, c, b, a
Cells(1, 1).Resize(UBound(tblFinal), 4) = tblFinal

End Sub
Function NbCombi(Base#, N#)
'FORMULE PATRICKTOULON Developpez.com
    NbCombi = WorksheetFunction.Combin(Base, N)    ' avec worksheetfunction
End Function

y a que moi pour venir se plaindre que ça marche bien
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re @bsalv ,

Allez! Vous avez raison : Abondance de biens ne nuit pas . Votre code a un avantage certain comme je disais plus haut. Il est indépendant de n et p pour les combinaisons, il n'est pas récursif et la taille du code est indépendante de n et p.
Le codage est souvent un subtil compromis entre taille du code, vitesse d'exécution, utilisation de la mémoire vive (bon les jeunes ne savent même pas que jadis la RAM était une contrainte forte et exigeante). Nous, les vieux, on raisonnait en ko de mémoire ; maintenant c'est en Go. Les temps changent mais ça laissent des traces dans la façon de coder.

Bonne soirée .
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…