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 :

Sommeprod en VBA [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Par défaut Sommeprod en VBA
    Bonjour et merci d'avance pour votre aide,

    J'ai un fichier Excel A dans lequel j'utilise la fonction sommeprod avec comme variables des plages nommés qui pointent sur un fichier Excel B

    Les plages nommés sont définis dans le classeur A via le menu Insertion > Nom > Définir. Les plage sont nommés de la manière suivante : Plage1, Plage2, Plage3, Plage4, Plage5, Plage6. toutes les plages ont la même taille.

    Les variables A1, A2, A3 et A4 correspondent aux cellules A1, A2, A3 et A4 du fichier Excel A.
    Contenu des variables :
    A1, Plage1 et Plage4 : texte
    A2, A3, Plage2 et Plage3 : Date
    A4, Plage5 et Palge6 : numérique

    La fonction marche correctement dans le classeur A mais je n'arrive pas à la transcrire en vba dans un module Function.

    fonction sous Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =sommeprod((Plage1=A1)*(Plage2>=A2)*(Plage3<=A3)*( Plage4="zone1")*(Plage5 > 0)*(Plage6/A4))
    Quelle est la syntaxe à utiliser avec mon exemple en VBA, pouvez vous m'expliquer l'utilisation des guillements ("), simple ("), double("") ou triple (""") que j'ai pu voir dans le forum.
    Si je crée une Fonction en VBA, dois je inclure les plages nommés dans l'appel à cette fonction ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Resultat(A1;A2;A3;A4;Plage1;Plage2;Plage3;Plage4; Plage5;Plage6)
    ou

    J'ajoute en PJ un zip contenant un exemple du fichier A et B. Il y une liaison à activer entre le fichier A et B (Ouvrir les 2 fichiers, puis depuis A Menu Edition > Liaison).

    Pouvez vous m'aider à écrire en vba à l'aide d'une Fonction personnel la formule que j'ai en F2 dans le fichier A.

    Merci.
    FreeNaute93
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Bonjour,

    je te propose de faire très simple, vu ceci :
    La fonction marche correctement dans le classeur A mais je n'arrive pas à la transcrire en vba dans un module Function.

    fonction sous Excel : =sommeprod((Plage1=A1)*(Plage2>=A2)*(Plage3<=A3)*( Plage4="zone1")*(Plage5 > 0)*(Plage6/A4))
    Tu démarres l'enregistreur de macro, tu fais F2 (modif) sur ta cellule contenant la fonction excel qui marche, tu fais enter, tu arrêtes l'enregistreur de macro, et ta réponse est dans un module...

    Facile le VBA, non ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Par défaut
    Bonjour Godzestla,

    Merci pour ta réponse mais je cherche plutôt à écrire une Fonction personnel en VBA qui permet de calculer directement le résultat avec les différentes variable.
    J'ai fait la manip et je récupère de quoi déclarer une fonction dans une cellule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Activecell.FormulaR1C1="SUMPRODUCT((Plage1=R[-1]C[-5])*(Plage2>=RC[-5]...
    Je souhaite crée une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Resultat(v1 as string, v2 as Date, v3 as Date, v4 as integer)
    Resultat=Application.worksheetFunction.Evaluate("=SUMPRODUCT((Plage1=v1)*(Plage2>=v2)*(Plage3<=v3)*( Plage4="zone1")*(Plage5 > 0)*(Plage6/v5))")
    end function
    Mais je crois avoir un problème avec les guillemets et les plages nommés.

  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
    Essaies ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function Resultat(ByVal v1 As String, ByVal v2 As Date, ByVal v3 As Date, ByVal v4 As Integer) As Double
    Dim frml As String
     
    frml = "=SUMPRODUCT((Plage1=""" & v1 & """)*(Plage2>=" & v2 & ")*(Plage3<=" & v3 & ")*(Plage4=""zone1"")*(Plage5>0)*(Plage6<" & v4 & "))"
    Resultat = Evaluate(frml)
    End Function

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Par défaut
    Bonjour et merci pour ton retour Mercatog,

    j'ai testé le code, la fonction remonte 0 comme résultat au lieu de 1,5.

    Je pense que les plages nommés Plage1 à 6 ne sont pas reconnus par la fonction.

    As tu fait un test de ton côté ?

    FreeNaute93

    ps : la fin de la formule est Plage6/v4 au lieu de Plage6<v4, c'est la somme de ce calcul qui doit être réalisée si toutes les conditions sont réunies.

  6. #6
    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
    Bonsoir
    J'avoue n'a pas pu tester
    J'ai refais le test sur ton fichier, la fonction lancée à partir d'une macro fonctionne, mais directement sur une feuille, erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function Resultat(v1 As Range, v2 As Range, v3 As Range, v4 As Range) As Double
    Dim frml As String
     
    frml = "=SUMPRODUCT((Plage1=" & v1.Address & ")*(Plage2>=" & v2.Address & ")*(Plage3<=" & v3.Address & ")*(Plage4=""zone1"")*(Plage5>0)*(Plage6/" & v4.Address & "))"
    Resultat = Evaluate(frml)
    End Function
     
    Public Sub tst()
    Cells(4, 9) = Resultat(Range("A1"), Range("A2"), Range("A3"), Range("A4"))
    End Sub

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Par défaut
    Super,

    Cela fonctionne chez moi dans les 2 cas, je vais maintenant appliquer la méthode sur un très gros classeur qui ne contient que des formules Sommeprod en créant à chaque fois des fonctions spécifiques.

    Merci encore.

    FreeNaute93.

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

Discussions similaires

  1. Convertir SOMMEPROD en VBA
    Par maymou27 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/06/2012, 18h30
  2. sommeProd en VBA
    Par alidroos dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/12/2011, 15h52
  3. recopie formule SOMMEPROD en VBA
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/11/2011, 12h16
  4. [XL-2007] Problème conversion SOMMEPROD en VBA
    Par neiluj26 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/03/2010, 14h31
  5. Conversion SOMMEPROD en VBA
    Par choudoudou15 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/06/2009, 16h41

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