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 :

Evaluate WorksheetFunction.SumProduct Entre deux classeur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut Evaluate WorksheetFunction.SumProduct Entre deux classeur
    Bonjour, je cherche à faire une en VBA entre deux classeurs.

    Je passe par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evaluate("WorksheetFunction.SumProduct
    mais j'obtiens dans la cellule résultat et en passant le curseur de la souris sur: : .

    La ligne de code ext:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N.Offset(0, 8).Value = Evaluate("WorksheetFunction.SumProduct(" & "(""" & UAI & "=""" & DEUXRngDEUX.Address & """)*1," & "(""" & Chaine & "=""" & TROISRngTROIS.Address & """)*1" & ")")
    Le code pour y parvenir, dans l'ordre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim DEUXRngDEUX As Range, TROISRngTROIS As Range, DEUXDerniereCellule_LigneDEUX As Double
    Dim Chaine As String
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DEUXDerniereCellule_LigneDEUX = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Row
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DEUXRngDEUX = Range(Cells(2, 1), Cells(DEUXDerniereCellule_LigneDEUX, 1))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set TROISRngTROIS = Range(Cells(2, 8), Cells(DEUXDerniereCellule_LigneDEUX, 8))
    Ce code s'inscrit dans une boucle
    Si quelqu'un voit quelque chose, je vous remercie d'avance du coup de main

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N.Offset(0, 8).Value = Application.Evaluate("SUMPRODUCT((DEUXRngDEUX.Address=""" & UAI & """)*(TROISRngTROIS.Address=""" & Chaine & """))")
    donne /

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    SAlut,

    tes range ne doivent par apparaitre en dur dans ta formule, essaie avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N.Offset(0, 8).Value = Application.Evaluate("SUMPRODUCT((" & DEUXRngDEUX.Address &" =""" & UAI & """)*(" & TROISRngTROIS.Address & "=""" & Chaine & """))")
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  4. #4
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    PARFAIT!!!!!

    Un petit truc avant le "RESOLU":

    Si je souhaite compter le nombre d’occurrence d'une chaine, partie des cellules cibles de ma recherche, je tente:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N.Offset(0, 8).Value = Application.Evaluate("SUMPRODUCT((" & DEUXRngDEUX.Address & " =""" & UAI & """)*(" & TROISRngTROIS.Address & "=""" & "*&" & "ABC" & """))")
    Mais j'obtiens alors que j'ai bien des ; ; , vois-tu où est le problème??

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 150
    Par défaut
    Et j'ai essayé d'ajouter une condition supplémentaire, de la même façon, évidemment ça plante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    N.Offset(0, 6).Value = Application.Evaluate("SUMPRODUCT((" & DEUXRngDEUX.Address & " =""" & UAI & """)*(" & TROISRngTROIS.Address & "=""" & "*&" & "ABC" & """)*(" & QUATRERngQUATRE.Address & "=""" & "DEF" & "&*" & """))")

  6. #6
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Avant de savoir ce que fait le evaluate, essaie de constater par toi meme la formule que tu ecris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim strFormule As String
    strFormule = "SUMPRODUCT((" & DEUXRngDEUX.Address & " =""" & UAI & """)*(" & TROISRngTROIS.Address & "=""" & "*&" & "ABC" & """))"
    Debug.Print strFormule
    N.Offset(0, 8).Value = Application.Evaluate(strFormule)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

Discussions similaires

  1. copie entre deux classeurs différents
    Par titou31000 dans le forum VB.NET
    Réponses: 0
    Dernier message: 22/04/2010, 17h54
  2. Liaisons entre deux classeurs
    Par Daranc dans le forum Excel
    Réponses: 2
    Dernier message: 09/01/2008, 07h33
  3. Comparaison de lignes entre deux classeurs
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 22/11/2007, 23h43
  4. Données externes entre deux classeurs
    Par hkpsyco dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/10/2007, 13h17
  5. Réponses: 5
    Dernier message: 16/08/2006, 20h09

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