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 :

Fonction avec boucle pour multiplier deux variables


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Financier
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Financier

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Par défaut Fonction avec boucle pour multiplier deux variables
    Bonjour à tous !

    Je viens chercher de l'aide ici car j'aime créer une fonction permettant de faire la chose suivante : j'ai deux colonnes avec des données ( col A et col B avec des taux dans chaque colonnes)
    et je souhaite multiplier A1 * B1 + A2 * B2 + ... + A7*B7.

    Je ne sais pas comment faire pour boucler ça ...


    N'arrivant pas à faire une fonction, j'ai tester:
    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
    Function Rentabilite(Renta As Double, Poids As Double)
    Dim i As Long
    Dim j As Long
     
    Renta = Cells(i, 1)
    Poids = Cells(1, j)
     
    For i = 1 To 2
     For j = 1 To 2
     
    Rentabilite = Renta * Poids
     Next j
     
    Next i
     
    End Function
    Cela ne fonctionne pas ...

    Merci à vous

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par VBANoJutsu Voir le message
    Bonjour,

    ???
    C'est donné directement par la fonction SOMMEPROD.

    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function Rentabilite(ByVal AireRentabilite As Range, ByVal AirePoids As Range) As Double
             Rentabilite = WorksheetFunction.SumProduct(AireRentabilite, AirePoids)
    End Function

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    C'est donné directement par la fonction SOMMEPROD.
    Autre solution : une formule matricielle =SOMME(A1:A7*B1:B7) à valider avec Ctrl+Shift+Entrée

    En VBA, il faut passer par FormulaArray : https://docs.microsoft.com/fr-fr/off...ectedfrom=MSDN

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Salut Menhir,

    Pour avoir testé avant de mettre en ligne, ma fonction donne aussi la bonne valeur.

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Bonjour Eric
    Citation Envoyé par Eric KERGRESSE Voir le message
    Pour avoir testé avant de mettre en ligne, ma fonction donne aussi la bonne valeur.
    Je n'en doute pas.
    C'est pourquoi j'ai écris dans mon message "autre solution" : c'est ni mieux ni pire, simplement une autre approche.

    Cela dit, d'un point de vue personnelle, une formule aussi bien avec SOMMEPROD que fonction matricielle me semble si simple que je ne vois pas l'intérêt d'une fonction VBA.

  6. #6
    Membre averti
    Homme Profil pro
    Financier
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Financier

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Par défaut
    Bonjour à tous et merci pour votre aide !

    Effectivement Eric cela fonctionne très bien mais le professeur qui m'a donné cet exercice m'a dit de le faire avec un boucle, c'est pour ça que j"étais bloqué.
    Moi j'ai testé avec deux valeurs , lui il veut qu'on boucle sur 7 valeurs , il nous a dit de partir sur un i=1 to 7 (en gros 7 valeurs colonne A et pareil en B)

    Est-ce possible ?

    Merci à tous

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par VBANoJutsu Voir le message
    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
    Function Rentabilite(Renta As Double, Poids As Double)
    Dim i As Long
    Dim j As Long
     
    Renta = Cells(i, 1)
    Poids = Cells(1, j)
     
    For i = 1 To 2
     For j = 1 To 2
     
    Rentabilite = Renta * Poids
     Next j
     
    Next i
     
    End Function
    Les référence de tes cellules doivent être à l'intérieur des boucles For To.
    De plus, à chaque tour, il faut ajouter le résultat de la multiplication à la valeur précédente.

  8. #8
    Membre averti
    Homme Profil pro
    Financier
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Financier

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Par défaut
    Bonjour Menhir , la première fonction que j'ai fait été relativement similaire , j'ai repris ton code mais quand je tape la fonction et valide la cellule m'affiche #VALEUR

    Je lance la fonction , select A1 , B1 en arguments et cela me renvoi valeur ..

  9. #9
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par VBANoJutsu Voir le message
    j'ai repris ton code
    Ce n'est pas mon code, c'est le tien.
    Je te l'ai pas modifier, je t'ai juste signalé ce qui est à modifier. Je t'aide à faire ton devoir mais c'est à toi de le faire.

    J'ajouterai aux deux commentaire que j'ai déjà fait, que la fonction elle-même aussi a un type qui doit être déclaré (comme les paramètres et les variables).

  10. #10
    Membre averti
    Homme Profil pro
    Financier
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Financier

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Par défaut
    Ha d'accord , je me disais aussi lol !

    J'ai essayé d'améliorer , j'ai un résultat mais toujours pas le bon !

    Voila mon nouveau 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
    Function Rent(Renta As Double, Poids As Double) As Double
     
    Dim i As Long
    Dim j As Long
     
    For i = 1 To 3
     For j = 1 To 3
      Renta = Cells(i, 1)
      Poids = Cells(1, j)
     
    Rent = WorksheetFunction.Sum(Renta, Poids)
     
     Next j
     
    Next i
     
    End Function
    J'ai les valeurs suivantes partant de A1 à A3: 14%,6%,5%
    et de B1 à B3 : 70%,20%,10%
    Je devrais obtenir 0.115 or mon code me donne 0.148

    Si quelqu'un peut me corriger

    EDIT : Voila Menhir après correction , j'abouti à cela , je trouve le bon résultat , peux-tu me confirmer que c'est bon ?

    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
    Function Try(Renta As Double, Poids As Double) As Double
     
    Dim i As Long
    Dim j As Long
     
    For i = 1 To 3
     
      Renta = Cells(i, 1)
      Poids = Cells(i, 2)
     
    Try = Try + Renta * Poids
     
    Next i
     
    End Function

  11. #11
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par VBANoJutsu Voir le message
    je trouve le bon résultat , peux-tu me confirmer que c'est bon ?
    Bin... la réponse est dans la question, non ?

    En fait, il y a un gros défaut : tu transmets à la fonction deux paramètres mais tu ne les utilises pas.
    Je ne sais pas exactement ce que tu mets comme paramètrea à l'usage de la fonction mais comme Renta et Poids sont affectés avant d'être scrutés, ces paramètres sont écrasés avant d'être utilisés.
    Tel que tu as écrit la macro, ces paramètres ne sont donc pas fonctionnels.

    Et en tant que variables, on pourrait s'en passer et mettre directement les Cells dans l'opération.

Discussions similaires

  1. Rajouter variable dans fonction avec boucle
    Par bergoliv dans le forum Langage
    Réponses: 12
    Dernier message: 03/09/2010, 21h37
  2. GENIO - Fonction avec Boucle
    Par Slyten dans le forum OTIC (ex-Genio)
    Réponses: 6
    Dernier message: 25/09/2009, 16h04
  3. Réponses: 1
    Dernier message: 14/08/2009, 12h19
  4. boucle pour "remplissage" de variable
    Par cocoty dans le forum SAS Base
    Réponses: 4
    Dernier message: 30/07/2008, 14h57
  5. Réponses: 3
    Dernier message: 23/08/2007, 00h39

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