OVH Cloud OVH Cloud

Un Pb Matriciel

9 réponses
Avatar
Frédo P.
Bonjour
Est ce que dans ce cas les plages znAch & Rgrg serait la cause de l'échec?
prd = "Berlingot"
Set znAch = Sheets("Achats").Range("E2:E" &
Sheets("Achats").[E65536].End(xlUp).Row)
Set Rgrg = znAch.Offset(0, 3)
'------essai 1------
test = Evaluate("Sum((znAch= prd) *Rgrg)")
N° d'erreur=2029
'------essai 2-------
test = Evaluate(Sum((znAch = prd) * Rgrg)))
sélection de "Rgrg" et message: Erreur de compilation: Sub ou Fonction non
définie

Fred
Pour répondre enlevez nsp

9 réponses

Avatar
isabelle
bonjour Fredo,

essai comme ça,

prd = "Berlingot"
znAch = Sheets("Achats").Range("E2:E" & _
Sheets("Achats").[E65536].End(xlUp).Row).Address
Rgrg = Range("znAch").Offset(0, 3).Address
test = Evaluate("Sum((znAch= prd) *Rgrg)")

isabelle


Bonjour
Est ce que dans ce cas les plages znAch & Rgrg serait la cause de l'échec?
prd = "Berlingot"
Set znAch = Sheets("Achats").Range("E2:E" &
Sheets("Achats").[E65536].End(xlUp).Row)
Set Rgrg = znAch.Offset(0, 3)
'------essai 1------
test = Evaluate("Sum((znAch= prd) *Rgrg)")
N° d'erreur 29
'------essai 2-------
test = Evaluate(Sum((znAch = prd) * Rgrg)))
sélection de "Rgrg" et message: Erreur de compilation: Sub ou Fonction non
définie

Fred
Pour répondre enlevez nsp


Avatar
isabelle
oup's, ça ne fonctionne pas. j'avais testé auparavant

ActiveWorkbook.Names.Add Name:="prd", RefersTo:="Berlingot"
ActiveWorkbook.Names.Add Name:="znAch",
RefersTo:=Sheets("Achats").Range("E2:E" & _
Sheets("Achats").[E65536].End(xlUp).Row)
ActiveWorkbook.Names.Add Name:="Rgrg",
RefersTo:=Range(Range("znAch").Offset(0, 3).Address)
Range("A1") = Evaluate("=Sumproduct((znAch = prd) * (Rgrg))")

et oublier de suprimer les noms avant de testé.

isabelle



Bonjour
Est ce que dans ce cas les plages znAch & Rgrg serait la cause de l'échec?
prd = "Berlingot"
Set znAch = Sheets("Achats").Range("E2:E" &
Sheets("Achats").[E65536].End(xlUp).Row)
Set Rgrg = znAch.Offset(0, 3)
'------essai 1------
test = Evaluate("Sum((znAch= prd) *Rgrg)")
N° d'erreur 29
'------essai 2-------
test = Evaluate(Sum((znAch = prd) * Rgrg)))
sélection de "Rgrg" et message: Erreur de compilation: Sub ou Fonction non
définie

Fred
Pour répondre enlevez nsp


Avatar
Frédo P.
Bonjour Isabelle
Si j'ai bien compris, il faut employer des plages nommées et non pas des
variables(range) ? si tel est le cas cela me parrait pas trop convenable
,les lignes de codes sont dans une boucle For each avec plus de 200 valeurs
différentes pour prd.
Voici la partie de la procédure concernée qui fonctionne mais en procéde à
successions d'additions , je souhaite gagner un vitesse d'exécution avec une
autre méthode si possible.
Sub Restock()
Dim ana As Integer, anc As Integer, anb As Integer, c As Object, d As
Object, O_i As Byte, prd As String
Dim zn As Range, co As String, lg As Integer, col As Byte, znAch As Range, j
As Byte, campa As String
Dim tranche1() As Single, tranche2() As Single, tranche3() As Single,
tranche4() As Single
Dim surf As Single, coef As Single, act1 As Range, act2 As Range, act3 As
Range, act4 As Range, dab$, dad$

col = Sheets("stocks").[a3] - 6
ReDim tranche1(col), tranche2(col), tranche3(col), tranche4(col)
Set act1 = Sheets("stocks").Range("E5:E" & col + 5)
Set act2 = Sheets("stocks").Range("G5:G" & col + 5)
Set act3 = Sheets("stocks").Range("I5:I" & col + 5)
Set act4 = Sheets("stocks").Range("K5:K" & col + 5)
ana = Sheets("stocks").[O3] ' -------------------- année des achats
Set zn = Sheets("stocks").Range("A5:A" &
Sheets("stocks").[E65000].End(xlUp).Row)
Set znAch = Sheets("Achats").Range("E2:E" &
Sheets("Achats").[E65536].End(xlUp).Row)
For Each c In zn
prd = c
If c.Value <> "" Then
'recherche du produit sur la colonne et attribuer à chacun les Qtés
correspondantes achetées / année
With znAch
Set d = .Find(prd, LookIn:=xlValues, lookat:=xlWhole)
If Not d Is Nothing Then
dab = d.Address
Do
If d.Offset(0, 3) > 0 And d.Offset(0, 7) > 0 And d.Offset(0, -4) <>
"" And d.Offset(0, -2) = ana Then
co = d.Offset(0, -4)
O_i = Application.Match(co, Range("groupe")) -
1' -------groupe=GIE de Quatre personnes
anb = d.Offset(0, -2).Value
If anb = ana Then
Select Case O_i
Case 0
tranche1(c.Row - 5) = tranche1(c.Row - 5) + d.Offset(0,
3).Value
Case 1
tranche2(c.Row - 5) = tranche2(c.Row - 5) + d.Offset(0,
3).Value
Case 2
tranche3(c.Row - 5) = tranche3(c.Row - 5) + d.Offset(0,
3).Value
Case 3
tranche4(c.Row - 5) = tranche4(c.Row - 5) + d.Offset(0,
3).Value
End Select
End If
End If
Set d = .FindNext(d)
If Not d Is Nothing Then
dad = d.Address
End If
co = ""
Loop While Not d Is Nothing And dad <> dab
End If
End With

End If


Next c
'Sheets("feuil1").[B4] = 1

'--------------------
act1.Value = Application.WorksheetFunction.Transpose(tranche1)
act2.Value = Application.WorksheetFunction.Transpose(tranche2)
act3.Value = Application.WorksheetFunction.Transpose(tranche3)
act4.Value = Application.WorksheetFunction.Transpose(tranche4)
End Sub

--
Fred
Pour répondre enlevez nsp

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

oup's, ça ne fonctionne pas. j'avais testé auparavant

ActiveWorkbook.Names.Add Name:="prd", RefersTo:="Berlingot"
ActiveWorkbook.Names.Add Name:="znAch",
RefersTo:=Sheets("Achats").Range("E2:E" & _
Sheets("Achats").[E65536].End(xlUp).Row)
ActiveWorkbook.Names.Add Name:="Rgrg",
RefersTo:=Range(Range("znAch").Offset(0, 3).Address)
Range("A1") = Evaluate("=Sumproduct((znAch = prd) * (Rgrg))")

et oublier de suprimer les noms avant de testé.

isabelle



Bonjour
Est ce que dans ce cas les plages znAch & Rgrg serait la cause de
l'échec?


prd = "Berlingot"
Set znAch = Sheets("Achats").Range("E2:E" &
Sheets("Achats").[E65536].End(xlUp).Row)
Set Rgrg = znAch.Offset(0, 3)
'------essai 1------
test = Evaluate("Sum((znAch= prd) *Rgrg)")
N° d'erreur 29
'------essai 2-------
test = Evaluate(Sum((znAch = prd) * Rgrg)))
sélection de "Rgrg" et message: Erreur de compilation: Sub ou Fonction
non


définie

Fred
Pour répondre enlevez nsp




Avatar
AV
Comme ça aussi :

Sub zz_Eval()
Prd = "berlingot"
znAch = "Achats!" & Range("Achats!E2:E" &
Sheets("Achats").[E65536].End(xlUp).Row).Address
Rgrg = "Achats!" & Range(znAch).Offset(0, 3).Address
MsgBox Evaluate("Sum((" & [znAch] & "=" & """" & Prd & """" & ") *" & [Rgrg] &
")")
End Sub

AV
Avatar
Frédo P.
Bonjour alain
Comment veux tu que l'on trouve ça tout seul
J'ai bien Excel 2000 et VBA (Osman Eyrolles), quand j'aurrai fini de tout
apprendre il faudra que je fasse 2 trous dans toutes les feuilles et d'y
mettre une ficelle pour pas qu'elles s'envollent.En plus il n'y aucun
exemple sur le prrrésent-tement sujet!!

--
Fred
Pour répondre enlevez nsp

"AV" a écrit dans le message de news:
bntrpk$g71$
Comme ça aussi :

Sub zz_Eval()
Prd = "berlingot"
znAch = "Achats!" & Range("Achats!E2:E" &
Sheets("Achats").[E65536].End(xlUp).Row).Address
Rgrg = "Achats!" & Range(znAch).Offset(0, 3).Address
MsgBox Evaluate("Sum((" & [znAch] & "=" & """" & Prd & """" & ") *" &
[Rgrg] &

")")
End Sub

AV




Avatar
Frédo P.
J'ai oublié de poser la question
est ce que
Evaluate("Sum((" & [znAch] & "=" & """" & Prd & """" & ") *" & [Rgrg] &")")
serait gagnant en temps d'exécution en lieu et place de ce que j'ai pondu
plus haut Cad une suite d'additions ?

--
Fred
Pour répondre enlevez nsp

"AV" a écrit dans le message de news:
bntrpk$g71$
Comme ça aussi :

Sub zz_Eval()
Prd = "berlingot"
znAch = "Achats!" & Range("Achats!E2:E" &
Sheets("Achats").[E65536].End(xlUp).Row).Address
Rgrg = "Achats!" & Range(znAch).Offset(0, 3).Address
MsgBox Evaluate("Sum((" & [znAch] & "=" & """" & Prd & """" & ") *" &
[Rgrg] &

")")
End Sub

AV




Avatar
AV
Comment veux tu que l'on trouve ça tout seul


C'est juste un "exercice de style" sur la fonction Evaluate et sa syntaxe
(façons de "ficeler" la chaîne de caractère avec des variables pour que Evaluate
puisse l'interpréter correctement) !
Pour d'autres exemples
http://disciplus.simplex.free.fr/classeursxl/av-evaluate.zip
NB : La solution d'utiliser des plages nommées ou/et des noms définis (réponse
d'Isabelle) , simplifie l'écriture

J'ai bien Excel 2000 et VBA (Osman Eyrolles), quand j'aurrai fini de tout
apprendre il faudra que je fasse 2 trous dans toutes les feuilles et d'y
mettre une ficelle pour pas qu'elles s'envollent.


;-)

AV

Avatar
AV
J'ai oublié de poser la question est ce que
Evaluate("Sum((" & [znAch] & "=" & """" & Prd & """" & ") *" & [Rgrg] &")")
serait gagnant en temps d'exécution en lieu et place de ce que j'ai pondu
plus haut Cad une suite d'additions ?


A priori oui dans la mesure ou tu passes par une boucle mais sur des plages
restreintes, ça devrait être invisible !
Le mieux c'est que tu fasses le test sur d'énOOrmes plages
Pour les tests, je passe la main :-)

AV

Avatar
Frédo P.
Mille merci Cher professeur pour la main:-) je m'y attele.
une HS: peut être sais tu, ChrisV ??
J'appréciait aussi ces interventions, nous ferait il pas un pêché??

--
Fred
Pour répondre enlevez nsp

"AV" a écrit dans le message de news:
bnu0lq$mdv$
J'ai oublié de poser la question est ce que
Evaluate("Sum((" & [znAch] & "=" & """" & Prd & """" & ") *" & [Rgrg]
&")")


serait gagnant en temps d'exécution en lieu et place de ce que j'ai
pondu


plus haut Cad une suite d'additions ?


A priori oui dans la mesure ou tu passes par une boucle mais sur des
plages

restreintes, ça devrait être invisible !
Le mieux c'est que tu fasses le test sur d'énOOrmes plages
Pour les tests, je passe la main :-)

AV