Sommeproduit en vba

kheldar

XLDnaute Nouveau
Bonjour au forum,

Afin de finaliser un de mes projets, je souhaiterais obtenir de l'aide sur un problème qui me prend la tête depuis ce matin.

Grâce à une macro et une certaine mise en forme de cellules, j'effectue une somme produit de 2 plages de ces cellules, seulement la longueur de la plage n'est pas unitaire.
Je m'explique, le nombre de lignes peut varier dans la formule suivante:
ACTIVECELL.FORMULAR1C1="=IF(COUNT(R[1]C:R[17]C)<>0,SUMPRODUCT(R[1]C:R[17],R[1]C[4]:R[17]C[4],""-"")

Dans la partie apparaissant en rouge, je souhaiterais pouvoir intégrer une variable me permettant ainsi d'effectuer les sommes produit quelque soit le nombre de lignes en compte.

Merci d'avance pour votre aide en espérant avoir été assez explicite dans ma demande.
Cordialement.
 

JCGL

XLDnaute Barbatruc
Re : Sommeproduit en vba

Bonjour à tous,

Au vu des formules augmente tout simplement les plages des deux formules....

Peux-tu joindre un bout de fichier si cela ne répond pas à ta question ?

A+ à tous
 

criscris11

XLDnaute Accro
Re : Sommeproduit en vba

Bonjour kheldar, le forum,
Il te suffit de nommer tes plages à sommer de façon dynamique avec la fonction DECALER et de modifier ta macro en remplaçant les adresses de cellules par le nom de tes plages nommées.
Avec une recherche sur le forum, tu devrais pouvoir y arriver tout seul sinon postes un fichier et on t'aidera.
Bonne journée.

Oups : belle collision à 3. Salut Dan et JC.
Dis donc kheldar, 3 réponses en moins de 2 minutes : pas mal, hein ?
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Sommeproduit en vba

Bonjour à tous,

Souvent en utilisant SOMMEPROD, les plages sont limités par des références absolues, par exemple ici essayer :

Code:
ActiveCell.FormulaR1C1 = "=IF(COUNT(R[1]C:[COLOR="Red"]R1000[/COLOR]C)<>0,SUMPRODUCT(R[1]C:[COLOR="Red"]R1000[/COLOR],R[1]C[4]:[COLOR="Red"]R1000[/COLOR]C[4]),""-"")"

A+
 

kheldar

XLDnaute Nouveau
Re : Sommeproduit en vba

Bonjour et déjà merci pour ces premières réponses, mais le problème reste entier.

Voici un fichier, une partie du fichier initiale qui pourra certainement vous aider à comprendre ce que je recherche.

En fait, par une macro, je peux insérer à l'intérieur des familles de produits des nouveaux articles. lorsque j'insère une ligne au début ou au milieu de la famille, il n'y a aucun problème, la formule de la casse et de la commande se recalcule en prenant en compte le décalage créé par l'insertion*.
Seulement lorsque j'insère une nouvelle ligne à la fin d'une famille, c'est à dire à la dernière ligne afin la prochaine famille, ces formules casse et commande ne prennent en compte la nouvelle ligne insérée.

Alors soit vous avez une solution pour moi par macro, soit il est possible de réactualiser ces formules casse et commande automatiquement.

Précision : j'utilise Excel2007 et je ne souhaite pas modifier mon tableau par des ajouts de colonnes par exemple si posible

En espérant cette fois-ci avoir été plus clair, merci d'avance pour vos solutions.
Cordialement.
 

Pièces jointes

  • Exemple sommeprod.xls
    37 KB · Affichages: 257
  • Exemple sommeprod.xls
    37 KB · Affichages: 290
  • Exemple sommeprod.xls
    37 KB · Affichages: 298

jeanpierre

Nous a quitté
Repose en paix
Re : Sommeproduit en vba

Bonjour kheldar, le fil,

"En fait, par une macro, je peux insérer à l'intérieur des familles de produits des nouveaux articles. lorsque j'insère une ligne au début ou au milieu de la famille, il n'y a aucun problème"

Elle est où ta macro dans le fichier joint ?

Pour ta version d'Excel, plutôt que d'écrire en gros caractères, précise là dans ton Profil, ce sera fait une fois pour toutes.....

Bon dimanche.

Jean-Pierre
 

criscris11

XLDnaute Accro
Re : Sommeproduit en vba

Re,
kheldar : quand tu insères une ligne entre la ligne 4 et la ligne 18 (qui sont tes lignes de départ), les formules en colonne F et G se mettent à jour.


Bon après-midi.

Oups, je n'avais pas bien lu : désolé. Je viens de comprendre ton problème. Je regarde s'il y a une parade hormis de mettre ta ligne Total actuellement en ligne 3 à la fin de ta dernière ligne de la famille.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Sommeproduit en vba

Re,

A mon avis, pas besoin de macro.

1) Onglet Formules, groupe Noms définis et définir les noms :

PlageC par la formule :

=INDIRECT("C"&LIGNE()+1&":C10000")

PlageF PlageG PlageI par les 3 formules similaires :

=INDIRECT("F"&LIGNE()+1&":F"&LIGNE()-1+EQUIV(VRAI;ESTVIDE(PlageC);0))

=INDIRECT("G"&LIGNE()+1&":G"&LIGNE()-1+EQUIV(VRAI;ESTVIDE(PlageC);0))

=INDIRECT("I"&LIGNE()+1&":I"&LIGNE()-1+EQUIV(VRAI;ESTVIDE(PlageC);0))

2) Ensuite entrer en cellules F3 et G3 les formules :

=SI(NB(PlageF)<>0;SOMMEPROD(PlageF;PlageI);"-")

=SI(NB(PlageG)<>0;SOMMEPROD(PlageG;PlageI);"-")

3) Copier la plage F3:G3 vers F19:G19 et F29:G29

Fichier joint.

Edit 1 : le principe est de définir les plages à prendre en compte en recherchant (avec EQUIV) la 1ère cellule vide qui suit en colonne C.

Edit 2 : pour entrer les formules des noms, les copier par Ctrl+C et les coller par Ctrl+V dans la boîte de dialogue.

Edit 3 : on peut bien sûr simplifier les 3 formules en définissant le nom derligne par :

=LIGNE()-1+EQUIV(VRAI;ESTVIDE(PlageC);0)

A+
 

Pièces jointes

  • Exemple sommeprod(1).xls
    43 KB · Affichages: 92
Dernière édition:

kheldar

XLDnaute Nouveau
Re : Sommeproduit en vba

Bonjour,

Premièrement : merci à toutes personnes qui ont répondu à mon appel, vraiment sympa tout ça

Deuxièmement : job75 me donne une solution sans macro, c'est parfait, j'ai fait le test avec le fichier Excel qu'il a renvoyé, seulement je ne comprends pas comment définir les noms qu'il a fournit.
Désolé, je suis peut être neuneu mais je n'ai pas compris comment on définit les noms.
Serait-il possible de m'expliquer un peu plus cette action de nommer des plages ?


Merci encore au forum.
Cordialement.
 

job75

XLDnaute Barbatruc
Re : Sommeproduit en vba

Re,

Désolé, je suis peut être neuneu mais je n'ai pas compris comment on définit les noms.

Les 4 noms ne définissent pas des plages directement, ils définissent 4 formules, qui elles déterminent 4 plages.

Copiez la formule, et comme je l'ai dit, pour Excel 2007, onglet Formules, groupe Noms définis ==> Gestionnaire de noms.

Dans la boîte de dialogue en haut vous tapez le nom, et plus bas vous collez (Ctrl+V) la formule.

A+
 

kheldar

XLDnaute Nouveau
Re : Sommeproduit en vba

Bonjour au forum.

Merci à toutes les personnes qui m'ont répondues.

Mon problème est résolu grâce aux infos que vous m'avez fournies en particulier les formules de job75.

Je constate que j'ai vraiment encore énormément à apprendre pour utiliser Excel au mieux de ses possibilités.

Merci encore et à bientôt.
Cordialement.
 

Discussions similaires

Réponses
22
Affichages
874

Statistiques des forums

Discussions
312 488
Messages
2 088 846
Membres
103 972
dernier inscrit
steeter