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 :

Essai de combinaisons [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Par défaut Essai de combinaisons
    Bonsoir,

    Je souhaiterai faire avoir toutes les combinaisons possibles d'une suite de nombres.

    J'ai des calculs qui me sortent environ 10 nombres.

    Je souhaiterais par une formule ou en VBA (je n'ai que des bases, mais je me débrouillerai ) que cela m'affiche toutes les possibilités possibles avec ces 10 nombres par groupe de 5 nombres. Et je ne veux pas qu'un chiffre apparaisse deux fois.

    Exemple:

    J'ai disons, 5 8 15 23 35 42 54 75 88 94, voila la liste que je voudrais pouvoir obtenir:

    5 8 15 23 35
    5 15 23 35 42
    5 23 35 42 54
    ...
    8 15 23 35 42
    8 12 54 88 94
    etc

    Mais je ne veux pas que la liste "15 5 23 35 42" ressorte car elle est déjà apparu a la 2eme ligne, certes pas dans le même ordre, mais je veux juste que les "listes" sortent qu'une fois peu importe l'ordre.

    j'espère avoir été clair.

    Sinon, pas de soucis pour réexpliquer

    Bonne soirée, merci !

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    Bonjour

    wahh, pas facile mais sympas à faire, j'ai utilisé les possibilités binaire conjointement à des tableaux ce qui le rend très rapide.

    Dans une feuille les 10 chiffres doivent être écris de A1 à J1
    Les combinaisons sont écritent à partir de la 2eme ligne

    code à mettre dans un module
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    Sub combinaison()
    Dim Nb() As Variant, Combi() As Integer, B1 As Integer, b2 As Integer
    Dim L As Integer, P As Integer, binvalue As String
     
    L = 0
    ReDim Combi(4, 0)
    ' récupère les valeur des 10 chiffres
    Nb = Range("A1:J1").Value
     
    'Boucle dans les possibilité binaire
    '31 = 0000011111
    '992= 1111100000
    For B1 = 31 To 992
      'conversion et inversion du résultat dec -> bin
      binvalue = StrReverse(Dec2Bin(B1))
      'si le résultat contient 5* "1"
      If Len(Replace(binvalue, "0", "")) = 5 Then
        'redimensionne le tableau
        ReDim Preserve Combi(4, L) 'Ligne dans le tableau
        P = 0 ' colonne dans le tableau
        'Boucle pour trans former les "1" en valeur de 1 à 10
        For b2 = 1 To Len(binvalue)
          'si = "1" on met la valeur correspondant au 10 nombres dans le tableau
          If Mid(binvalue, b2, 1) = "1" Then
            Combi(P, L) = Nb(1, b2)
            P = P + 1
          End If
        Next
        L = L + 1
      End If
    Next
    'recopie dans la feuille du tableau
    Range("A2").Resize(UBound(Combi, 2) + 1, UBound(Combi, 1) + 1) = Application.Transpose(Combi)
    End Sub
     
     
    'fonction de conversion Decimal en binaire
    Function Dec2Bin(ByVal n As Long) As String
    Do Until n = 0
        If (n Mod 2) Then Dec2Bin = "1" & Dec2Bin Else Dec2Bin = "0" & Dec2Bin
        n = n \ 2
    Loop
    End Function

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Par défaut
    Wahou !

    Merci de la rapidité

    Je vais essayé de comprendre tout sa maintenant.

    Et dans ce VBA tu as pris comme parametre que les nombres se trouvait en A1:J1, il y a t'il une possibilité, si les nombres se trouvent dans une colonne et que ceux ci ne sont pas "collés" les uns aux autres dans la colonne ?
    Par exemple si j'ai :

    A1 => 5
    A2 => rien
    A3 => 8
    A4 => rien
    A5 => rien
    A6 => 15

    etc.

    Et en sachant que cela peut changer, je peux avoir un nombre en A2, et peut être plus de nombre en A1. En gros une combinaison des nombres qui s'affichent (car calculés) dans la colonne, j'ai peut être mal précisé sa dans mon 1er post ...

    Est ce faisable ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    re,

    ça dépend ce que contient ta colonne A, est-ce quelle ne contient que 10 chiffres éparpillés dans les ligne ou est-ce qu'il y a d'autres données?.

    Est-ce qu'il faut trier?, est ce qu'il faut trouver les dix premiers chiffres?

    peut tu être le plus précis possible.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 13
    Par défaut
    Euh dans cette colonne il n'y a que des nombres. Et vu que ces nombres sont obtenus par calculs, il n'y a pas toujours 10 nombres, il pourra en avoir moins ou plus.

    Désolé de ne pas avoir préciser cela.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 633
    Par défaut
    bonsoir

    il n'y a pas toujours 10 nombres, il pourra en avoir moins ou plus.


    s'il y en a moins, faut-il toujours trouver les combinaison pour 5 de x chiffres?

    s'il y en a plus, même question, lesquels faut-il choisir?, tous?, les 10 premier ? quel sera le critère?

    le principe du code et de remplir un tableau avec X élément.
    Suivant le nombre de chiffres servant aux combinaisons (précédemment 5) et la valeur de x définir la valeur de la boucle, et c'est repartis.

    Mais il faut définir précisément les critères .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Algo] Trouver un arrangement ou une combinaison d'éléments
    Par Morvan Mikael dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 20/04/2013, 11h46
  2. [combinatoire] combinaisons de toutes longueur
    Par Toorop dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 16/02/2007, 16h08
  3. Combinaison de deux selects simples
    Par devtrax dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/09/2004, 14h09
  4. Somme de combinaisons
    Par phig dans le forum Mathématiques
    Réponses: 3
    Dernier message: 24/10/2003, 15h03
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

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