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 :

Concaténation Matricielle VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2013
    Messages : 46
    Par défaut Concaténation Matricielle VBA
    Bonjour,

    J'aimerais réaliser la concaténation de deux Matrices via VBA:

    Soient A(1 to N, 1 to M) et B (1 to P, 1 To M), deux tableaux de données de type Variant j'aimerais avoir un tableau de données C(1 to N+P, 1 to M) Contant A puis B.
    Il s'agit en fait juste de pouvoir ajouter des lignes ou colonnes à un tableau sans devoir effectuer systématiquement deux boucles sur chacun des tableaux.

    Existe-t-il des moyens plus "directs" pour cela?
    Merci de vos réponses

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Vous pouvez augmenter la taille d'une matrice avec le mot Preserve et uniquement sur sa dernière dimension. Vous ne pourrez pas réaliser ce que vous proposer car vous augmentez la première dimension de la matrice B si vous l'initialisez en même temps que la A.

    Le code ci-dessous traite l'exemple dans la diapo

    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
    Option Explicit
     
    Private MatriceA() As Variant
    Private MatriceB() As Variant
     
    Sub ChargerLesMatrices()
     
    Dim I As Long
    Dim J As Long
     
    Dim AireACopier As Range
     
        'MsgBox (ActiveSheet.Range("AireMatriceA").Rows.Count)
     
        Set AireACopier = ActiveSheet.Range("AireMatriceA")
        ReDim MatriceA(AireACopier.Rows.Count - 1, AireACopier.Columns.Count - 1)
     
        For I = 0 To AireACopier.Rows.Count - 1
           For J = 0 To ActiveSheet.Range("AireMatriceA").Columns.Count - 1
                 MatriceA(I, J) = Cells(AireACopier.Rows(I + 1).Row, AireACopier.Columns(J + 1).Column).Value
           Next J
        Next I
        ' MsgBox (MatriceA(UBound(MatriceA, 1), UBound(MatriceA, 2)))
     
         ReDim MatriceB(AireACopier.Rows.Count - 1, AireACopier.Columns.Count - 1)
         MatriceB = MatriceA
         MsgBox (MatriceB(UBound(MatriceB, 1), UBound(MatriceB, 2)))
     
     
        ' On ajoute 3 colonnes
        ReDim Preserve MatriceB(UBound(MatriceB, 1), UBound(MatriceB, 2) + 3)
     
        MatriceB = Range(AireACopier, AireACopier.Offset(0, 3)).Value
        MsgBox (MatriceB(UBound(MatriceB, 1), UBound(MatriceB, 2)))
     
        Set AireACopier = Nothing
     
    End Sub


    Cordialement.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2013
    Messages : 46
    Par défaut
    Bonjour, et merci de ta réponse,

    En fait, je voulais éviter d'avoir recours à l'affichage et utiliser plusieurs concaténations successives pour ajouter progressivement des informations.
    Je pense que je vais revoir mon fonctionnement et: Soit passer par l'affichage des données, soit par deux boucles successives du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     For i=1 to Ubound(A,1) 
    For j=1 to Ubound(A,2)
    C(i,J)=A(i,J)
    next
    next
    ' Puis
    For i=1 to Ubound(B,1) 
    For j=1 to Ubound(B,2)
    C(i+Ubound(A,1),J+Ubound(A),1)=A(i,J)
    next
    next

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ci-joint une fonction personnalisée qui donne comme résultat un tableau assemblant les données des 2 tableaux en paramètre.

    PS: Les 2 tableaux doivent avoir le même nombre de colonnes
    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
    Function AssTab(ByVal A, ByVal B)
    Dim mA As Integer, mB As Integer, j As Integer
    Dim nA As Long, nB As Long, i As Long
    Dim C
     
    If IsArray(A) And IsArray(B) Then
        nA = UBound(A, 1)
        mA = UBound(A, 2)
        nB = UBound(B, 1)
        mB = UBound(B, 2)
        If mA = mB Then
            C = Application.Transpose(A)
            ReDim Preserve C(1 To mA, 1 To nA + nB)
            For i = 1 To nB
                For j = 1 To mA
                    C(j, i + nA) = B(i, j)
                Next j
            Next i
            AssTab = Application.Transpose(C)
        End If
    End If
    End Function

    Petit test de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test()
    Dim A, B
     
    A = [A1:C3]
    B = [F1:H7]
    [A11:C20] = AssTab(A, B)
    End Sub

Discussions similaires

  1. Formule matricielle VBA
    Par ninette24 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/04/2013, 15h15
  2. Calcul max et concaténation dans VBA Excel
    Par pontoise dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/11/2008, 14h39
  3. Concaténer en VBA ???
    Par davbad dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/06/2008, 16h11
  4. concaténation en vba dans une formule de cellule Excel
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/12/2005, 22h58
  5. Problème concaténation excel/vba
    Par rotterdamt dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 28/11/2005, 17h47

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