Sommeprod sur plusieurs classeurs
Bonjour,
Je cherche a calculer la somme d'une série de factures, en fonction de leur date de sortie.
Voici un petit exemple:
Classeur 1
Colonne F(date d'émission) .. .. Colonne G(montant à payer)
12/01/2007 .... . . . . . . . . . . . . . . . . . . . . . ... 600€
16/01/2007 ... . . . .. . . . . . . . . . . . . . . .. .. .... 550€
etc...
Classeur 2
Somme janvier . . . . . . Somme février . . . . . . Somme mars . . . . etc...
Je veux obtenir la somme des factures, celles-ci regroupées par mois d'émission.
Pour rendre l'exercice encore plus rigolo, sur la colonne F (classeur 1), il peut y avoir des factures de 2006, 2005, voir même des cellules vides à ne pas prendre en compte.
Avec cette formule ca ne marche pas:
=SOMMEPROD((MOIS(MAINTENANT())-MOIS(Facture)<2)*(ANNEE((Facture)=ANNEE(MAINTENANT)))*(Montant))
Montant='[classeur1.xls]Feuil1'!$G$41:$G$169
Facture='[classeur1.xls]Feuil1'!$F$41:$F$169
Le" MOIS(MAINTENANT())-MOIS(Facture)<2 ", car je cherche dans cette colonne les factures émises il y a moins de 2 mois.
Merci pour avoir supporté ma "brève" expliquation.
Bonjour,
A première vue il y a déjà des parenthèses mal placées dans la deuxième condition :
Essaie ceci :
=SOMMEPROD((MOIS(MAINTENANT())-MOIS(Facture)<2)*(ANNEE(Facture)=ANNEE(MAINTENANT()))*Montant)
Si ce n'est pas cela, place un petit exemple, ce sera plus facile, car les erreurs possibles sont nombreuses.
Effectivement cela marche avec cette correction.
Merci
Bonjour
J'ai un nouveau problème
Je souhaite blinder mon code et ajouter une condition supplémentaire. Il faut que la colonne B ne soit pas nulle pour que le calcul du montant se fasse.
Je crée donc un nouveau nom, définit de la sorte:
='[classeur1.xls]Feuil1'!$B$5:$B$500
Ma nouvelle formule (qui marchait avant l'ajout de cette condition) est définit de la sorte:
=SOMMEPROD((MOIS(MAINTENANT())-MOIS(Facture)<2)*(Chargé<>"")*(ANNEE(Facture)=ANNEE(MAINTENANT()))*Montant)
J'obtiens une erreur de type #VALEUR!
J'ai essayé de mettre tous les noms sur le même intervalle de définition ( B5:B500, F5:F500, G5:G500 ...), cela ne change rien.
Je ne comprends pas,
Merci pour votre aide
Bonjour,
A ma connaissance les plages nommées ne fonctionnent pas entre classeurs, bien entre feuilles d'un même classeur.
Il faut lier une nouvelle plage dans le classeur où se trouve la formule à la plage de l'autre classeur, nommer cette nouvelle plage, y faire référence dans ta formule et tout devrait fonctionner normalement .
Pourtant mes premières conditions ne provoquaient pas de plantage de la formule. Elles fonctionnaient entre différents classeurs.
J'ai introduit une nouvelle condition pour éviter les bug lorsque certaines lignes étaient vide où remplies par des informations inutiles.
Si je définis les champs des noms, de façon à englober toutes les factures de 2007, cela marche.
Les factures s'arrêtent à la ligne 184, la 185 est vide. Si je défini les noms jusqu'a la ligne 185, le calcul plante.
Comme la liste des factures est susceptible de changer (ajout de nouvelles, suppression d'anciennes...), je suis obligé de travailler sur une plage de cellule plus grande, en tentant de blinder.
J'ai pensé à utiliser la fonction espion, mais je ne comprends pas bien son utilité.
Re,
Pour éviter les cellules vides en fin de plage, essaie de nommer la plage avec la fonction DECALER, comme ceci :
=DECALER($A$1;;;NBVAL($A$1:$A$500))
Euh je n'ai pas réussi à me servir de la fonction décaler et nb.val.
Par contre je tente de me servir de la fonction EQUIV. Je viens de la découvrir et elle est assez puissante.
Je sais que les données de l'année 2007 commencent 2 lignes après que soit marqué "Total 2006 (10/01/2007)"quelque part dans la colonne F.
De la même manière les données 2007 finissent 3 lignes avant que soit marqué "total 2007 (suivi d'une date qui varie)
Avec ces 2 fonctions:
=EQUIV("Total 2006 (10/01/2007)";'[classeur1.xls]Feuil1'!$F$1:$F$500;1)
Renvoie la valeure: 51
Donc mes données commencent sur la ligne 53
=EQUIV("2007";'[Factures non réglées.xls]Feuil1'!$F$1:$F$500;-1)
Renvoie la valeure: 180
Donc mes données finissent sur la ligne 177
Le problème c'est que je ne sais pas comment faire comprendre à mon programme de travailler entre 53 et 177. Peut être avec un double usage de la fonction DECALER, mais c'est trop compliqué pour moi.
En fait mon problème se résume à une question:
Si j'ai par exemple la valeure 51 dans la cellule A1 et la valeur 180 dans la case A2, est-il possible de dire à une fonction, "fais la somme de la ligne 51 à 180 pour telle colonne".
Sachant que ces chiffres peuvent varier
J'ai déja tenté (en supposant que je veuille travailler de C51:C180):
=$C$getvalue(A1)
=C"A13
=C(A1) ....
Je pense que l'on peut s'en tirer avec une macro
Re,
Mais non, il y a beaucoup plus simple, par exemple pour la colonne A :
=SOMME(INDIRECT("A"&A1&":"&"A"&A2))
wow c'est parfait
Merci beaucoup. Les fonctions equiv, decaler, indirect... sont très jolies, je trouve. C'est la où on apprécie la puissance d'excel.
Bon.. Je pensais que mes ennuis étaient terminés, mais ce n'est pas le cas
Grace à la formule ci-dessous, je peux isoler les lignes dans lesquelles je veux sommer le montant des commandes.
=SOMME(INDIRECT("A"&A10&":"&"A"&A12)) Avec en A10 la valeure de ligne de départ, et A12 la valeure de ligne de fin.
Il me suffit d'introduire une derniere condition, au sujet des jours écoulées entre la date actuelle et celle d'émission de la facture.
Trois catégories : +30jours, +60jours et +90 jours.
=SOMMEPROD((JOUR(MAINTENANT())-JOUR(Facture)<30))*(INDIRECT("'[classeur1.xls]Feuil1'!G"&A10&":"&"'[classeur1.xls]Feuil1'!G"&A12))
'[classeur1.xls]Feuil1'!G étant la colonne où sont enmùagasinées les factures.
J'espère avoir été clair,
Merci pour votre aide
Bonjour,
Et quelle est la question ?
Je suppose que c'est pourquoi la formule ne fonctionne-t-elle pas.
Première raison possible : de mémoire, mais je n'ai pas vérifié, il me semble que les fonctions SOMMEPROD et INDIRECT ne s'entendent pas fort bien.
Deuxième raison possible : lors de l'emploi de la fonction SOMMEPROD il faut obligatoirement que les plages des différents arguments soient de longueurs identiques.
Or le premier argument n'a pas de plage !
Troisième raison possible : il me semble que sous la fonction INDIRECT il faut supprimer le deuxième [classeur1.xls]Feuil1'!G"&
Ce serait évidemment bien plus facile de t'aider avec un petit bout de fichier sur Ci-Joint.