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 :

Comment combiner plusieurs tableaux en un grand [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 2
    Par défaut Comment combiner plusieurs tableaux en un grand
    Bonjour,
    Après plusieurs recherches sur le web, je n'arrive pas à trouver mon bonheur sur un souci que j'ai concernant la fusion de plusieurs tableaux en un.

    Voici un exemple de ce que je souhaiterais avoir:
    trois tableaux (le nombre est variable... )
    x11 x12 x13
    x21 x22 x23

    y11 y12
    y21 y22

    z11 z12
    z21 z22
    z31 z32

    Avec ces trois tableaux d'exemple je souhaiterais avoir un seul et unique tableau rassemblant l'ensemble des combinaisons possibles suivant la première colonne de chaque tableau:
    j'aurais donc (en concaténant les valeurs dans la première colonne):
    x11y11z11 x11 x12 x13 y11 y12 z11 z12
    x11y11z21 x11 x12 x13 y11 y12 z21 z22
    x11y11z31 x11 x12 x13 y11 y12 z31 z32
    x11y21z11 x11 x12 x13 y21 y22 z11 z12
    x11y21z21 x11 x12 x13 y21 y22 z21 z22
    x11y21z31 x11 x12 x13 y21 y22 z31 z32
    x21y11z11 x21 x22 x23 y11 y12 z11 z12
    x21y11z21 x21 x22 x23 y11 y12 z21 z22
    x21y11z31 x21 x22 x23 y11 y12 z31 z32
    x21y21z11 x21 x22 x23 y21 y22 z11 z12
    x21y21z21 x21 x22 x23 y21 y22 z21 z22
    x21y21z31 x21 x22 x23 y21 y22 z31 z32

    comme vous pouvez le voir, vu que les tableaux sont "dynamiques", on a des combinatoires qui explosent et je ne voudrais pas avoir à faire ça à la main!!!
    Dans l'exemple on a 2*2*3=12

    En recherchant sur le net je ne trouve pas d'outil Excel, on parle très souvent de RECHERCHEV ou de tableau croisé dynamique mais ça a l'air d'être l'inverse que je veux.

    Auriez-vous des idées pour implémenter ce système??

    Merci d'avance pour votre aide,
    ind57

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Il faudrait que tu précises mieux les règles car
    - pourquoi ne prendre en compte que la première colonne du premier tableau ?
    - les différentes valeurs sont dans une cellule différente ?
    - comment détermine-t-on le nombre de tableaux ?
    - etc

  3. #3
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Si je comprends bien, tu a un nombre a priori inconnu de données et il faut trouver toutes les combinaisons possibles que l'on peut faire avec ce nombre. C'est un algorithme de permutation qu'il te faut. Si tu fais une recherche "algorithme de permutation" sur internet, tu trouveras des explications sur ce que c'est et sur la façon de l'implémenter.
    Voici une explication rapide :
    Soit une liste de n éléments dont on veut trouver toutes les permutations possibles : 1-2-3- ... - n. Il y a n! (n factoriel) permutations possibles.
    Pour trouver toutes les permutations possibles on suit les étapes suivantes :
    • on fixe le premier élément :1- 2-3-...-n
    • on trouve toutes les permutations de n-1 éléments à droite du premier élément --> il y en a (n-1)!
    • on fixe un autre élément en premier élément : 2- 1-3-...-n
    • on trouve les permutations des n-1 éléments à droite de ce nouveau premier élément --> il y en a (n-1)!
    • on fixe un autre élément en premier élément : 3- 1-2-...-n
    • on trouve les permutations des n-1 éléments à droite de ce nouveau premier élément --> il y en a (n-1)!
    • etc...

    On fait cela n fois, donc on trouve bien n fois (n-1)! permutations, soit n! permutations.
    Maintenant, me diras-tu : comment fais-t-on pour trouver les (n-1)! permutations quand on a fixé le premier élément? Ben..on fait la même chose avec les n-1 éléments. On fixe une élément, on trouve les (n-2)! permutations des autres éléments etc ...
    Ceci est donc un algorithme récursif, càd qu'on va faire appel à l'algorithme qu'on écrit dans l'algorithme même : attention à bien mettre une condition d'arrêt (un cas où on passera dans tous les cas et où l'on ne fait pas appel à l'algorithme lui-même). Ici, ce sera, si le nombre d'élément est égal à 1, alors la fonction retournera l'élément lui-même.
    Vu qu'on a parlé de factoriel (n!), on n'est pas trop trop étonné qu'on a affaire à un algorithme récursif. En effet, un exemple "simple" d'algo récursif est le calcul du factoriel.

  4. #4
    Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 2
    Par défaut
    Bonjour Riaolle,
    Merci pour ta reponse.
    Je comprends qu'il va falloir que je fasse des petits programmes en VBA pour compiler tout ça!
    Effectivement en récursif ça va faire de sacré tailles de tableaux.
    Merci encore pour ta réponse,
    ind57

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Si tu réussis à écrire un code, ça m'intéresserait bien de voir à quoi ça ressemble

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

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

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Comme ça m'intéressait, j'ai continué à chercher un peu de mon côté, voilà ce à quoi je suis arrivée :
    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
    Function perm(liste() As String, base As String) As String
        Dim n As Long
        n = UBound(liste)
        If n = 0 Then       'condition d'arrêt de l'algo récursif (1 seul élément dans la liste)
            perm = base & " " & liste(0) & "-"
            Exit Function
        End If
     
        Dim liste2() As String
        ReDim liste2(n - 1)
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer
        For i = 0 To n      'pour fixer le premier élément de la liste
            k = 0
            For j = 0 To n      'création de la liste sans l'élément fixé
                If j <> i Then liste2(k) = liste(j): k = k + 1
            Next j
            perm = perm & perm(liste2, base & " " & liste(i))       'on appel la fonction avec la liste sans l'élément fixé
        Next i
    End Function
    perm retourne une chaine de caractère avec toutes les permutations, les permutations étant séparées par un "-". Tu peux les récupérer avec la fonction Split pour les écrires dans les cellules.

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

Discussions similaires

  1. Comment comparer plusieurs tableaux entre eux ?
    Par djibril dans le forum Téléchargez
    Réponses: 2
    Dernier message: 21/08/2012, 13h14
  2. Comment créer plusieurs tableaux avec un seul ?
    Par keokaz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2012, 10h20
  3. [XL-2003] combiner plusieurs tableaux croisés
    Par amily dans le forum Excel
    Réponses: 3
    Dernier message: 30/05/2011, 15h21
  4. Réponses: 1
    Dernier message: 16/03/2007, 17h30

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