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 :

Produit matriciel booléen en VB pour Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut Produit matriciel booléen en VB pour Excel
    Bonjour,
    j'essaye de développer une fonction en vba pour faire du produit matriciel booléen en excel, mais ma fonction ne fonctionne pas et je ne sais pas pourquoi. Pourriez-vous regarder mon code et me dire ce qui coince? Il me dit qu'il y a une erreur de type de valeur mais je ne trouve pas d'où vient le problème.

    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
    Function produitmat(x, y)
        mat1 = x
        mat2 = y
     
        l1 = UBound(mat1, 1)
        l2 = UBound(mat2, 1)
        c1 = UBound(mat1, 2)
        c2 = UBound(mat2, 2)
     
        If (c1 = l2) Then
            Dim resultat(l1, c2) As Boolean
            For i = 1 To l1
                For j = 1 To c2
                    resultat(i, j) = False
                    For k = 1 To c1
                        If (mat1(i, k) And mat2(k, j) = True) Then
                            resultat(i, j) = True
                        End If
                    Next k
                Next j
            Next i
            produitmat = resultat
        End If
    End Function
    Merci d'avance
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tu aurai pu nous mettre un exemple d'appel...

  3. #3
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Dans excel, je l'appelle comme ceci: je sélectionne 4 cases et je mets =produitmat(A1:B2;D1:E2) puis ctrl+maj+enter pour générer le tableau. A1:B2 et D1:E2 contiennent des valeurs booléennes.
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Je pense que ça vient de là
    If (mat1(i, k) And mat2(k, j) = True) Then
    resultat(i, j) = True
    End If
    Tu peux écrire ça de plein de manières
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                        If (mat1(i, k) And mat2(k, j) Then
                            resultat(i, j) = True
                        End If
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                       If (mat1(i, k) = true And mat2(k, j) = true Then
                            resultat(i, j) = True
                        End If
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat(i, j) = mat1(i, k) And mat2(k, j)
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat(i, j) = mat1(i, k) = true And mat2(k, j) = true
    Parce que tu as partout affaire à des booléens
    Tu dis

  5. #5
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    J'ai essayé tes deux premières propositions, les deux dernières ne me conviennent pas. Ca ne marche toujours pas

    Il me dirait qu'il manquerait une donnée et je pense que ce sera c2. Cette ligne vous semble correcte?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim resultat(l1, c2) As Boolean
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par v4np13
    J'ai essayé tes deux premières propositions, les deux dernières ne me conviennent pas. Ca ne marche toujours pas

    Il me dirait qu'il manquerait une donnée et je pense que ce sera c2. Cette ligne vous semble correcte?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim resultat(l1, c2) As Boolean
    non faut le faire en deux phase ...:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim resultat() As Boolean
    ..
    i1 =..
    C2 = ...
    ...
    ReDim resultat(l1, c2)

  7. #7
    Membre actif
    Homme Profil pro
    Analyste/développeur Java EE
    Inscrit en
    Janvier 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste/développeur Java EE

    Informations forums :
    Inscription : Janvier 2005
    Messages : 376
    Points : 271
    Points
    271
    Par défaut
    Merci beaucoup pour la rapidité de vos réponse, le problème est résolu. Voici la fonction pour ceux que ca intéresserait.
    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
    Function produitmat(x, y)
        mat1 = x
        mat2 = y
     
        Dim resultat() As Boolean
        l1 = UBound(mat1, 1)
        l2 = UBound(mat2, 1)
        c1 = UBound(mat1, 2)
        c2 = UBound(mat2, 2)
     
        If (c1 = l2) Then
            ReDim resultat(l1, c2)
            For i = 1 To l1
                For j = 1 To c2
                    resultat(i, j) = False
                    For k = 1 To c1
                        If (mat1(i, k) = True And mat2(k, j) = True) Then
                            resultat(i, j) = True
                        End If
                    Next k
                Next j
            Next i
            produitmat = resultat
        End If
    End Function
    Utilisez les balises "Code" (alt+c).
    Nous avons répondu à votre question? Pensez au tag

    Le "lol" est aux boulets ce que le ";" est aux programmeurs

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

Discussions similaires

  1. [POI] Style et taille de cellule pour Excel
    Par relivio dans le forum Documents
    Réponses: 6
    Dernier message: 28/05/2014, 10h45
  2. Produit matriciel : diviser pour régner
    Par molka21 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 05/03/2012, 19h49
  3. affichage de produit matricielle sur excel
    Par opensource dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/02/2010, 11h42
  4. [CR ?] Export données pour Excel
    Par grom91 dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 20/06/2008, 12h05
  5. Problème: produit matriciel
    Par v4np13 dans le forum Algorithmes et structures de données
    Réponses: 19
    Dernier message: 17/05/2005, 17h23

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