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 scalaire sous vba sommeprod


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 232
    Par défaut produit scalaire sous vba sommeprod
    Bonjour ,
    Je suis débutant sous VBA.Je voudrai utiliser sommeprod pour faire un produit scalaire.En effet j'ai un vecteur sur une feuille et un tableau sur une autre feuille je voudrai faire le produit scalaire du vecteur avec chaque colonne du tableau et récupérer le résultat sur une autre feuille.
    Voici le code que j'ai tenté desesperement:

    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
    Sub troitab()
    Dim resultat As Worksheet, TXSRGB As Worksheet, besoin As Worksheet, effet
    Dim tableau As Variant
    Set resultat = ThisWorkbook.Worksheets("resultat")
    Set besoin = ThisWorkbook.Worksheets("besoin")
    Set TXSRGB = ThisWorkbook.Worksheets("TXSRGB")
    Set effet = ThisWorkbook.Worksheets("effet")
     
    tableau = effet.Range("D96:J119")
     
    i = 1
     
    Do
    TXSRGB.Range("I" & i).FormulaLocal = "=sommeprod(besoin.Range(B243:B266), tableau.colums(i) )"
    i = i + 1
    Loop While i < 8
     
    End Sub
    Donc j'affiche le résultat dans la feuille "TXSRGB", le vecteur est dans la feuille "besoin " et la boucle mpe permettrai de balayer les colonnes du tableau.

    Je compte sur vous, Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Essaie avec

    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
    Sub troitab()
    Dim resultat As Worksheet, TXSRGB As Worksheet, besoin As Worksheet, effet As Worksheet
    Dim MaPlage As Range
    Dim i As Integer
        Set resultat = ThisWorkbook.Worksheets("resultat")
        Set besoin = ThisWorkbook.Worksheets("besoin")
        Set TXSRGB = ThisWorkbook.Worksheets("TXSRGB")
        Set effet = ThisWorkbook.Worksheets("effet")
        i = 1
        Do
            With effet
                Set MaPlage = .Range(.Cells(96, i + 3), .Cells(119, i + 3))
            End With
            TXSRGB.Range("I" & i) = WorksheetFunction.SumProduct(besoin.Range("B243:B266"), MaPlage)
            i = i + 1
        Loop While i < 8
    End Sub
    Cordialement.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut Formule produit scalaire SUMPRODUCT en Excel VBA
    Bonjour erlerwade,

    Dans la solution précédente, on calcule le produit scalaire à chaque appel de troitab().

    1. Génération de la formule d'un Produit Scalaire vecteur par tableau

    Dans cette solution, on écrit la formule du produit scalaire dans chaque cellule du vecteur résultant.

    Dans ma version d'Excel, j'ai dû changer la fonction sommeprod() de formule dans une cellule par SUMPRODUCT(). Voir la constante strSumProd.

    On commence par décrire, avec des constantes en terme de rangées et de colonnes, chaque feuille source c-a-d le vecteur source et le tableau source du produit scalaire ainsi que la feuille résultat.
    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
    40
    41
    Option Explicit ' Produit Scalaire d'un vecteur par chaque colonne d'un tableau
    ' ============== Description de la feuille Besoin source
    Public Const rowNeedStart = 243 ' Vecteur source B243:B266
    Public Const rowNeedEnd = 266
    Public Const colNeed = 2 ' B
     
    ' ============== Description de la feuille Effet source
    Public Const rowEffectStart = 96 ' Tableau source D96:J119 à balayer par colonne
    Public Const rowEffectEnd = 119
    Public Const colEffectStart = 4 ' D
    Public Const colEffectEnd = 10  ' J
     
    ' ============== Description de la feuille TXSRGB cible
    Public Const rowDotStart = 1 ' Première rangée du résultat du produit scalaire
    Public Const rowDotEnd = colEffectEnd - colEffectStart + 1 ' 7
    Public Const colDotProduct = 9  ' I
     
    Sub troitab() ' Point d'entrée principal du Produit Scalaire entre deux vecteurs
     
        SetFormulaDotProduct ThisWorkbook.Worksheets("besoin"), ThisWorkbook.Worksheets("effet"), _
            ThisWorkbook.Worksheets("TXSRGB") ' Résultat cible
    End Sub
     
    ' Ecrire la formule du produit scalaire du vecteur sheetBesoin par le tableau sheetEffet
    ' dans la feuilel résultat sheetTarget
    Sub SetFormulaDotProduct(sheetBesoin As Worksheet, sheetEffet As Worksheet, sheetTarget As Worksheet)
    Const strSumProd = "=SUMPRODUCT(" ' Dans un Excel français, cela pourrait être "=sommeprod("
    Dim strFormula As String, indRow As Long, rngNeed As Range, rngEffect As Range
     
        With sheetBesoin ' Vecteur source fixe
            Set rngNeed = .Range(.Cells(rowNeedStart, colNeed), .Cells(rowNeedEnd, colNeed))
        End With
        With sheetEffet  ' Tableau source à balayer par colonne
            Set rngEffect = .Range(.Cells(rowEffectStart, colEffectStart), .Cells(rowEffectEnd, colEffectEnd))
        End With
        For indRow = rowDotStart To rowDotEnd
            strFormula = strSumProd + rngNeed.Address(ReferenceStyle:=xlR1C1, External:=True) + "," + _
                                      rngEffect.Columns(indRow).Address(ReferenceStyle:=xlR1C1, External:=True) + ")"
            sheetTarget.Cells(indRow, colDotProduct).FormulaR1C1 = strFormula
        Next
    End Sub
    2. Test et résultat attendu

    Dans la feuille "besoin", le Vecteur source B243:B266 est rempli avec les valeurs de 1 à 24 verticalement.
    Dans la feuille "effet", le Tableau source D96:J119 est rempli de 7 colonnes ayant les valeurs 1 à 24.

    Dans la fenêtre d'Exécution immédiate (Ctrl+G) du VBE d'Excel, copier-coller et valider par ENTER :
    Dans la feuille "TXSRGB", le résultat cible est le vecteur I1:I7 ayant la valeur 4900 dans chaque cellule verticalement.
    ___________

    Si la discussion est résolue, vous pouvez cliquer sur le bouton

    En bas de ce message s'il vous a apporté des éléments de réponse pertinents, pensez également à voter en cliquant sur le bouton vert ci-dessous.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    232
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 232
    Par défaut
    Merci beaucoup gFZT82 la solution que tu m'a proposé est exactement ce dont j'ai besoin encors une fois merci et bravoooooooo

    Merci egalement Mattchese la solution que tu m'a proposée m'a egalement servi pour traiter un autre probleme merci et bravooooooooo

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

Discussions similaires

  1. [XL-2007] Somme de produits avec filtres (sous.total + sommeprod)
    Par pastis.vi dans le forum Excel
    Réponses: 13
    Dernier message: 06/06/2017, 20h16
  2. calcul de produit scalaire sous PHP
    Par abegault dans le forum Langage
    Réponses: 5
    Dernier message: 21/05/2008, 15h41
  3. Réponses: 8
    Dernier message: 07/10/2004, 12h08
  4. (VBA-A] Requete access sous VBA
    Par vanima dans le forum VBA Access
    Réponses: 12
    Dernier message: 20/07/2004, 17h07
  5. Syntaxe PARAMETERS pour requête sous VBA
    Par GAGNON dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/11/2003, 12h39

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