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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26452239
Bonjour,
Fichier exemple sur le sujet : http://www.cjoint.com/c/GKomb78IuZS
MichD
Blaise
Le #26452248
Merci Michel.
Toujours fidèle au poste je vois !
Blaise
Le #26452737
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 !
Blaise
Le #26452739
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.
Michd
Le #26452762
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
Blaise
Le #26452877
Un énorme merci ! Quelle clarté !
Je connaissais Offset, mais pas vraiment Resize.
Avec tes explications, cela devient lumineux.
Un grand merci encore.
Publicité
Poster une réponse
Anonyme