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 :

Produit de somme de valeurs presentes dans une autre feuille


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut [Resolu] Produit de somme de valeurs presentes dans une autre feuille
    Bonjour a tous,

    L'objectif ici est de réaliser en VBA la formule sumproduct dans une feuille (GENERAL) avec un tableau présent dans une feuille différente (1100000498) .

    Voici un exemple

    Feuil1 = 1100000498

    SKU QTY
    XXXXX 200
    YYYYY 400
    SSSSS 300
    XXXXX 400
    YYYYY 600
    SSSSS 150
    .........

    Feuil2 = GENERAL

    SKU TOTAL
    XXXXX 600
    YYYYY 1000
    SSSSS 450

    Mon probleme ici est que je ne peux pas determiner a l'avance le nombre de ligne du tableau de la feuille '1100000498'

    Apres de nombreuses recherches, j'ai pu realiser un code qui me permet de presque toucher au but:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Template As String
    Template = Range("TMP_SO").Value 'definit le nom de la feuille (ici le nom est 1100000498) que je ne peux pas connaitre a l'avance
    Dim Wb As Worksheet
    Set Wb = ThisWorkbook.Worksheets(Template)
    Dim SKU As Long
    SKU = Wb.Cells(Rows.Count, "E").End(xlUp).Row + 1 ' colonne E = SKU
    Dim QTY As Long
    QTY = Wb.Cells(Rows.Count, "G").End(xlUp).Row + 1 'Colonne G = QTY
    ActiveCell.Formula = "=SUMPRODUCT(('1100000498'!E20:E" & SKU - 1 & "=RC[-3])*('1100000498'!G20:G" & QTY - 1 & "))"
    Ce code me permet d'obtenir le resultat suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SUMPRODUCT(('1100000498'!'E20':'E22'=A2)*('1100000498'!'G20':'G22'))
    E20:E22 correspond bien a la longueur du tableau de la feuille1 pour chacune des colonnes.

    Mais ce resultat me donne une erreur de type 'NAME' a cause des apostrophes en rouge.

    Si je peux arriver a les enlever alors la formule fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SUMPRODUCT(('1100000498'!E20:E22=A2)*('1100000498'!G20:G22))
    Que dois-je modifier dans mon code pour enlever ces apostrophes?

    J'espère avoir ete clair et que vous pourrez m'aider.

    Merci d'avance.

    Cordialement.

  2. #2
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Wb As Worksheet
    Dim Template As String
    Dim SKU As Long, QTY As Long
     
    Template = CStr(Range("TMP_SO").Value) 'definit le nom de la feuille (ici le nom est 1100000498) que je ne peux pas connaitre a l'avance
    Set Wb = ThisWorkbook.Worksheets(Template)
    SKU = Wb.Cells(Rows.Count, "E").End(xlUp).Row + 1 ' colonne E = SKU
    QTY = Wb.Cells(Rows.Count, "G").End(xlUp).Row + 1 'Colonne G = QTY
    ActiveCell.Formula = "=SUMPRODUCT((" & Template & "!E20:E" & SKU - 1 & "=" & ActiveCell.offset(0,-3).address() & ")*(" & Template & "!G20:G" & QTY - 1 & "))"
    PS: Au lieu de ActiveCell, pense à donner l'adresse exacte de la cellule qui reçoit la formule.
    Edit: mal lu

  3. #3
    Membre éclairé 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
    Points : 879
    Points
    879
    Par défaut
    bonjour seb1kl,

    je pense que c'est l'utilisation de RC avec .Formula qui fait ce probleme,
    remplace =RC[-3]) par =" & Cells(ActiveCell.Row, ActiveCell.Column - 3).Address & "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Formula = "=SUMPRODUCT(('1100000498'!E20:E" & SKU - 1 & "=" & Cells(ActiveCell.Row, ActiveCell.Column - 3).Address & ")*('1100000498'!G20:G" & QTY - 1 & "))"

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 6
    Points : 6
    Points
    6
    Par défaut
    Desole pour la reponse tardive. Je pensais que le forum envoie un mail d'alerte lorsqu'une personne repond a un post.

    Mon erreur venait en effet d'un conflit entre le type Formula et le RC-3.

    Ca fonctionne parfaitement.

    Merci a vous deux!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/08/2010, 10h01
  2. Réponses: 3
    Dernier message: 03/02/2010, 12h39
  3. Réponses: 1
    Dernier message: 10/02/2008, 19h56
  4. Réponses: 3
    Dernier message: 13/06/2006, 16h36
  5. Numero non present dans une autre table
    Par AlphonseBrown dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/02/2005, 12h37

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