IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

combinaison de nombre


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 22
    Par défaut combinaison de nombre

    bonsoir
    j'essai de realiaser toutes les combinaisons de nombre de taille X dans une serie de nombres.
    avec des filtres eliminants certaines d'entres elles

    merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Citation Envoyé par didier.schmit

    bonsoir
    j'essai de realiaser toutes les combinaisons de nombre de taille X dans une serie de nombres.
    avec des filtres eliminants certaines d'entres elles

    merci d'avance
    Salut
    comme d'hab, pas tout compris :
    tu as 6 nombres
    tu veux le nombre de combinaisons différentes ? 15, 2, 4 est-il différent de 2,15, 4 ?

    Tes histoires de filtres : pourquoi éliminer dans la série que tu donnes en exemple 15, 2, 4 ?
    A+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 22
    Par défaut combinaison
    bonsoir à tous et à toutes
    bonsoir GORFAEL
    exemple dansle fichier joint
    la serie cite en exemple 15-2-4-6-7-3 (la longueur de cette serie est variable . elle est peu contenir de 0 numeros à 15 numeros max. dans notre exemple elle a 6 nuemros)

    1) dans le textbox "taille des combinaison" , l'utlisateur doit rentrer la longueur de sa combinaison (celle ci peut etre de 2 mini à 8 maxi) Dans l'exemple, le choix de la longueur de la combinaison de l'utilisateur est de 3.
    soit des combinaisons du 15-2-3, 15-2-7, etc......

    2)en appuyant sur le bouton calcul , je souherai realise toutes les combinaison de taille 3 (dans l'exemple) pouvant etre calculer avec la serie (dans l'exemple) 15-2-4-6-7-3.

    soit 15-2-4
    15-2-6
    15-2-7
    etc.........

    3) si les filtres sont coches. (par exemples le filtre 1)
    on elimine les combinaisons composées de numeros qui se suivent.
    exemple poiur notre serie
    la combinaison 2-4-3 sera trouve mais comme lle filtre1 est coché alors cette combinaison 2-4-3 ne sera pas retenue.



    pourquoi eliminer 2-4-3 ?
    en fait elle est compose de 3 chiffres consecutif 2-3-4 donc par le filtre1 elle est elimionee.
    voila , j'espere avoir ete plus clair.

    merci de votre aide

    didier

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonsoir,

    Et (abstraction faite de tout langage informatique) quel est l'algorithme que tu as fait pour ce qui parait être la recherche de toutes les combinaisons possibles de x éléments choisis x à x parmi n éléments ?
    (Encore que tu as omis de dire si l'ordre de ces 3 éléments avait ou non une importance)
    et en ajoutant qu'aucun sous-ensemble ainsi choisi ne devrait être constitué d'éléments sans solution de continuité possible entre eux ?
    Fournis donc cet algorithme (juste pour voir) et nous le transcrirons fidèlement en syntaxe VBA ...
    Prépare également, dans cette perspective (et surtout celle des combinaisons x à x parmi 15 éléments) , une TRES GRANDE feuille Excel, hein ...
    Bonne continuation...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 22
    Par défaut combinaosn


    Bonsoir à tous
    Bonsoir ucfoutu
    Tu me semble pointu dans le domaine.

    Dans excel , comme tu dois le savoir, il existe une formule « Combin(nombre element ;nb elmentchoisi) » qui renvoi le nb de combinaison que l’on veut former avec un nb donnée d’elements.

    La formule combinatoire classique est :

    Pour une combinaison, l'ordre est indifférent : au loto que le tirage soit 1 2 3 4 5 6 ou 6 3 5 2 4 1 , c'est identique! La question est donc pour une combinaison, on a combien d'arrangement?
    Si on a une combinaison de p éléments, on peut les classer de p! manières différentes. Le nombre de combinaisons de p éléments parmi n ( ) vérifie donc .p!= . Ceci donne :
    C p = n!
    n p!(n-p)!



    Par exemple pour le loto
    Au loto, on a 6 numéros parmi 49, ceci donne =49!/(6!.43!)=13983816

    Je rentrerai pas dans le detail des arrangements (ordre et desordre)
    Si on veut le nombre d'arrangement de 2 éléments parmi trois (ABC), ceci donne =3!/(3-2)!=6/1=6. Exact, nous avons AB, AC, BA, BC, CA et CB.
    Bref ! sauf erreur de ma part !
    Pour la taille du tableau je te rassure, je ne m’attaque pas au loto avec ces 13983816 combinaisons mais à un pari qui ce limite à 20 numeros max

  6. #6
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Ça, ça ressemble à une demande du type donnez moi un algorithme ou du code tout pondu pour faire mon application.

    Retourne lire les règles du forum, s'il te plaît.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 22
    Par défaut combinaiosn
    bonsoir à tous et à toutes
    Zazaraignee ,
    je te remercie rappeler les regles de bases du forum
    certains sont certainement tres passionnés comme peuvent le montrer certains messages.
    pour info , je ne programme plus depuis 10ans. mise à part excel
    Pour en revenir à mon fichier excel d'orignie est il comprehensible on faut il detailler?
    malheureusement je ne rien ecrire mise à part qql blc for ..to . en fin qql chose trop basic pour obtenir un resultat .

    cordialment

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Prenons l'exemple de l'extraction de tous les "quadruplés" (n = 4) possibles
    de l'ensemble 123456 (e = 6)

    1) on démarre du 1
    1 23456 ==>> 1 234 à ignorer car dans le cas d'une série suivie
    1 23456 ===>> 1 345
    1 23456 ===>> 1 456


    2) on avance maintenant d'un rang (donc du 2)

    2 34561 ==>> 2 345 à ignorer car dans le cas d'une série suivie
    2 34561 ==>> 2 456
    2 34561 ==>> 2 561


    3) on avance d'un rang de plus (donc du 3)
    3 45612 ==>> 3 456 à ignorer car dans le cas d'une série suivie
    3 45612 ==>> 3 561
    3 45612 ==>> 3 612


    4) on avance d'un rang de plus (donc du 4)
    4 56123 ==>> 4 561 à ignorer car forcément traité en plus haut (en 1)
    4 56123 ==>> 4 612
    4 56123 ==>> 4 123 à ignorer car forcément traité en plus haut (en 1)

    5) on avance d'un rang de plus (donc du 5)
    5 61234 ==>> 5 612 à ignorer car forcément traité en plus haut (en 2)
    5 61234 ==>> 5 123
    5 61234 ==>> 5 234 à ignorer car forcément traité en plus haut (en 2)

    6) on avance d'un rang de plus (donc du 6)
    6 12345 ==>> 6 123 à ignorer car forcément traité en plus haut (en 3)
    6 12345 ==>> 6 234
    6 12345 ==>> 6 345 à ignorer car forcément traité en plus haut (en 3)

    Il est clair que :
    - le nombre e d'étapes est égal à celui de l'ensemble des éléments
    parmi lequels ont doit en extraire n
    - l'on ne retient jamais le 1er de chaque étape
    - lors de chaque étape, le nombre possible de boucles est égal à e-n + 1
    - à partir de l'étape n (ou n = le nombre d'éléments à extraire), on ne retient jamais
    le dernier (car forcément déjà extrait lors d'une étape antérieure

    Petite observation accessoire mais que nous n'allons pas utiliser (même pas
    nécessaire) : une série de n chiffres n'est pas suivie si la différence entre le plus grand et le plus petit de ces n chiffres est supérieure ou égale à n)

    Nous avons donc là la base même de notre mécanisme :

    Un nombre d'étapes (avancement d'un cran) égal à celui du nombre total des éléments parmi
    lesquels en extraire n
    mise à l'écart systématique (à chaque étape, du 1er élément)
    Mise à l'écart systématique, à partir de l'étape n, du dernier élément

    Quelles combinaisons nous resteraient-elles dans l'exemple ci-dessus (de
    triolets à extraire de 123456) ?
    1345 - 1456 - 2456 - 2561 - 3561 - 3612 - 4612 - 5123 - 6234

    Bien, nous avons ainsi obtenu nos 9 "quadruplés" possibles parmi l'enseomble 1,2,3,4,5,6
    Voilà qui est facile, mais nous n'avons pas là considéré autre chose que des "quadruplés",
    sans tenir compte de leur "date de naissance", les différentes possibilités en
    considérant leur ordre.

    Si l'ordre doit être également pris en compte, il nous suffit, pour chacun de ces 9
    groupes de "quadruplés", d'en faire toutes les permutations possibles.
    Tu trouveras assez facilement, avec Google, un code tout fait (en boucles imbriquées)
    pour traiter de telles permutations avec VB.
    Chouette alors, diras-tu, sans t'apercevoir de ce que procéderainsi pour chacue groupe
    de "quadruplés" ralentirait tes extractions (que dire alors si tu devais traiter des
    groupes de 8 choisis parmi 15, puisque le nombre des permutations possibles sur chacun
    des groupes serait égal à 8! (factorielle 8)... Aïe !
    On va alors se montrer un peu plus astucieux :
    nous allons simplement extraire, une fois pour toutes, toutes les permutations possibles
    de "12345...n" (donc de 1234 dans l'exemple des quadruplés)
    SQur notre feuille excel, nous allons mettre en 1ère colonne, à partir de la ligne 2,
    tous nos "quadrublés"
    en ligne 1 (au dessus, donc), nous allons mettre tous les résultats permutés de "1234",
    à partir de la 2ème colonne.
    Que reste-t-il à faire ?
    Tout bêtement, dans chaque colonne (à partir de la 2ème) de chaque ligne, appliquer à
    ce qui se trouve en 1ère colonne l'ordre défini en toute 1ère ligne de la colonne

    Voilà qui diminuera considérablement la durée de ton traitement.

    Voilà donc. J'ai en ce qui me concerne terminé.
    A toi de mettre tout celà en oeuvre.
    Bonne continuation...

    PS : la rédaction de cet exposé de mécanisme m'a pris énormément plus de temps que l'élaboration même du mécanisme !

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 22
    Par défaut serie

    bonjour à tous et à toutes
    merci pour ton expose ucfoutu. il tres interation.
    il est vrai que si on peut diminue le nb itiration , c'est royal (le temps)pour le programme.
    si mes petites, voir tres petites connaissance en vb me permettent d'ecrire le code, je regarde cela.

    une question , j'ai retrouve un algo en delphi.
    les code delphi sont t'ils facilement transposable en VB

    cordialement

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Tu perdras beaucoup plus de temps à transposer un code tout fait dans un autre langage (Delphi, dis-tu) que d'écrire directement ton code (et tu as tous les éléments de la pensée déjà établis !).
    Et surtout : tu développes en VBA/EXCEL, donc avec une feuille et ses cellules, ce qui n'est pas le cas avec Delphi).
    Bonne continuation ...

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 577
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 577
    Par défaut
    Citation Envoyé par ucfoutu
    1) on démarre du 1
    1 23456 ==>> 1 234 à ignorer car dans le cas d'une série suivie
    1 23456 ===>> 1 345
    1 23456 ===>> 1 456
    et quid ? du
    1 23456 ==>> 1 245
    1 23456 ==>> 1 246
    1 23456 ==>> 1 235
    1 23456 ==>> 1 236
    1 23456 ==>> 1 256
    et j'en oublie surement
    ha oui 1 356 par exemple

    et j'ajouterais
    COMBIN(6;4) = 15

    et ceci sans tenir compte de l'ordre.
    et le nombre de combinaison total, en utilisant la même formule
    20 3 1140
    20 4 4845
    20 5 15504
    20 6 38760
    20 7 77520
    20 8 125970
    ...= 263739
    et si l'on prend l'exemple 20/3 combien en existe t'il qui se suivent ?
    123 234 345 .....181920 soit 18 combinaisons, il en reste quand même 1122 a trouver. je passe sur les autres
    bon courage

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour, alsimbad,

    Tu as diablement raison !
    Mon esprit "matinal" m'a en effet fait sauter un maillon !
    A chacune des "étapes", il convient d'appliquer la permutation signalée dans mon exposé sur tout ce qui suit l'espace...
    Désolé d'avoir sauté ce maillon.
    Ceci dans le but de diminuer le temps de traitement, qui demeurera toutefois assez important dans certains cas.

    Autre méthode (que je n'aime pas du tout car elle est excessivement lente au delà d'un ensemble "originel" de 7 chiffres parmi lesquels en élire n) :
    1) - extraire toutes les permutations sur ces huit chiffres et :
    2) - en examiner les n premiers et :
    n'accepter que les suites de n chiffres dont la différence entre le plus grand et le plus petit serait supérieure ou égale à n

    Il existe à ce propos une méthode de recherche, par boucles imbriquées, de toutes les permutations possibles. J'ai il y a quelque temps fait la mienne également.
    Les résultats sont les suivants : jusqu'à la permutation de 7 chiffres, ma méthode est beaucoup plus rapide. Au delà : c'est celle de boucles imbriquées qui l'est.

    Dans tous les cas de figure : tout est lent à partir de 8 chiffres à permuter. C'est la raison pour laquelle je préconise une décomposition (voir plus haut)
    C'est sans doute la raison pour laquelle (au passage) celui qui a imposé cet exertcice (car c'en est un) à didier.schmit a décidé de limiter à 15 le nombre de chiffres composant l'ensemble dans lequel choisir des combinaisons de 8 au maximum.

    Ouais ... cette deuxième méthode (celle de l'extraction de toutes les permutations puis choix des n premiers chiffres) reste démesurée si l'ordre n'est pas à considérer, car il faudrait alors (en cas d'acceptations de combionaisons dans le désordre), boucler à nouveau pour éliminer tous les "doublons" (déterminés par un sigma identique de la "suite")

    Voilà donc...

Discussions similaires

  1. Combinaison de nombres
    Par mogwai162 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 06/06/2012, 11h55
  2. Combinaisons à 6 chiffres possibles parmi 20 nombres
    Par djbebop dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 14/05/2011, 14h46
  3. Algorithme pour regrouper des nombres (combinaisons ?)
    Par Fabricer66 dans le forum Intelligence artificielle
    Réponses: 10
    Dernier message: 12/06/2009, 13h37
  4. Algorithme qui affiche le nombre de combinaison possible
    Par hsoussou dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 07/01/2009, 15h32
  5. calcul du nombre de combinaison possible
    Par Gunner4902 dans le forum Langage
    Réponses: 10
    Dernier message: 07/07/2008, 17h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo