OVH Cloud OVH Cloud

un sommeprod récalcitrant

7 réponses
Avatar
news free
Bonsoir

Après avoir cherché en vain pourquoi la macro suivante ne fonctionne pas, je
m'en reporte à los qualités d'experts.
Voilà le problème.
Lorsque je rentre dans les cellules la fonction sommeprod correspondante
tout fonctionne
lorsque j'inclus en VBA sumproduct avec des valeurs fixes, çà fonctionne
mais çà plante lorsque j'essaye d'y intégrer une boucle avec notamment la
valeur dl comme "dernière ligne".

merci de m'éclairer

je vous joins la macro correspondante

Fred, pas tout à fait débutant, mais loin d'être expert

Sub remplis_le_tableau()
Dim dl As Integer 'dl est la dernière ligne de la colonne
Dim zei As String 'valeur de la zei pour le secteur choisi
Dim trn As String 'valeur de la tournée pour le secteur choisi
dl = [A65536].End(3).Row
zei = Sheets("feuil1").Cells(10, 10).Value
trn = Sheets("feuil1").Cells(25, 10).Value
'boucle des 10 prochains jours
For dates = 13 To 31 Step 2
jour = Sheets("feuil1").Cells(9, dates).Value
'boucle des précisions horaires
For plage = 10 To 19
rdv = Sheets("feuil1").Cells(plage, 11).Value
'affichage du nombre d'interventions
Sheets("feuil1").Cells(plage, 13).FormulaR1C1 =
"=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R & dl &
C6=zei)*1)"
'affichage du temps cumulé d'intervention
Sheets("feuil1").Cells(plage, 14).FormulaR1C1 =
"=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R & dl &
C6=zei)*(R1C5:R & dl & C5)"
Next plage
Next dates
End Sub

7 réponses

Avatar
Nicolas B.
Salut,

Lorsque tu écris la formule entre guillements, vba essaye d'inscrire mot
pout mot ce que tu as écrit. Ta formule aurait donc été :
=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R & dl &
C6=zei)*1)
(C'est-à-dire exactement ce que tu as tapé dans vba.)
Ca provoque évidemment une erreur.

Pour remplacer les dl, zei, rdv et autres variables par leurs valeurs, il ne
faut pas qu'ils soient dans les guillements, mais concaténer toute la
formule. Exemple :
="sum(A1:A" & Variable & ")"
(pour =somme(a1:ax), x changeant)

La première formule de ta macro devient donc (attention aux retours à la
ligne) :
Sheets("feuil1").Cells(plage, 13).FormulaR1C1 = "=SUMPRODUCT((R1C2:R" & dl &
"C2=rdv)*(R1C4:R" & dl & "C4=" & jour & ")*(R1C6:R" & dl & "C6=" & zei &
")*1)"

Je te laisse faire de même pour la deuxième formule.


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Bonsoir

Après avoir cherché en vain pourquoi la macro suivante ne fonctionne
pas, je m'en reporte à los qualités d'experts.
Voilà le problème.
Lorsque je rentre dans les cellules la fonction sommeprod
correspondante tout fonctionne
lorsque j'inclus en VBA sumproduct avec des valeurs fixes, çà
fonctionne mais çà plante lorsque j'essaye d'y intégrer une boucle
avec notamment la valeur dl comme "dernière ligne".

merci de m'éclairer

je vous joins la macro correspondante

Fred, pas tout à fait débutant, mais loin d'être expert

Sub remplis_le_tableau()
Dim dl As Integer 'dl est la dernière ligne de la colonne
Dim zei As String 'valeur de la zei pour le secteur choisi
Dim trn As String 'valeur de la tournée pour le secteur choisi
dl = [A65536].End(3).Row
zei = Sheets("feuil1").Cells(10, 10).Value
trn = Sheets("feuil1").Cells(25, 10).Value
'boucle des 10 prochains jours
For dates = 13 To 31 Step 2
jour = Sheets("feuil1").Cells(9, dates).Value
'boucle des précisions horaires
For plage = 10 To 19
rdv = Sheets("feuil1").Cells(plage, 11).Value
'affichage du nombre d'interventions
Sheets("feuil1").Cells(plage, 13).FormulaR1C1 > "=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R &
dl & C6=zei)*1)"
'affichage du temps cumulé d'intervention
Sheets("feuil1").Cells(plage, 14).FormulaR1C1 > "=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R &
dl & C6=zei)*(R1C5:R & dl & C5)"
Next plage
Next dates
End Sub


Avatar
Michel Gaboly
Bonjour,

Pas regardé en détail mais a priori problème avec R1C2:R & dl & C2
R1C2R:R et C2 ne sont pas des variables, et ne peuvent pas être concaténées
avec dl directement. idem pour les autres concaténations

Pas d'erreur signalée par VBA car c'est dans une formule, entre guillemets.
Pour VBA, l'ensemble est une chaîne de caractères, donc aucun contrôle.


Bonsoir

Après avoir cherché en vain pourquoi la macro suivante ne fonctionne pas, je
m'en reporte à los qualités d'experts.
Voilà le problème.
Lorsque je rentre dans les cellules la fonction sommeprod correspondante
tout fonctionne
lorsque j'inclus en VBA sumproduct avec des valeurs fixes, çà fonctionne
mais çà plante lorsque j'essaye d'y intégrer une boucle avec notamment la
valeur dl comme "dernière ligne".

merci de m'éclairer

je vous joins la macro correspondante

Fred, pas tout à fait débutant, mais loin d'être expert

Sub remplis_le_tableau()
Dim dl As Integer 'dl est la dernière ligne de la colonne
Dim zei As String 'valeur de la zei pour le secteur choisi
Dim trn As String 'valeur de la tournée pour le secteur choisi
dl = [A65536].End(3).Row
zei = Sheets("feuil1").Cells(10, 10).Value
trn = Sheets("feuil1").Cells(25, 10).Value
'boucle des 10 prochains jours
For dates = 13 To 31 Step 2
jour = Sheets("feuil1").Cells(9, dates).Value
'boucle des précisions horaires
For plage = 10 To 19
rdv = Sheets("feuil1").Cells(plage, 11).Value
'affichage du nombre d'interventions
Sheets("feuil1").Cells(plage, 13).FormulaR1C1 > "=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R & dl &
C6=zei)*1)"
'affichage du temps cumulé d'intervention
Sheets("feuil1").Cells(plage, 14).FormulaR1C1 > "=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R & dl &
C6=zei)*(R1C5:R & dl & C5)"
Next plage
Next dates
End Sub


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
news free
Merci de cette rapidité, je vais tester de suite !


"Nicolas B." a écrit dans le message de
news: #ErI5#
Salut,

Lorsque tu écris la formule entre guillements, vba essaye d'inscrire mot
pout mot ce que tu as écrit. Ta formule aurait donc été :
=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R & dl &
C6=zei)*1)
(C'est-à-dire exactement ce que tu as tapé dans vba.)
Ca provoque évidemment une erreur.

Pour remplacer les dl, zei, rdv et autres variables par leurs valeurs, il
ne

faut pas qu'ils soient dans les guillements, mais concaténer toute la
formule. Exemple :
="sum(A1:A" & Variable & ")"
(pour =somme(a1:ax), x changeant)

La première formule de ta macro devient donc (attention aux retours à la
ligne) :
Sheets("feuil1").Cells(plage, 13).FormulaR1C1 = "=SUMPRODUCT((R1C2:R" & dl
&

"C2=rdv)*(R1C4:R" & dl & "C4=" & jour & ")*(R1C6:R" & dl & "C6=" & zei &
")*1)"

Je te laisse faire de même pour la deuxième formule.


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Bonsoir

Après avoir cherché en vain pourquoi la macro suivante ne fonctionne
pas, je m'en reporte à los qualités d'experts.
Voilà le problème.
Lorsque je rentre dans les cellules la fonction sommeprod
correspondante tout fonctionne
lorsque j'inclus en VBA sumproduct avec des valeurs fixes, çà
fonctionne mais çà plante lorsque j'essaye d'y intégrer une boucle
avec notamment la valeur dl comme "dernière ligne".

merci de m'éclairer

je vous joins la macro correspondante

Fred, pas tout à fait débutant, mais loin d'être expert

Sub remplis_le_tableau()
Dim dl As Integer 'dl est la dernière ligne de la colonne
Dim zei As String 'valeur de la zei pour le secteur choisi
Dim trn As String 'valeur de la tournée pour le secteur choisi
dl = [A65536].End(3).Row
zei = Sheets("feuil1").Cells(10, 10).Value
trn = Sheets("feuil1").Cells(25, 10).Value
'boucle des 10 prochains jours
For dates = 13 To 31 Step 2
jour = Sheets("feuil1").Cells(9, dates).Value
'boucle des précisions horaires
For plage = 10 To 19
rdv = Sheets("feuil1").Cells(plage, 11).Value
'affichage du nombre d'interventions
Sheets("feuil1").Cells(plage, 13).FormulaR1C1 > > "=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R &
dl & C6=zei)*1)"
'affichage du temps cumulé d'intervention
Sheets("feuil1").Cells(plage, 14).FormulaR1C1 > > "=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R &
dl & C6=zei)*(R1C5:R & dl & C5)"
Next plage
Next dates
End Sub






Avatar
Michel Gaboly
Complément :

"=SUMPRODUCT((R1C2:R" & dl & "C2=" & rdv & ")*(R1C4:R" & dl & "C4=" & jour & " )*(R1C6:R" & dl & "C6=" & zei & ")*1)"

(sur une seule ligne) au lieu de

"=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R & dl &C6=zei)*1)"

pour le premier cas. Je te laisse corriger l'autre ;-)))

L'idée est que dl, rdv, jour et zei sont des variables définies dans la procé-
dure VBA, qui ne doivent pas se retouver dans la formule sur la feuille de
calcul. Chacune doit donc être isolée du reste par une concaténation.



Bonjour,

Pas regardé en détail mais a priori problème avec R1C2:R & dl & C2
R1C2R:R et C2 ne sont pas des variables, et ne peuvent pas être concaténées
avec dl directement. idem pour les autres concaténations

Pas d'erreur signalée par VBA car c'est dans une formule, entre guillemets.
Pour VBA, l'ensemble est une chaîne de caractères, donc aucun contrôle.


Bonsoir

Après avoir cherché en vain pourquoi la macro suivante ne fonctionne pas, je
m'en reporte à los qualités d'experts.
Voilà le problème.
Lorsque je rentre dans les cellules la fonction sommeprod correspondante
tout fonctionne
lorsque j'inclus en VBA sumproduct avec des valeurs fixes, çà fonctionne
mais çà plante lorsque j'essaye d'y intégrer une boucle avec notamment la
valeur dl comme "dernière ligne".

merci de m'éclairer

je vous joins la macro correspondante

Fred, pas tout à fait débutant, mais loin d'être expert

Sub remplis_le_tableau()
Dim dl As Integer 'dl est la dernière ligne de la colonne
Dim zei As String 'valeur de la zei pour le secteur choisi
Dim trn As String 'valeur de la tournée pour le secteur choisi
dl = [A65536].End(3).Row
zei = Sheets("feuil1").Cells(10, 10).Value
trn = Sheets("feuil1").Cells(25, 10).Value
'boucle des 10 prochains jours
For dates = 13 To 31 Step 2
jour = Sheets("feuil1").Cells(9, dates).Value
'boucle des précisions horaires
For plage = 10 To 19
rdv = Sheets("feuil1").Cells(plage, 11).Value
'affichage du nombre d'interventions
Sheets("feuil1").Cells(plage, 13).FormulaR1C1 > > "=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R & dl &
C6=zei)*1)"
'affichage du temps cumulé d'intervention
Sheets("feuil1").Cells(plage, 14).FormulaR1C1 > > "=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R & dl &
C6=zei)*(R1C5:R & dl & C5)"
Next plage
Next dates
End Sub


--
Cordialement,

Michel Gaboly
http://www.gaboly.com


--
Cordialement,

Michel Gaboly
http://www.gaboly.com


Avatar
Michel Gaboly
Bonsoir,

Excuse-moi, je n'avais pas vu ta réponse ;-((



Salut,

Lorsque tu écris la formule entre guillements, vba essaye d'inscrire mot
pout mot ce que tu as écrit. Ta formule aurait donc été :
=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R & dl &
C6=zei)*1)
(C'est-à-dire exactement ce que tu as tapé dans vba.)
Ca provoque évidemment une erreur.

Pour remplacer les dl, zei, rdv et autres variables par leurs valeurs, il ne
faut pas qu'ils soient dans les guillements, mais concaténer toute la
formule. Exemple :
="sum(A1:A" & Variable & ")"
(pour =somme(a1:ax), x changeant)

La première formule de ta macro devient donc (attention aux retours à la
ligne) :
Sheets("feuil1").Cells(plage, 13).FormulaR1C1 = "=SUMPRODUCT((R1C2:R" & dl &
"C2=rdv)*(R1C4:R" & dl & "C4=" & jour & ")*(R1C6:R" & dl & "C6=" & zei &
")*1)"

Je te laisse faire de même pour la deuxième formule.

A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC

Bonsoir

Après avoir cherché en vain pourquoi la macro suivante ne fonctionne
pas, je m'en reporte à los qualités d'experts.
Voilà le problème.
Lorsque je rentre dans les cellules la fonction sommeprod
correspondante tout fonctionne
lorsque j'inclus en VBA sumproduct avec des valeurs fixes, çà
fonctionne mais çà plante lorsque j'essaye d'y intégrer une boucle
avec notamment la valeur dl comme "dernière ligne".

merci de m'éclairer

je vous joins la macro correspondante

Fred, pas tout à fait débutant, mais loin d'être expert

Sub remplis_le_tableau()
Dim dl As Integer 'dl est la dernière ligne de la colonne
Dim zei As String 'valeur de la zei pour le secteur choisi
Dim trn As String 'valeur de la tournée pour le secteur choisi
dl = [A65536].End(3).Row
zei = Sheets("feuil1").Cells(10, 10).Value
trn = Sheets("feuil1").Cells(25, 10).Value
'boucle des 10 prochains jours
For dates = 13 To 31 Step 2
jour = Sheets("feuil1").Cells(9, dates).Value
'boucle des précisions horaires
For plage = 10 To 19
rdv = Sheets("feuil1").Cells(plage, 11).Value
'affichage du nombre d'interventions
Sheets("feuil1").Cells(plage, 13).FormulaR1C1 > > "=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R &
dl & C6=zei)*1)"
'affichage du temps cumulé d'intervention
Sheets("feuil1").Cells(plage, 14).FormulaR1C1 > > "=SUMPRODUCT((R1C2:R & dl & C2=rdv)*(R1C4:R & dl & C4=jour)*(R1C6:R &
dl & C6=zei)*(R1C5:R & dl & C5)"
Next plage
Next dates
End Sub



--
Cordialement,

Michel Gaboly
http://www.gaboly.com


Avatar
Nicolas B.
Salut,

Excuse-moi, je n'avais pas vu ta réponse ;-((
Aucun problème. Il vaut mieux que "news free" (???) ait plusieurs réponses

qu'aucune ;-)


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Bonsoir,

Excuse-moi, je n'avais pas vu ta réponse ;-((




Avatar
AV
Avis perso : l'utilisation du style de références R1C1 (issues de l'enregistreur
de macros) ne facilite pas la lecture et le bidouillage du code
Les réf de style A1 sont plus aisées à manipuler et "décrypter" (c'est toujours
un avis perso... que l'on partage à plusieurs ;-)
Dans ton exemple ça pourrait donner ça :

Si "rdv, jour et zei" sont des noms définis dans le classeur (ce que tu ne
précises pas) :

Sheets("feuil1").Cells(plage, 13).Formula = _
"=SUMPRODUCT((B1:B" & dl & "=rdv)*(D1:D" & dl & "=jour)*(F1:F" & dl & "=zei))"

Si, comme je le subodore, tes noms sont des constantes textes entre guillemets
Ex : ...B1:B5="rdv")*(D1:D5="jour"........

Sheets("feuil1").Cells(2, 13).Formula = _
"=SUMPRODUCT((B1:B" & dl & "=""rdv"")*(D1:D" & dl & "=""jour"")*(F1:F" & dl &
"=""zei""))"

PS : en fin de formule, le *1 n'est pas nécessaire
AV