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 :

Fusion de deux tableau VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut Fusion de deux tableau VBA
    Chères amies chers amis du forum
    Je souhaites fusionner deux tableau VBA de tailles différentes par une méthode ou algo plus optimal que boucle plus redim preserve. L objectif final est d obtenir un array qui serviras de paramétre a un autofilter.
    Auriez vous une idée svp?
    Merci

  2. #2
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    bonsoir,

    Un tableau est un regroupement d'éléments.
    Le principe du tableau, c'est accéder à un élément du jeu d'éléments par un indice.
    Fusionner 2 tableaux implique forcément une boucle de façon transparente ou non par la création d'un nouvel tableau comportant suffisamment d'éléments pour y recopier les 2 tableaux.
    A moins que tu sois prêt à rédiger le nombre de lignes de code qu'il faut à la place d'une boucle!

  3. #3
    Membre éclairé Avatar de Nono Sto
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 350
    Par défaut
    Merci

    J'avais pas grand espoir mais comme je ne connais pas toutes les fonction de VBA, peut etre qu'il existait une qui faisait cela.

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Bonjour,

    Un petit exemple fusion de 2 tableaux à 1 dimension sans boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
      Dim a As Variant
      Dim b As Variant
      Dim c As String
      Dim d As String
      Dim e() As String
      a = Array("l", "m", "n")
      b = Array("o", "p", "q")
      c = Join(a, ",")
      d = Join(b, ",")
      e = Split(c & "," & d, ",")
    End Sub
    Je ne suis pas certain que ça puisse servir à ton cas mais ça peut être intéressant pour certains...
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour alain
    je ne suis pas certain que ça puisse servir à ton cas mais ça peut être intéressant pour certains...
    oui, pour moi car en reprenant 2 tableaux qui contiennent une plage, j'ai traduit ton code de cette façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim a, b, x As Integer
    Dim c As String
    Dim d As String
    Dim e() As String
     
    a = Range("A2:A8")
    b = Range("B2:B8")
    c = Join(WorksheetFunction.Transpose(a), ",")
    d = Join(WorksheetFunction.Transpose(b), ",")
    e = Split(c & "," & d, ",")
    For x = 0 To UBound(e)
      MsgBox e(x)
    Next
    Bonne soirée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Bonsoir,
    Je pensais à ces fonctions (Join et Split) qui utilisent forcément en interne des boucles.
    Je me cites:
    Fusionner 2 tableaux implique forcément une boucle de façon transparente ou non par la création d'un nouvel tableau ...
    Il m'avait semblé que Nono Sto ne voulait pas à tort de boucles et de Redim Preserve pour des raisons de performances. Cette méfiance à l'égard de boucles ne me semblait pas justifiée.

    Ces fonctions (Join et Split) sont certainement les dernières auxquelles j'aurais recours dans une qu^te de performances pour deux tableaux géants à fusionner.
    Je n'ai pas vérifié, si quelqu'un pouvait faire les essais sur de grandes données, il est évident que la solution actuelle couplée avec la fonction WorkSheet Transpose est encore la mois envisageable dans un souci de performances.
    Alors qu'une boucle bien pensée serait plus optimale et rapide d’exécution.
    Par exemple:
    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
     
        Tb1_Bound = UBound(Table1)
        Sum_Bound = Tb1_Bound + UBound(Table2)
        ReDim Table_Fuse(Sum_Bound)
     
        While AllBound
     
            If SumBound > ref1 Then
                Table_Fuse(AllBound) = Table2(Sum_Bound - Tb1_Bound)
            Else
                Table_Fuse(AllBound) = Table1(Sum_Bound)
            End If
     
            AllBound = AllBound - 1
     
        Wend
    Une autre solution avec une Api déclarée en tête de module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Declare Sub Fusion Lib "kernel32.dll" Alias "RtlMoveMemory" ( _
                            ByRef Final As Any, _
                            ByRef Cible As Any, _
                            ByVal Nb_elem As Long)
     
     
        'Dans une procédure test, Les 2 tableaux doivent être du même type de données.
        ReDim tb_final(UBound(tb1) + UBound(tb2))
        Fusion tb_final(1), tb1, (UBound(tb1) * Len(tb1(1)))
        Fusion tb_final(UBound(tb1) + 1), tb2, (UBound(tb2) * Len(tb2(1)))
    Les exemples supposent qu'on est en base 1 avec les tableaux.

Discussions similaires

  1. fusion de deux tableaux en un autre tableau
    Par Naswd_94 dans le forum Débuter
    Réponses: 5
    Dernier message: 09/12/2014, 09h20
  2. Réponses: 2
    Dernier message: 27/05/2011, 10h30
  3. Afficher un tableau sur la fusion des deux colonnes de l'article
    Par slaima15 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 18
    Dernier message: 13/10/2010, 02h35
  4. Fusion de deux tableaux triés en un tableau trié
    Par adri010 dans le forum Débuter
    Réponses: 8
    Dernier message: 10/06/2010, 19h50
  5. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53

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