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 :

Multiplications multiples de matrices (MMult)


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
    Mars 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 24
    Par défaut Multiplications multiples de matrices (MMult)
    Bonjour,

    Je bloque depuis quelques heures sur mon code vba. Mon idée est de multiplier une matrice affectée à un array(18,18) un nombre de fois indéterminé. J'utilise dès lors la fonction WorksheetFunction.MMult mais après plusieurs tentatives je continue de bloquer sur incompatibilités, affectations impossibles,... Je vous laisse la partie incriminée de mon code:

    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
     
    '   Declaration of the couple matrix available in sheet ListandData
        Dim GMat(1 To 18, 1 To 18) As Single
        Dim GMat1()
        Dim GMat2(1 To 18, 1 To 18) As Single
        Dim GMat3()
     
    '   Recovering the matrix
        For Counter1 = 1 To 18
            For Counter2 = 1 To 18
                Counterx1 = Counter1 - 1
                Counterx2 = Counter2 - 1
                GMat(Counter1, Counter2) = Sheets("ListAndData").Range(Sector) _
                .Offset(Counterx1, Counterx2).Value
                GMat1(Counter1, Counter2) = GMat(Counter1, Counter2)
            Next Counter2
        Next Counter1
     
    '   Operations on matrixes
          If TTM > 2 Then
            For Counter = 2 To Int(TTM)
            GMat = Application.WorksheetFunction.MMult(GMat, GMat1)
               If (Not (Int(TTM) = TTM) And Counter = Int(TTM)) Then
                    GMat1() = Application.WorksheetFunction.MMult(GMat, GMat1)
                    For Counter1 = 1 To 18
                        For Counter2 = 1 To 18
                            GMat(Counter1, Counter2) = GMat(Counter1, Counter2) + _
                            (GMat1(Counter1, Counter2) - GMat(Counter1, Counter2)) * (TTM - Int(TTM))
                         Next Counter2
                    Next Counter1
                End If
            Next Counter
          End If
     
          GMat3 = WorksheetFunction.MMult(GMat, WorksheetFunction.Transpose(Vector))
     
    '        Next Counter
    '    End If
        GMat3 = WorksheetFunction.MMult(GMat1, WorksheetFunction.Transpose(Vector))
    Ce code est à mon humble avis le plus proche d'être juste parmi les solutions que j'ai envisagées. Merci d'avance pour votre aide.

  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
    Salut.
    Tu n'as pas précisé la ligne constituant un problème.
    Mais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GMat = Application.WorksheetFunction.MMult(GMat, GMat1)
    ne peut marcher puisque tu l'as déclaré en tableau. Tu devrais le déclarer en variant pour ce type d'affectation.
    Tu affectes également dans ta boucle GMat1 qui n'est pas dimensionné


    Ce code est à mon humble avis le plus proche d'être juste parmi les solutions que j'ai envisagées. Merci d'avance pour votre aide.
    Remarque que tu pouvais obtenir tes 2 tableaux dans des variants sans passer par des boucles. J'ai vu un décalage d'un pas pour la colonne et 1 pas pour la ligne. Ceci peut aller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Mat,GMat,GMat1,GMat2....
    GMat=Sheets("ListAndData").Range(Range("sector").Cells(0, 0).Address & ":" & Range("sector").Cells(17, 17).Address)
    GMat1=Sheets("ListAndData").Range(Range("sector").Cells(1, 1).Address & ":" & Range("sector").Cells(18, 18).Address)
    peut être que Sector n'est pas aux dimensions 18,18
    te donne tes tableau en 2 lignes d'inctructions.
    Le produit Matriciel des deux tableaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mat = Application.WorksheetFunction.MMult(GMat, GMat1)
    Cordialement.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 24
    Par défaut Résolu
    Super tout marche à merveille désormais. Ce que j'ignorais mais que je soupçonnais c'était qu'il ne faut pas déclarer des tableaux dimensionnés destinés à recevoir le résultat de l'opération Mmult.
    Merci et bon week-end à toi.

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

Discussions similaires

  1. Multiplication d'une matrice par un vecteur
    Par dridri85 dans le forum OpenGL
    Réponses: 5
    Dernier message: 20/11/2009, 00h09
  2. multiplication de deux matrices
    Par ikuzar dans le forum Débuter
    Réponses: 2
    Dernier message: 19/10/2009, 14h38
  3. [MIPS] Multiplication/Transposée de matrice
    Par diak22 dans le forum Autres architectures
    Réponses: 1
    Dernier message: 26/11/2007, 20h18
  4. Calcul de la multiplication de deux matrices
    Par al_alias dans le forum Pascal
    Réponses: 2
    Dernier message: 30/05/2007, 22h37

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