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 :

Problèmes avec SOMMEPROD


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 57
    Points : 46
    Points
    46
    Par défaut Problèmes avec SOMMEPROD
    Bonjour,

    Dans un programme VBA destiné à insérer des formules de calcul dans un document Excel, j'ai utilisé le code suivant (extrait) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim Quote
    Dim Formule As String
    Dim Formule2 as String
     
    Quote = """"
     
    With maFeuille
    Formule = "=SUMPRODUCT((BJ" & CStr(Debut) & ":BJ" & CStr(Fin) & "=" & Quote & "-1" & Quote & ")*(BN" & CStr(Debut) & ":BN" & CStr(Fin) & ">0))" 
    Formule2 = "=SUMPRODUCT(BJ" & CStr(Debut) & ":BJ" & CStr(Fin) & "=" & Quote & "-1" & Quote & ")"
    .Range(sCol05 & Fin + indexLigne).Formula = Formule & "/" & Formule2
    .Range(sCol05 & Fin + indexLigne).NumberFormat = "0.00%"
    .Range(sCol05 & Fin + indexLigne).Font.ColorIndex = 3  ' Rouge
    End With
    Le but de la formule est d'effectuer le calcul suivant :
    Compter le nombre de lignes où la colonne BJ contient "-1" et où la colonne BN contient une valeur > 0.
    Diviser ce résultat par le nombre de lignes où la colonne BJ contient "-1"

    Si je n'utilise pas le contenu de Formule 2 en remplaçant la ligne qui affecte la formule par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .Range(sCol05 & Fin + indexLigne).Formula = Formule
    alors j'obtiens un résultat numérique cohérent.

    Par contre, si je garde la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .Range(sCol05 & Fin + indexLigne).Formula = Formule & "/" & Formule2
    j'obtiens un message indiquant une division par zéro dans la formule, ce qui semble prouver que la formule contenue dans Formule2 retourne 0.

    Pouvez vous m'indiquer d'où vient le problème, car il me semble pourtant que le contenu de Formule2 est une formule tout à fait légitime (pour info, SUMPRODUCT correspond en français à SOMMEPROD) ?

    Merci de votre aide.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 634
    Points
    28 634
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant de codifier une formule avec du VBA, tu devrais d'abord tester la formule sans le VBA
    Ta variable formule2 contient =SUMPRODUCT(BJ:BJ="-1") or pour compter le nombre de valeurs trouvée il faut au moins multiplier par 1, soit en en Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((BJ:BJ=-1) * 1)
    Donc ta formule renvoie 0 et évidemment, diviser par 0 renvoie une erreur.

    Attention qu'il y a peut-être un problème aussi dans formule. Je n'ai regardé que formule2
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Je te remercie pour cette info précieuse (je ne suis pas un spécialiste des macros Excel).

    J'ai donc modifié mon code avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Formule2 = "=SUMPRODUCT((BJ" & CStr(Debut) & ":BJ" & CStr(Fin) & "=" & Quote & "-1" & Quote & ") * 1)"
    .Range(sCol05 & Fin + indexLigne).Formula = Formule & "/" & Formule2
    Quand je teste la formule directement sous Excel avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    =SOMMEPROD((BJ2:BJ162="-1")*(BN2:BN162>0))/SOMMEPROD((BJ2:BJ162="-1")*1)
    cela marche parfaitement.

    Malheureusement, j'ai maintenant l'erreur N° 1004 ("erreur définie par l'application ou par l'objet") à l'exécution de la dernière ligne VBA ci-dessus. Sans doute une erreur de syntaxe ?

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Bon, j'ai trouvé. Il faut juste enlever le signe "=" qui débute le contenu de la variable Formule2. C'était idiot, mais il fallait le trouver ... ;-)

    Merci à Philippe Tulliez.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 634
    Points
    28 634
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne sais pas si tu dois placer ta formule sur une ou plusieurs cellules mais si c'est sur plusieurs cellules il y a lieu de rendre absolu la référence à la plage $BJ$2:$BJ$162
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. problème avec sommeprod
    Par roufko dans le forum Excel
    Réponses: 3
    Dernier message: 09/07/2014, 16h45
  2. [XL-2007] Problème avec SOMMEPROD !
    Par chpierro62 dans le forum Excel
    Réponses: 13
    Dernier message: 26/08/2013, 14h12
  3. [XL-2003] Problème avec SOMMEPROD
    Par Philippe76 dans le forum Excel
    Réponses: 2
    Dernier message: 14/01/2010, 21h22
  4. problème avec sommeprod
    Par santacrus dans le forum Excel
    Réponses: 10
    Dernier message: 27/04/2009, 10h39
  5. Problème de quotes avec SOMMEPROD
    Par jerorome dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 29/01/2009, 11h23

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