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 :

Mauvaise valeur reflétée


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Août 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Août 2020
    Messages : 10
    Par défaut Mauvaise valeur reflétée
    Bonjour,

    je souhaite transcrire une formule excel en VBA mais le résultat obtenu n'est pas celui souhaité.

    formule excel :
    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(AA!N:N;AA!K:K)/SOMME(AA!K:K)

    formule VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub pfaf()
    Sheets("Recap Auctions").Range("D7").Value = ActiveCell.FormulaR1C1 = "=SUMPRODUCT(AA!C[3],AA!C[7])/SUM(AA!C[7])"
     
    End Sub
    je souhaite associer à la cellule D7 de la feuille Recap Auctions le résultat du calcul suivant : colonne 3(de la feuille AA)*colonne7(de la feuille AA) / somme colonne 7 (de la feuille AA)

    Mais le résultat renvoyé dans la cellule D7 est "FAUX" et non un nombre.

    Je ne sais pas si le fait que les colonnes 3 et 7 ne soient pas remplis entièrement (après la ligne 106 il n'y a plus de valeurs) peux faire buguer excel et donc donner ce résultat.

    Merci de votre aide.

  2. #2
    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 hugo1674 Voir le message
    formule excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD(AA!N:N;AA!K:K)/SOMME(AA!K:K)
    formule VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Recap Auctions").Range("D7").Value = ActiveCell.FormulaR1C1 = "=SUMPRODUCT(AA!C[3],AA!C[7])/SUM(AA!C[7])"
    Pourquoi se compliquer la vie ? A moins que ta macro ait une chance de se retrouver sur un PC non francophone, il est plus simple d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Recap Auctions").Range("D7").FormulaLocal = "=SOMMEPROD(AA!N:N;AA!K:K)/SOMME(AA!K:K)"
    Avec ton code, tu obtient FAUX à cause du double =.
    Tu demandes à VBA de mettre en D7 le résultat de la comparaison entre la formule contenue dans le cellule active (qui n'est pas forcément D7) et la formule que tu écris, ce qui n'est pas du tout ce que tu souhaites faire si j'ai bien compris.

    Pour mettre dans cette cellule la valeur résultant de cette formule, il y a plusieurs méthodes.

    La plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("Recap Auctions").Range("D7").FormulaLocal = "=SOMMEPROD(AA!N:N;AA!K:K)/SOMME(AA!K:K)"
    Sheets("Recap Auctions").Range("D7").Copy
    Sheets("Recap Auctions").Range("D7").PasteSpecial(xlPasteValues)
    Si tu veux le faire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Recap Auctions").Range("D7").Value = WorksheetFunction.SUMPRODUCT(Sheets("AA").Range("N:N"), Sheets("AA").Range("K:K"))/WorksheetFunction.SUM(Sheets("AA").Range("K:K"))
    Il est possible aussi de faire la même chose en passant par la méthode Evaluate.
    Lire ça : https://docs.microsoft.com/fr-fr/off...ation.evaluate

  3. #3
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 569
    Par défaut
    Bonjour à tous

    Attention : SOMMEPROD sur des colonnes entières n'est pas autorisé sur les versions antérieures à 2016 et même au delà c'est déconseillé : les tableaux structurés sont à privilégier avec le VBA associé
    https://fauconnier.developpez.com/tu...ux-structures/

  4. #4
    Membre habitué
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Août 2020
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Août 2020
    Messages : 10
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Au départ j'étais parti sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Recap Auctions").Range("D7").Value = "=SOMMEPROD(AA!C:C;AA!G:G)/SOMME(AA!G:G)"
    Mais voyant que ça ne fonctionnait pas, j'ai utilisé l'enregistreur de macro qui m'a donné ActiveCell.FormulaR1C1 donc j'ai cru bon d'utiliser cela.
    Merci pour les explications des erreurs et les différentes manières de résoudre mon problème. Cependant je ne comprends pas à quoi sert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Recap Auctions").Range("D7").Copy
    Sheets("Recap Auctions").Range("D7").PasteSpecial(xlPasteValues)
    pouvez vous m'expliquer s'il vous plaît ? Je n'ai pas besoin de l'utiliser puisque cela fonctionne avec seulement la première ligne mais je voudrais bien néanmoins connaître son utilité.

    Citation Envoyé par 78chris Voir le message
    Bonjour Chris,

    J'utilise les colonnes entières car je souhaite utiliser le code sur d'autres fichiers excel et que ceux là n'auront très certainement pas le même nombre de ligne donc il m'est plus simple de sélectionner toute la colonne plutôt que de rentrer à chaque fois le nombre de lignes de la colonne.

    Il existe peut-être une autre méthode mais je ne la connais pas, si vous en avez une, je suis preneur !

  5. #5
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 569
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 569
    Par défaut
    RE
    Citation Envoyé par hugo1674 Voir le message
    Bonjour Chris,

    J'utilise les colonnes entières car je souhaite utiliser le code sur d'autres fichiers excel et que ceux là n'auront très certainement pas le même nombre de ligne donc il m'est plus simple de sélectionner toute la colonne plutôt que de rentrer à chaque fois le nombre de lignes de la colonne.

    Il existe peut-être une autre méthode mais je ne la connais pas, si vous en avez une, je suis preneur !
    oui les tableaux structurés : je t'ai donné le lien que tu ne sembles pas avoir regardé...

  6. #6
    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 hugo1674 Voir le message
    Merci pour les explications des erreurs et les différentes manières de résoudre mon problème. Cependant je ne comprends pas à quoi sert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Recap Auctions").Range("D7").Copy
    Sheets("Recap Auctions").Range("D7").PasteSpecial(xlPasteValues)
    pouvez vous m'expliquer s'il vous plaît ? Je n'ai pas besoin de l'utiliser puisque cela fonctionne avec seulement la première ligne mais je voudrais bien néanmoins connaître son utilité.
    Si j'ai bien compris, tu veux que dans la cellule se trouve non pas une formule mais une valeur.
    La première ligne du code en trois ligne que j'ai donné place la formule dans la cellule. Excel va donc la calculer.
    Les deux autres lignes vont un "Copier/Coller valeur", ce qui va écraser la formule et la remplacer par la valeur.

    Si ce que tu souhaites c'est avoir la formule dans la cellule, alors ces deux lignes sont inutiles.
    Mais dans ce cas, je ne comprends pas à quoi sert la macro.

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

Discussions similaires

  1. [Tableaux] Mauvaises valeurs renvoyées
    Par Jeren dans le forum Langage
    Réponses: 5
    Dernier message: 05/05/2008, 09h49
  2. LAST_INSERT_ID mauvaises valeurs
    Par Linio dans le forum Requêtes
    Réponses: 10
    Dernier message: 31/03/2008, 00h32
  3. mauvaises valeurs en sortie
    Par emprex dans le forum Débuter
    Réponses: 9
    Dernier message: 07/02/2008, 19h25
  4. Réponses: 8
    Dernier message: 17/07/2007, 11h33
  5. Fonction Get() renvoyant les mauvaises valeurs
    Par jairbubbles dans le forum XML
    Réponses: 1
    Dernier message: 20/11/2006, 12h33

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