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ème conversion SOMMEPROD en VBA [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut Problème conversion SOMMEPROD en VBA
    Bonjour le forum,

    Pardon si ce problème a déjà été abordé, mais je ne crois pas avoir trouvé de topic qui me permettrait de résoudre mon problème seul.

    Je voudrais convertir cette fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMMEPROD((Picker=B$2)*(Mois_confirmation=$A18)*(Nb_lignes))
    en VBA. Picker, Mois_confirmation et Nb_Lignes sont des plages nommées d'une autre feuille.

    J'ai essayé ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.SumProduct((Range("Picker") = [B2]), (Range("Mois_confirmation") = [A4]), (Range("Nb_lignes")))
    mais j'ai une erreur incompatibilité de type que je ne suis pas sûr de bien comprendre.
    Serait-elle due au fait que mes plages Picker et Mois_Confirmation sont au format texte? Si oui, est-ce qu'il y a un moyen de contourner ce problème?

    Merci d'avance.

  2. #2
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour neiluj26,

    je ne sais pas si tu veut mettre le résultat directement dans une cellule,
    si oui, voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1") = [SumProduct(Picker=B2)*(Mois_confirmation=A4)* (Nb_lignes))]
    isabelle

  3. #3
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1") =Evaluate("=SUMPRODUCT((Picker=B$2)*(Mois_confirmation=$A18)*(Nb_lignes))")

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut
    Bonjour,

    Pardon pour cette réponse tardive. C'était le weekend...

    Effectivement, je voulais mettre ce résultat dans une cellule, pour éviter d'alourdir mon fichier et éviter trop de recalculs.

    La solution de Mercatog fonctionne bien. Merci! Je ne connaissais pas la fonction Evaluate. Elle sera bien utile.

    Par contre, désolé Sabzzz, mais j'ai toujours une erreur "Incompatibilité de type" quand j'utilise ta méthode. Et je ne comprends pas pourquoi non plus.

    Argh, c'est la deuxième fois que je me fais avoir. J'aurais dû préciser ma demande.

    En fait, j'aimerais utiliser cette formule dans une boucle du type "for i =... to...", ce qui donnerait quelque chose dans ce goût là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 4 To LigFin
        Cells(i, 2) = Evaluate("=SUMPRODUCT((Picker=B$2)*(Mois_confirmation=Range("A" & i)*(Nb_lignes))")
    Next i
    Mais Evaluate n'aime pas mon "Range("A" & i)"

  5. #5
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim i As Long, LigFin As Long
    Dim fct As String
     
    For i = 4 To LigFin
        fct = "=SUMPRODUCT((Picker=B$2)*(Mois_confirmation=" & Range("A" & i).Address(False, True) & "*(Nb_lignes))"
        Cells(i, 2) = Evaluate(fct)
    Next i

  6. #6
    Membre éclairé
    Inscrit en
    Octobre 2008
    Messages
    240
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 240
    Par défaut
    Ah ça fonctionne, merci. J'ai juste ajouté une parenthèse qui manquait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim i As Long, LigFin As Long
    Dim fct As String
     
    LigFin = [A65536].end(xlup).row
     
    For i = 4 To LigFin
        fct = "=SUMPRODUCT((Picker=B$2)*(Mois_confirmation=" & Range("A" & i).Address(False, True) & ")*(Nb_lignes))"
        Cells(i, 2) = Evaluate(fct)
    Next i
    End Sub
    Hmm puis-je abuser?

    Dans le même but, je souhaiterais convertir la formule suivante également (formule matricielle):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {=SOMME((FREQUENCE((Mois_confirmation&Picker=$A18&B$2)*EQUIV(Date_confirmation;Date_confirmation;0);(Mois_confirmation&Picker=$A18&B$2)*EQUIV(Date_confirmation;Date_confirmation;0))>0)+0)-(MIN((Mois_confirmation&Picker=$A18&B$2)*1)=0)}
    J'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim Jrs As String, i as Long, LigFin as Long
     
    LigFin = [A65536].end(xlup).row
    For i = 4 to LigFin
        Jrs = "{=SUM((FREQUENCY((Mois_confirmation&Picker=" & Range("A" & i).Address(False, True) & "&B$2) *MATCH(Date_confirmation,Date_confirmation,0),(Mois_confirmation&Picker=" & Range("A" & i).Address(False, True) & "&B$2))*MATCH(Date_confirmation,Date_confirmation,0))>0)+0)-(MIN((Mois_confirmation&Picker=" & Range("A" & i).Address(False, True) & "&B$2)*1)=0)}"
        Cells(i,3)= Evaluate(Jrs)
    Next i
    Mais quand je lance cette macro, j'ai un beau "#VALEUR" dans ma colonne C. Quand j'essaie juste de voir le résultat dans une MsgBox, j'ai encore une erreur "Incompatibilité de type"...

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

Discussions similaires

  1. problème de traduction de VBA de sommeprod
    Par tnguyen05 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 06/06/2011, 21h23
  2. Conversion SOMMEPROD en VBA
    Par choudoudou15 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/06/2009, 16h41
  3. Problème conversion float vers double
    Par jhenaff dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 27/01/2006, 10h39
  4. Problème avec open() [Excel VBA]
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 16h21
  5. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 15h05

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