OVH Cloud OVH Cloud

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

6 réponses
Avatar
Blaise
Bonjour =C3=A0 toutes et tous,

J'ai en m=C3=A9moire 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 =C3=AAtre 7 nombres et des combinaisons de 4
J'imagine de la r=C3=A9cursivit=C3=A9, mais je ne me suis jamais fait =C3=
=A0 cette notion.
Pouvez-vous m'aider ?
Cordialement,
Blaise

6 réponses

Avatar
MichD
Bonjour,
Fichier exemple sur le sujet : http://www.cjoint.com/c/GKomb78IuZS
MichD
Avatar
Blaise
Merci Michel.
Toujours fidèle au poste je vois !
Avatar
Blaise
Bonjour Michel et à tous,
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 !
Avatar
Blaise
En sachant que le paradigme a changé : Mes nombres sont dans des cell ules agencées horizontalement.
Ça, j'ai su adapter. Tout se passe bien jusqu'à cette ligne.
Avatar
Michd
Bonjour,
| 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
Avatar
Blaise
Un énorme merci ! Quelle clarté !
Je connaissais Offset, mais pas vraiment Resize.
Avec tes explications, cela devient lumineux.
Un grand merci encore.