VBA Tirages de combinaisons de X nombres dans une série de Y nombres
Le
Blaise

Bonjour à toutes et tous,
J'ai en mémoire un tableau lSgnVariables de taille variable (max 9)
Je dois lister les combinaisons possibles d'un nombre lui aussi variable.
Par exemple, j'ai 6 nombres 1 2 3 4 5 6. et j'ai besoin d'avoir les combina=
isons de 3 nombres parmi ses 6
1 2 3, 1 2 4, 1 2 5, 1 2 6, 1 3 4, 1 3 5, etc
Mais cela peut être 7 nombres et des combinaisons de 4
J'imagine de la récursivité, mais je ne me suis jamais fait Ã=
cette notion.
Pouvez-vous m'aider ?
Cordialement,
Blaise
J'ai en mémoire un tableau lSgnVariables de taille variable (max 9)
Je dois lister les combinaisons possibles d'un nombre lui aussi variable.
Par exemple, j'ai 6 nombres 1 2 3 4 5 6. et j'ai besoin d'avoir les combina=
isons de 3 nombres parmi ses 6
1 2 3, 1 2 4, 1 2 5, 1 2 6, 1 3 4, 1 3 5, etc
Mais cela peut être 7 nombres et des combinaisons de 4
J'imagine de la récursivité, mais je ne me suis jamais fait Ã=
cette notion.
Pouvez-vous m'aider ?
Cordialement,
Blaise
Fichier exemple sur le sujet : http://www.cjoint.com/c/GKomb78IuZS
MichD
Toujours fidèle au poste je vois !
Je suis dans ce code depuis quelques jours en essayant de l'adapter à ma situation, mais il a un grand défaut : il n'est absolument pas docu menté !
Je sèche sur la ligne 43 : vAllItems = Rng.Offset(2, 0).Resize(PopSi ze).Value
et donc les suivantes me sont aussi obscures.
Qui comprend cela et pourrait expliquer ?
Et mieux même, qui serait capable de documenter ce code ?
Merci à tous !
Ça, j'ai su adapter. Tout se passe bien jusqu'à cette ligne.
| vAllItems = Rng.Offset(2, 0).Resize(PopSize).Value
**** La combinaison des méthodes "Offset" et "Resize" est l'équivalent de la
fonction "Decaler" dans la feuille de calcul.
Rng = représente une plage de données (ou une cellule)
Offset = 2 paramètres : Ligne, Colonne. Dans l'exemple
(Rng.Offset(2, 0)), il déplace la première cellule de deux lignes vers le
bas et 0 colonne vers la droite. On peut utiliser des valeurs négatives au
besoin.
Si Rng représente la cellule A1, Rng.Offset(2, 0) représente la cellule A3
soit 2 cellules plus bas.
.Resize(PopSize). Redimensionne la plage de cellules. Cette méthode
a aussi 2 paramètres, ligne et colonne. La valeur de ces deux paramètres ne
peut pas être négative. Dans cet exemple, la plage de cellules ajoutera le
nombre de cellules vers le bas de la valeur que représente "PopSize". Dans
"PopSize" la première cellule fait partie du décompte.
En supposant que PopSize vaut 5 et que Rng représente la cellule A1, la
plage de cellule se déplacera d'abord à A3 à cause de "Offset" et elle sera
redimensionné de 5 cellules vers le bas. Par conséquent Rng équivaut à la
plage A3:A7
Le .Value à la fin de la ligne de code signifie que chaque valeur de chacune
de ces cellules seront placées dans une variable vAllItems déclarée comme
tableau (array) ou variant. vAllItems est un tableau à 2 dimensions
(ligne, colonne) . Ce tableau est nécessaire de Base 1 sous-attendue Option
Base 1 car il représente au moins une cellule définit par le numéro d'une
ligne et le numéro d'une colonne.
MichD
Je connaissais Offset, mais pas vraiment Resize.
Avec tes explications, cela devient lumineux.
Un grand merci encore.