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 :

VBA Excel - Générer combinaison suivant critères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Comptable
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut VBA Excel - Générer combinaison suivant critères
    Bonjour à toutes & tous,

    Je suis novice dans les macros Excel mais j'apprends au fur et à mesure par moi-même (par les recherches et la pratique).

    Je souhaiterais savoir s'il est possible de générer des combinaisons de chiffres selon des critères déterminés.

    Concrètement, si j'ai des chiffres allant de 1 à 30, je souhaiterais sortir toutes les combinaisons possibles de 5 chiffres composées de 3 nombres impairs et 2 nombres pairs (sans doublons) > Par ex : 1 - 7 - 9 - 12 - 24.

    Je suppose qu'une boucle pourrait faire l'affaire mais je ne vois pas comment restreindre les pairs, impairs, doublons et ne reprendre qu'une seule fois chaque combinaison.

    Pourriez-vous m'aiguiller sur la méthode à utiliser?

    Merci pour votre aide.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    C'est le type de demande qui revient régulièrement sur ce forum et le demandeur en arrive toujours à la conclusion qu'une telle liste est inutile.
    Je vais t'expliquer pourquoi.

    Citation Envoyé par Wulfstan Voir le message
    Concrètement, si j'ai des chiffres allant de 1 à 30, je souhaiterais sortir toutes les combinaisons possibles de 5 chiffres composées de 3 nombres impairs et 2 nombres pairs (sans doublons) > Par ex : 1 - 7 - 9 - 12 - 24.
    Si je ne me trompe pas, ça fait 47 775 combinaisons possibles (ou 716 625 si l'ordre a une importance).
    Il est peu probable qu'une telle série ait un intérêt pour un traitement "manuel" ou serve pour un affichage (à raison d'une centaine de lignes par page, ce qui est déjà beaucoup, ça ferait un bouquin d'à peu près 500 pages).

    Je suppose donc que cette liste servira pour un traitement numérique.
    Si c'est bien le cas, il faudrait intégrer cette génération au traitement, ce qui serait plus efficace que de générer une telle liste et d'en faire le traitement à postériori.

    Bref, il faudrait savoir ce que tu comptes faire de cette liste pour apporter une réponse réellement constructive.

    Je suppose qu'une boucle pourrait faire l'affaire mais je ne vois pas comment restreindre les pairs, impairs, doublons et ne reprendre qu'une seule fois chaque combinaison.
    Pour éliminer les paires/impaires, tu peux utiliser la fonction Mod() avec une base 2.
    Personnellement, je pense qu'il serait plus efficace de faire une boucle de 1 à 15 et de multiplier par 2 (pour avoir la liste des paire) ou x 2 - 1 (pour les impaires).

    Pour éviter les doublons, la solution dépend si l'ordre des nombre a une importance.
    Pour être plus clair, si "1 - 3" a déjà été généré, faut-il aussi générer "3 - 1" ?

    Autre question : les impaires sont-ils toujours les trois premiers et les paires les deux derniers ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Malgré ce que dit Menhir, mais comme j'avais déjà commencé, au risque que cela ne serve à rien, je dépose quand même une solution, histoire de ne pas avoir cogité inutilement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub Combinaisons()
        Application.ScreenUpdating = False
        Range("A2:C100000").ClearContents
     
        'Constitution liste impaire
        L = 2
        For i = 1 To 25 Step 2
            For j = i + 2 To 25 + 2 Step 2
                For k = j + 2 To 25 + 4 Step 2
                Cells(L, "A") = Cells(1, i) & "_" & Cells(1, j) & "_" & Cells(1, k)
                L = L + 1
        Next k, j, i
     
        'Constitution liste paire
        L = 2
        For i = 2 To 28 Step 2
            For j = i + 2 To 28 + 2 Step 2
                Cells(L, "B") = Cells(1, i) & "_" & Cells(1, j)
                L = L + 1
        Next j, i
     
        'Assemblage des combinaisons
        DerLig_A = [A2].End(xlDown).Row
        Derlig_B = [B2].End(xlDown).Row
        L = 2
        For i = 2 To DerLig_A
            For j = 2 To Derlig_B
                Cells(L, "C") = Cells(i, "A") & "_" & Cells(j, "B")
                L = L + 1
        Next j, i
    End Sub
    Le fichier
    Pièce jointe 468485

    Cdlt

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    @menhir
    Si je ne me trompe pas, ça fait 47 775 combinaisons possibles (ou 716 625 si l'ordre a une importance).
    c'est pas l'inverse
    en toute logique si l'ordre est important il y aura moins de nombre

    de plus !!

    Concrètement, si j'ai des chiffres allant de 1 à 30, je souhaiterais sortir toutes les combinaisons possibles de 5 chiffres composées de 3 nombres impairs et 2 nombres pairs (sans doublons) > Par ex : 1 - 7 - 9 - 12 - 24.
    c'est pas tout a fait clair
    pas de doublons dans les chaines ou les items ???
    exemple
    est il autorisé?:
    7-13-7-14-8 ou pas
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Menhir a raison.
    Le nombre de combinaisons sans arrangement est le plus petit des deux.
    Exemple :
    combinaisons de 2 parmi 3 de a,b et c --->> ab, ac et bc
    - sans arrangement --->> ab, ac et bc
    - avec arrangement --->> ab, ac, ba, bc, ca, cb

  6. #6
    Membre habitué
    Homme Profil pro
    Comptable
    Inscrit en
    Janvier 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Janvier 2019
    Messages : 8
    Par défaut
    Merci pour vos réponses. Effectivement, le nombre de combinaisons possibles peut rendre le travail impossible. Je n'y avais pas pensé

    c'est pas tout a fait clair
    pas de doublons dans les chaines ou les items ???
    exemple
    est il autorisé?:
    7-13-7-14-8 ou pas
    C'est vrai que ce n'est pas clair. En fait quand je dis pas de doublon, cela signifiait que dans les 5 numéros choisis, le même ne peut pas revenir 2 fois. 7-13-7-14-8 ne serait donc pas autorisé.

    Bonjour,

    Malgré ce que dit Menhir, mais comme j'avais déjà commencé, au risque que cela ne serve à rien, je dépose quand même une solution, histoire de ne pas avoir cogité inutilement.
    Merci beaucoup. Je n'ai pas encore eu le temps d'y regarder mais je vous dis quoi dès que je l'aurai testé.

    Pour éviter les doublons, la solution dépend si l'ordre des nombre a une importance.
    Pour être plus clair, si "1 - 3" a déjà été généré, faut-il aussi générer "3 - 1" ?
    L'ordre n'a pas d'importance, 1-3 et 3-1 sont la même combinaison.

Discussions similaires

  1. vba excel : Générer un bruit blanc gaussien ou l'équivalent
    Par Vbajon dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 15/09/2017, 16h01
  2. [XL-2007] Formulaire VBA Excel - recherche sur plusieurs critères et affichage des résultats
    Par kl1ft dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/08/2016, 20h44
  3. [XL-2003] Probleme VBA excel générer mail automatique avec piece jointe
    Par itshy dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/03/2012, 10h46
  4. [VBA]Compter les enregistrement suivant critère d'un champs
    Par wachoo31 dans le forum VBA Access
    Réponses: 9
    Dernier message: 27/04/2007, 07h42
  5. [VBA Excel] Filtre sur plusieurs critères
    Par tazmania dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/12/2006, 11h12

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