calcul conbinaisons

  • Initiateur de la discussion bruno
  • Date de début
B

bruno

Guest
bonjour à tous.
un petit probleme de programmation en utilisant les bcles ' for.... to'
j'ai realisé une procedure avec beaucoup de for ..to mais celle ci est trop longue à son execution et plante souvent. Ne maitrisant pour toutes les commandes en vBA je pense qu'il y a un autre moyen plus rapide .
voila la problematique.

j'ai dans un tableau sur une ligne(à savoir qu'il existe plusieurs lignes) , les colonnes qui contiennent des valeurs numeriques.
les colonnes sont regroupes groupe
ex: groupe1= col de 1 à 8
groupe2= col de 9 à 17
groupen= col de n à 256
la longueur de ses groupes (nb de colonnes par groupe) varient de 3 (val min) à 15 (valeurs max).
le contenu des colonnes peut etre parfois vide ou =0.
je souhaite donc realiser toutes mes combinaisons possibles de n element de chaque groupe avec les autres groupes.
ex
N element est au choix de l'utilisateur (val min=1 à val max= 5)
nb groupes= nb de groupe à utilises donc en fait le nb d'element dans la conbinaison.(valmin1 à val max= 10)
pour n=1 on aura les conbinaisons
pour nb groupe=3
col1-col9-coln
col1-col9-coln+1
col1-col9-coln+2
etc...................
col8-col17-col256


et tout cela pour chaque ligne.

merci pour l'aide
 
Z

Zon

Guest
Bonsoir Bruno,



J'ai pas tout compris à ce que tu veux faire, tu veux comparer les valeurs, faire un calcul probiliste (combinaison). où tu les stockes????


Joins un fichier exemple, ce serait mieux.



A+++
 
B

bruno

Guest
salut
ok
voila un fichier qui correspond a la forme de mes donnees.
pour des calculs , il s'agit bien comme tu l'as deviner de probabilite (conbinaison)

un point à rajouter, en cas de conbinaison ou le contenu presente des chiffre identique, on elimine le chiffre redondant.
pour 'linstant le stockage pourra se faire en memoire car je ne souhaite que comptabilise le nb de combinaison (plus tard je pense les afficher dans un tableau excel mais apres quelques filtres eliminatoires) et les comparer à un resultat (une combinaison fixe que j'aurai saisie de 5 elements mais laz comparaison se fera de la maniere suivante.
les 2 premiers element du resultat
les 3 premiers
etc jusqu'au 4 elements.
voila
 

Pièces jointes

  • Classeur1.xls
    13.5 KB · Affichages: 50
  • Classeur1.xls
    13.5 KB · Affichages: 47
  • Classeur1.xls
    13.5 KB · Affichages: 47
Z

Zon

Guest
Re Bruno

Si j'ai bien compris ce que tu cherchais et mes souvenirs de Probabilité avec l'exemple que tu m'as donné on a:


7 éléments dans le groupe1
6 éléments dans le groupe2
5 éléments dans le groupe3

Si on prend ces 3 groupes avec 2 comme nb éléments choisis par groupe on aura nb de combinaisons totales:

C(2,7)xC(2,6)xC(2,5)=[(7!6!5!)/(2!5!2!4!2!3!)]=3150

En formule cela donne:

=COMBIN(NBVAL(C4:I4);C10)*COMBIN(NBVAL(J4:p4);C10)*COMBIN(NBVAL(P4:T4);C10)

J'utilise NBVAL pour avoir le nb d'éléments non vide présents dans une plage c'est à dire que le groupe1 devrait avoir comme plage de cellule pour la ligne4 C4:K4, le groupe2 L4:U4


Pour la deuxième étape Nb de combinaison à 2 chiffres, à 3 chiffres etc:

à c'est une formule mathématique qui me dépasse. en formule par contre en code VBA j'ai une petite idée mais je voudrais savoir si je prends la bonne direction...


A+++
 
B

bruno

Guest
salut
Pas tout a fait.
si je prends
nb d'element par groupe =1 nb de groupe =3

dans chaque groupe je ne prends que 1 elements de ce groupe que j'aasocie à un et un seul elment d'un notre groupe
donc si j'ai 3 groupe
on a la combinaison GRP1(elment1)+GRP2(element1)+GRP3(element1)
etc
jusqu'a GRP1(element N)+GRP2(elementN)+GRP3(elementN)

dans ce cas les combinaisons resultantes n'auront que 3 elements au maximun .

dans le cas nb element par groupe =2
onfait la meme chose mais cette foiS dans chauqe groupe je prends 2 elements de chauqe groupe pour realise la combinaison resultante.
la combinaison aura au max 6 elements.

par contre si le code peut etre en vba. cela serait sympa
merci à toi
 
Z

Zon

Guest
Bonjour Bruno,

Regarde en fichier joint si c'est ce que tu veux pour la ligne 4...



A+++


PS: Envoie le fichier avec le code que tu parlais au dans le 1 er message...
 

Pièces jointes

  • brunoessai.xls
    23 KB · Affichages: 72
B

bruno

Guest
SALUT
MERCI
MAIS OUPS? RIEN NE S'AFFICHE a L'EXECUTION DE LA MACRO.
l'affichage se fait il en cellule aj4 ?
pour le nombre de combinaison trouvees cela me parait peu.
car si l'on prend 3 groupes
ex grp1 grp2 grp3 donc une combinason resultante composee au max de 3 chiffre.

ici on a dans le tableau grp1 =7chiffres grp2=5 deja au minimun on 7*5= 35 couples (calcul brut , evidement les couples du type 45-45 sont à eliminer).
donc si on rajoute le grp3= 3 chiffre. le resultat de 9 combin me parait leger?

A+
 
B

bruno

Guest
salut voici le principe ce que j'avais ecris
pour l'exemple je travaille sur 2 groupe et 1 element par groupe
'je lis chq element du grp1
for colgrp1= 3 to 11
'je teste si chq elemen=0 ou ""
if cells(ligne,colgrp1)<>0 or cells(ligne,colgrp1)<>"" then
'j'affecte la valeur à la variable donnee1
donnee1=cells(ligne,colgrp1)
for colgrp2=12 to 20
if cells(ligne,colgrp2)<>0 or cells(ligne,colgrp2)<>"" then
donnee2=cells(ligne,colgrp2)
nbcombinaison=nbcombinaison+1
'saffiche dans un msgbox la combi trouvee (donnee1+donnee)
incremente le nb de combinaison
nbcombinaison etant le nb total de combinaison trouve


a+
 
Z

Zon

Guest
Re Bruno,


Désolé Bruno, j'ai mal compris une fois de plus, ce n'était q'un début pour voir si les trios formés te convenaient..

J'ai télécharger mon fichier depuis le forum et je n'ai eu aucun souci, je te l'énvoie par mail.


Je réflichirai ce soir (j'ai du boulot cet aprés midi) à un algo pour le transcrire en code VBA.


A+++


PS Procédons étape par étape si tu le veux bien...
 

Discussions similaires

Statistiques des forums

Discussions
314 644
Messages
2 111 529
Membres
111 189
dernier inscrit
Laurent.