OVH Cloud OVH Cloud

[vba] SumProduct sur des plages variables

16 réponses
Avatar
Apprenti.xls
Bonjour à tous !

Quelle richesse ce forum ... J'apprend, j'apprends ...
Je me permets de poser une nouvelle fois un problème qui me soucie en ce
moment en espérant que l'un ou l'une d'entre vous pourra me donner un coup
de main. Là, je sèche ...
Je vais tâcher d'être le plus explicite possible.

Je souhaiterais faire apparaître un solde budgétaire dans un msgbox.
Ce solde budgétaire représente la différence entre un budget et la somme des
engagements.
Une feuille appelée "BDD" recense toutes les lignes de ces engagements et
ces budgets par compte.
Pour parvenir à mes fins, j'ai donc utilisé la fonction sommeprod, qui
fonctionne parfaitement dans une colonne d'Excel, cependant en passant par
le vba, comme je débute, le résultat m'affiche 0 à chaque fois ... il doit y
avoir, comme qui dirait, un problème.

Voici le code que j'ai conçu :

Sub Solde_budgétaire()

Dim résultat As Long
Dim ligne As Long
Dim compte As String

ActiveWorkbook.Names.Add Name:="Base_Budget", RefersToR1C1:= _
"=INDIRECT(""BDD!$m$2:$m$""&COUNTA(BDD!C3))"
ActiveWorkbook.Names.Add Name:="Base_Comptes", RefersToR1C1:= _
"=INDIRECT(""BDD!$C$2:$C$""&COUNTA(BDD!C3))"
ActiveWorkbook.Names.Add Name:="Base_Engagements", RefersToR1C1:= _
"=INDIRECT(""BDD!$AY$2:$AY$""&COUNTA(BDD!C3))"

ligne = ActiveCell.Row
compte = Range("C" & ligne)

résultat = ActiveCell.FormulaR1C1 = "SumProduct(Base_Budget * (Base_Comptes
= compte)) - SumProduct(Base_Engagements * (Base_Comptes = compte))"

MsgBox résultat
End Sub

Merci d'avance à ceux qui prendront le temps de lire mon message et y
apporteront quelques pistes de réflexion.
À bientôt !

6 réponses

1 2
Avatar
Modeste
Bonsour "michel" ;o)))
Qu'est-ce que ceci : [$?-1]_ dans ton format... qu'est-ce qui doit
s'afficher dans ta cellule... donne nous un exemple !
Résultat.NumberFormat = "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "


;o))) Clément passe ton chemin !!!
Cela ressemble à un format Monétaire $
et à Ste Genevieve des Bois les apprentis (francophones, canadiens,
cararaibes ???) comptent en EURO : ?
par défaut dans la boite format monétaire avec dans ce cas le symbole local
Euro ??? :
resultat.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"

Dollar anglais canada : Selection.NumberFormat =
"[$$-1009]#,##0.00;[Red]-[$$-1009]#,##0.00"
Dollar anglais Caraîbes : Selection.NumberFormat =
"[$$-2409]#,##0.00;[Red]-[$$-2409]#,##0.00"
Dollar Canada français : Selection.NumberFormat = "#,##0.00
[$$-C0C]_-;[Red]#,##0.00 [$$-C0C]-"

mais s'il avait souhaité un format monnaie Azéri (cyrillique) alors
Selection.NumberFormat = "#,##0.00 [$???.-82C];[Red]-#,##0.00 [$???.-82C]"

probablement que Apprenti.xls n'est pas d'origine "Métropole" ??? ;o)))
je n'ai pas identifié ce format : "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "

;o)))



--
n'oubliez pas les FAQ :
http://www.excelabo.net http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr
--
Feed Back
http://viadresse.com/?94912042

Avatar
michdenis
Bonjour Modeste,

| je n'ai pas identifié ce format : "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "

Merci pour tes exemples... et je viens de comprendre que l'ami Apprenti avait utilisé l'enregistreur de macro et ce faisant, si tu
sélectionnes dans la fenêtre des formats de cellules / onglet nombre / Comptabilité / tu as une liste déroulante qui offre plusieurs
alternatives concernant l'euro ....

et le résultat s'affiche de cette manière :

| probablement que Apprenti.xls n'est pas d'origine "Métropole" ??? ;o)))
| je n'ai pas identifié ce format : "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "

le format retenu par le demandeur représente ce choix dans la liste déroulante : ? euro (123 ?)

"_-* #,##0.00 [$?-40C]_-;-* #,##0.00 [$?-40C]_-;_-* ""-""?? [$?-40C]_-;"
(ce format est celui des français..métropole(Seulement pour l'Euro...)


Voilà l'origine !


Salutations!





"Modeste" a écrit dans le message de news:
Bonsour "michel" ;o)))
Qu'est-ce que ceci : [$?-1]_ dans ton format... qu'est-ce qui doit
s'afficher dans ta cellule... donne nous un exemple !
Résultat.NumberFormat = "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "


;o))) Clément passe ton chemin !!!
Cela ressemble à un format Monétaire $
et à Ste Genevieve des Bois les apprentis (francophones, canadiens,
cararaibes ???) comptent en EURO : ?
par défaut dans la boite format monétaire avec dans ce cas le symbole local
Euro ??? :
resultat.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"

Dollar anglais canada : Selection.NumberFormat "[$$-1009]#,##0.00;[Red]-[$$-1009]#,##0.00"
Dollar anglais Caraîbes : Selection.NumberFormat "[$$-2409]#,##0.00;[Red]-[$$-2409]#,##0.00"
Dollar Canada français : Selection.NumberFormat = "#,##0.00
[$$-C0C]_-;[Red]#,##0.00 [$$-C0C]-"

mais s'il avait souhaité un format monnaie Azéri (cyrillique) alors
Selection.NumberFormat = "#,##0.00 [$???.-82C];[Red]-#,##0.00 [$???.-82C]"

probablement que Apprenti.xls n'est pas d'origine "Métropole" ??? ;o)))
je n'ai pas identifié ce format : "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "

;o)))



--
n'oubliez pas les FAQ :
http://www.excelabo.net http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr
--
Feed Back
http://viadresse.com/?94912042

Avatar
Apprenti.xls
Merci Modeste, merci Denis.

Je suis bien apprenti français métropolitain et je souhaitais afficher le
résultat en euros.
Je suis effectivement passé par l'enregistreur de macros pour connaître le
format adéquat.
Malgré vos explications, je n'arrive toujours pas à afficher le résultat tel
que je le souhaiterais dans un msgbox.

Après la formule
Résultat = WorksheetFunction.Round(Evaluate...
j'ai retenu le format de Denis :
Résultat.NumberFormat = "_-* #,##0.00 [$?-40C]_-;-* #,##0.00 [$?-40C]_-;_-*
""-""?? [$?-40C]_-;"
MsgBox Résultat

J'obtiens l'erreur d'exécution 424 objet requis.

Qu'est-ce que j'ai bien pu oublier encore ?
Merci de vos lumières.

"michdenis" a écrit dans le message de news:

Bonjour Modeste,

| je n'ai pas identifié ce format : "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "

Merci pour tes exemples... et je viens de comprendre que l'ami Apprenti
avait utilisé l'enregistreur de macro et ce faisant, si tu
sélectionnes dans la fenêtre des formats de cellules / onglet nombre /
Comptabilité / tu as une liste déroulante qui offre plusieurs
alternatives concernant l'euro ....

et le résultat s'affiche de cette manière :

| probablement que Apprenti.xls n'est pas d'origine "Métropole" ??? ;o)))
| je n'ai pas identifié ce format : "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "

le format retenu par le demandeur représente ce choix dans la liste
déroulante : ? euro (123 ?)

"_-* #,##0.00 [$?-40C]_-;-* #,##0.00 [$?-40C]_-;_-* ""-""??
[$?-40C]_-;"
(ce format est celui des français..métropole(Seulement pour l'Euro...)


Voilà l'origine !


Salutations!





"Modeste" a écrit dans le message de news:

Bonsour "michel" ;o)))
Qu'est-ce que ceci : [$?-1]_ dans ton format... qu'est-ce qui doit
s'afficher dans ta cellule... donne nous un exemple !
Résultat.NumberFormat = "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "


;o))) Clément passe ton chemin !!!
Cela ressemble à un format Monétaire $
et à Ste Genevieve des Bois les apprentis (francophones, canadiens,
cararaibes ???) comptent en EURO : ?
par défaut dans la boite format monétaire avec dans ce cas le symbole
local
Euro ??? :
resultat.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"

Dollar anglais canada : Selection.NumberFormat > "[$$-1009]#,##0.00;[Red]-[$$-1009]#,##0.00"
Dollar anglais Caraîbes : Selection.NumberFormat > "[$$-2409]#,##0.00;[Red]-[$$-2409]#,##0.00"
Dollar Canada français : Selection.NumberFormat = "#,##0.00
[$$-C0C]_-;[Red]#,##0.00 [$$-C0C]-"

mais s'il avait souhaité un format monnaie Azéri (cyrillique) alors
Selection.NumberFormat = "#,##0.00 [$???.-82C];[Red]-#,##0.00 [$???.-82C]"

probablement que Apprenti.xls n'est pas d'origine "Métropole" ??? ;o)))
je n'ai pas identifié ce format : "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "

;o)))



--
n'oubliez pas les FAQ :
http://www.excelabo.net http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr
--
Feed Back
http://viadresse.com/?94912042






Avatar
Modeste
Bonsour® Apprenti.xls
Après la formule
Résultat = WorksheetFunction.Round(Evaluate...
j'ai retenu le format de Denis :
Résultat.NumberFormat = "_-* #,##0.00 [$?-40C]_-;-* #,##0.00
[$?-40C]_-;_-* ""-""?? [$?-40C]_-;"
MsgBox Résultat


Beaucoup de confusion dans tout ça !!!!
1-
Résultat=WorksheetFunction.Round(Evaluate...
Résultat dans ce cas est le nom d'une variable
2-
Résultat.NumberFormat
Résultat est ici le nom d'un objet (Cellule ou plage)

une alternative :
Résultat = WorksheetFunction.Round(Evaluate...
[A10].value=Résultat
[A10].numberformat = "$#,##0.00_);[Red]($#,##0.00)"
il faut comme précisé précédement que le symbole ? soit selectionné dans la
boite choix de format monétaire

--
n'oubliez pas les FAQ :
http://www.excelabo.net http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr
--
Feed Back
http://viadresse.com/?94912042

Avatar
michdenis
Bonjour Apprenti,

Si tu veux afficher un format particulier à une donnée dans un MsgBox(), tu dois utiliser la fonction Format().

Tu dois distinguer 2 choses : le format des cellules appartient aux cellules de la feuille de calcul et pour formater leur contenu,
tu dois utiliser la méthode "NumberFormat" de l'objet "Range" comme le stipule Modeste. En conséquence, tu as besoin d'un objet
"Range" (plage de cellules)

Range("A1").numberformat = "_# ##0,00" ?";[Rouge]_# ##0,00" ?""
Cells(1,1).numberformat = "_# ##0,00" ?";[Rouge]_# ##0,00" ?""
Range("A1:G25").numberforamt = "_# ##0,00" ?";[Rouge]_# ##0,00" ?""
.../... et la liste est longue ....

Cependant, pour modifier le format d'une variable, regarde dans l'aide la fonction "Format" ...Son résultat n'est visible que par
l'entremise d'une variable dans une fenêtre vba et ne s'applique pas aux cellules. Son effet se fait voir dans un Msgbox ou dans un
le contenu d'un textbox

Par exemple, tu pourrais avoir quelque chose du genre pour afficher ta variable Résultat :

Attention au type que tu as attribué à ta variable Résultat dans sa déclaration.
Si tu as choisi un type "Double" ou "Currency"
Tu vas avoir de la difficulté... ces types de variables n'aiment pas beaucoup les symboles alphanumériques !
Résultat = Format(résultat, "# ##0.00 ?")

Pour les besoins de tes calculs :
Dim Résultat as double

Et pour l'affichage, tu utilises une variable de Type String
Dim MyVar as string
Msgbox Format(résultat, "# ##0.00 ?"
Ou
Userform1.textbox1 = Format(résultat, "# ##0.00 ?"
Ou
Worksheets("Feuil1").Textbox1 = Format(résultat, "# ##0.00 ?"
Et tous les "shapes" de la feuille de calcul acceptant un contenu texte.


Salutations!




"Apprenti.xls" <apprenti.xls(a supprimer)@voila.fr> a écrit dans le message de news:
Merci Modeste, merci Denis.

Je suis bien apprenti français métropolitain et je souhaitais afficher le
résultat en euros.
Je suis effectivement passé par l'enregistreur de macros pour connaître le
format adéquat.
Malgré vos explications, je n'arrive toujours pas à afficher le résultat tel
que je le souhaiterais dans un msgbox.

Après la formule
Résultat = WorksheetFunction.Round(Evaluate...
j'ai retenu le format de Denis :
Résultat.NumberFormat = "_-* #,##0.00 [$?-40C]_-;-* #,##0.00 [$?-40C]_-;_-*
""-""?? [$?-40C]_-;"
MsgBox Résultat

J'obtiens l'erreur d'exécution 424 objet requis.

Qu'est-ce que j'ai bien pu oublier encore ?
Merci de vos lumières.

"michdenis" a écrit dans le message de news:

Bonjour Modeste,

| je n'ai pas identifié ce format : "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "

Merci pour tes exemples... et je viens de comprendre que l'ami Apprenti
avait utilisé l'enregistreur de macro et ce faisant, si tu
sélectionnes dans la fenêtre des formats de cellules / onglet nombre /
Comptabilité / tu as une liste déroulante qui offre plusieurs
alternatives concernant l'euro ....

et le résultat s'affiche de cette manière :

| probablement que Apprenti.xls n'est pas d'origine "Métropole" ??? ;o)))
| je n'ai pas identifié ce format : "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "

le format retenu par le demandeur représente ce choix dans la liste
déroulante : ? euro (123 ?)

"_-* #,##0.00 [$?-40C]_-;-* #,##0.00 [$?-40C]_-;_-* ""-""??
[$?-40C]_-;"
(ce format est celui des français..métropole(Seulement pour l'Euro...)


Voilà l'origine !


Salutations!





"Modeste" a écrit dans le message de news:

Bonsour "michel" ;o)))
Qu'est-ce que ceci : [$?-1]_ dans ton format... qu'est-ce qui doit
s'afficher dans ta cellule... donne nous un exemple !
Résultat.NumberFormat = "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "


;o))) Clément passe ton chemin !!!
Cela ressemble à un format Monétaire $
et à Ste Genevieve des Bois les apprentis (francophones, canadiens,
cararaibes ???) comptent en EURO : ?
par défaut dans la boite format monétaire avec dans ce cas le symbole
local
Euro ??? :
resultat.NumberFormat = "$#,##0.00_);[Red]($#,##0.00)"

Dollar anglais canada : Selection.NumberFormat > "[$$-1009]#,##0.00;[Red]-[$$-1009]#,##0.00"
Dollar anglais Caraîbes : Selection.NumberFormat > "[$$-2409]#,##0.00;[Red]-[$$-2409]#,##0.00"
Dollar Canada français : Selection.NumberFormat = "#,##0.00
[$$-C0C]_-;[Red]#,##0.00 [$$-C0C]-"

mais s'il avait souhaité un format monnaie Azéri (cyrillique) alors
Selection.NumberFormat = "#,##0.00 [$???.-82C];[Red]-#,##0.00 [$???.-82C]"

probablement que Apprenti.xls n'est pas d'origine "Métropole" ??? ;o)))
je n'ai pas identifié ce format : "#,##0.00 [$?-1]_ ;-#,##0.00 [$?-1] "

;o)))



--
n'oubliez pas les FAQ :
http://www.excelabo.net http://dj.joss.free.fr/faq.htm
http://www.faqoe.com http://faqword.free.fr
--
Feed Back
http://viadresse.com/?94912042






Avatar
Apprenti.xls
Tout est parfaitement clair ! Je vous remercie une nouvelle fois de m'avoir
éclairé.
Je comprends mieux maintenant pourquoi je n'y arrivais pas avec une fonction
qui s'adapte à un objet.
À titre d'info, mon projet est maintenant parfaitement opérationnel.
Ma variable "Résultat" est définie comme variant, et cela a l'air de
convenir.
Merci encore et à bientôt !

J'apprends, j'apprends ...
1 2