boujour!
J'ai lu cette discussion.
j'essaie de me servir de vos code mais peu importe le code que j'utilise ca me donne toujours 0????
Merci de votre aide!
je joint mon fichier ET P.S.: NE REGARDER PAS MON CODE J'AI AUCUNE FORMATION ;-(
Version imprimable
boujour!
J'ai lu cette discussion.
j'essaie de me servir de vos code mais peu importe le code que j'utilise ca me donne toujours 0????
Merci de votre aide!
je joint mon fichier ET P.S.: NE REGARDER PAS MON CODE J'AI AUCUNE FORMATION ;-(
Bonjour,
peux-tu nous copier ta procédure contenant SumProduct afin qu'on puisse tenter de t'aider ?
je rebondis sur ce que j'ai pu lire sur ce fil, il est indiqué :
je suis assez surpris ... puisque je l'utilise très très souvent ... et pas plus tard qu'il y a une heure dans ce bloc With (pas très joli, je vous l'accorde, c'est un premier jet fonctionnel !) :Citation:
En VBA,Tu ne peux pas utiliser SUMPRODUCT avec worksheetfunction
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 With FEUILLE_FILTRE .Range("A5") = "NOMBRE" .Range("B5") = "DELAIS" CLASSEUR_BDD.Worksheets(Split(CLASSEUR_BDD.Name, ".")(0)).UsedRange.AdvancedFilter _ Action:=xlFilterCopy, _ Criteriarange:=.Range("A1").CurrentRegion, _ CopyToRange:=.Range("A5:B5"), _ Unique:=False FEUILLE_RESULTAT.Range("RESULTAT_FILTRE").Cells(Position, 1).Offset(0, 1 + k).Value = _ Round(Application.WorksheetFunction.SumProduct(.Range(.Cells(6, 1), .Cells(6, 1).End(xlDown)), .Range(.Cells(6, 2), .Cells(6, 2).End(xlDown))) _ / _ Application.WorksheetFunction.Sum(.Range(.Cells(6, 1), .Cells(6, 1).End(xlDown))), 2) End With
merci pour ton aide Joe :-)
mais n'oublie pas j'ai pas de formation en vb donc c'est du chinois ce code pour moi ;-(
Ca tombe bien, on est deux ... le VBA je l'ai appris sur ce forum "tout seul, comme un grand"
(Tutoriel, Faq, quelques sujets de discussions crées ... et beaucoup beaucoup de nuits blanches :aie:)
je pense en revanche que même un débutant de niveau 0 est en mesure de fournir ce que j'ai demandé :
Citation:
peux-tu nous copier ta procédure contenant SumProduct afin qu'on puisse tenter de t'aider ?
J'ai joint mon fichier excel avec mon code vb a l'interieur un peu plus haut dans le post!
Merci encore pour ton aide Joe :-)
Mon problème était un problème de format de cellule c'est tous ;-(
est-ce que c'est possible de mettre certaine valeur en variable?
Merci de votre aide :-)Code:
1
2
3
4
5
6
7
8
9
10
11 'exemple Dim i As Integer i = 1 For i = 1 To QTEMTL MTL = "MATERIEL" & QTEMTL CC = "C9:C32" INSERTION = LIGNEFIN + 1 + i myarray = Evaluate("=--(C9:C31=""MTL"")") 'J'AIMERAIS AVOIR CE CODE EN VARIABLE EX.:= Evaluate("=--(CC="MTL")") myres = Application.WorksheetFunction.SumProduct(myarray, Range(DD), Range(GG)) Range("C" & INSERTION).Value = "TOTAL PI2 " & "MATERIEL & i" & " = " Range("D" & INSERTION).Value = myres
Bonjour,
comme ça ? Je n'utilise jamais Evaluate, je te laisse confirmer si le passage en variable est permis avec cette fonction
Code:myarray = Evaluate("=--(" & CC & "=""MTL"")")
le problèeme est que les noms de mes variables materiel1, matereil2, etc,... contiennent une valeur
mais mon fameux MTL = "MATERIEL" & QTEMTL me donne le nom de la variable ex.: materiel1 et
NON pas la valeur qu'elles contiennent???
Je penses qu'il faudrait que je fasse un genre de MTL = MATERIEL(i) ???
impossible de répondre clairement et précisément à l'ensemble de tes soucis si tu ne pointes qu'un seul truc à chaque fois.
Comme déjà demandé, montre ta procédure complète dans un message.
là y'a pleins de variables dont on ne voit ni les déclaration, ni leur valeur
y'a même pas la fin de la boucle for/next, qui est à la limite le minimum vitale pour t'orienter dans la façon de gérer tes variables incrémentées dans la boucle
ok je joint mon fichier a jour, je travail sur la feuille exportation dans le module5
Merci beaucoup pour ton aide Joe, c'est super gentil :-)
Désolé, mais je n'ouvre que très rarement les fichiers excel comportant des macros (question de sécurité) et uniquement quand je le demande, après avoir estimé que le problème serait difficilement résolu sans analyser la structure.
en l'état de ton problème, cela n'est pas nécessaire.
d'où, demandé à 2 reprises déjà, mon souhait de "voir" ton code (copie le dans un message).
Ok je reformules ma question alors!
j'ai MATERIEL1=PL069, MATERIEL2=ME063, MATERIEL3=MD38, etc,... COMMENT L'ÉCRIRE
EX.: MATERIEL(i) pour que ca ai la bonne valeur dans ma formule
je c'est que quand ont mais des "" c'est seulement du texte, moi je veux la valeur du MATERIEL(i) soit PL069, ME063 OU MD38,Code:myarray = Evaluate("=--(" & CC & "=""MATERIEL(i)"")")
comment l'écrirre pour que la formule fonction et prenne la bonne valeur???
Merci de votre aide :-)
Code:
1
2
3
4
5
6
7
8
9 Sub toto() Dim Tableau(), i As Integer Tableau = Array("PL069", "ME063", "MD38") For i = LBound(Tableau) To UBound(Tableau) myarray = Evaluate("=--(" & CC & "=" & Tableau(i) & ")") Next i End Sub
http://silkyroad.developpez.com/vba/tableaux/
Je vais essayé de ne pas prendre ton nom de Sub personnel ;-)
je ne peux pas utilisé le Array parce que les valeurs des mes MATERIEL ne sont jamais les mêmes tous comme pour le chiffre après MATERIEL,
MATERIEL1=MD038 et un autre fois MATERIEL1=PL069
le chiffre aussi après MATERIEL varie, ca peut être SEULEMENT 1 ou de 1 a 30.
J'ai hâte d'être rendu a ton niveau ;-)
Merci encore et bon weekend, je reviens voir lundi!
Bien évidemment, dans mon exemple, les valeurs sont écrites en dur dans le tableau
Pas le choix, je ne sais pas comment tu comptes gérer le fait que ce ne seront jamais les mêmes !
Il existe des solutions selon le contexte
un exemple : si l'ensemble des valeurs sont en colonne A de "Feuil1" (première valeur en A1 et aucune ligne vide), le tableau peut être rempli ainsi
Code:Tableau = Worksheets("Feuil1").Columns(1).Cells(1,1).CurrentRegion.Value
d'où ma question .... comment peux-tu récupérer les valeurs de tes MATERIELS sur ta feuille Excel ?
ma feuille excel
Pièce jointe 202354
mon code
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182 Sub Tableau() ActiveWorkbook.Worksheets("EXPORTATION").Activate Dim myRange As Range Dim Cell As Range LIGNEFIN = Range("B3").End(xlDown).Row BB = "B" & LIGNEFIN Set myRange1 = ActiveSheet.Range("B3:" & BB) For Each Cell In myRange1 NOMARTICLE = Left(Cell.Value, 8) NOMDOC = Left(ThisWorkbook.Name, 8) If NOMARTICLE = NOMDOC Then LIGNEDEBUT = Cell.Row GoTo MATERIEL End If Next Set myRange2 = ActiveSheet.Range("B3:" & BB) For Each Cell In myRange2 NOMARTICLE = Left(Cell.Value, 8) NOMDOC = Left(ThisWorkbook.Name, 8) If NOMARTICLE <> NOMDOC Then QTEMTL = 0 GoTo FIN: End If Next MATERIEL: CELLSTART = "C" & LIGNEDEBUT CELLEND = "C" & LIGNEFIN CC = CELLSTART & ":" & CELLEND CELLSTARTD = "D" & LIGNEDEBUT CELLENDD = "D" & LIGNEFIN DD = CELLSTARTD & ":" & CELLENDD CELLSTARTG = "G" & LIGNEDEBUT CELLENDG = "G" & LIGNEFIN GG = CELLSTARTG & ":" & CELLENDG If LIGNEFIN = LIGNEDEBUT Then MATERIEL1 = Sheets("EXPORTATION").Range("C" & LIGNEDEBUT) QTEMTL = 1 GoTo PI2 Else GoTo MTL1 End If MTL1: For LIGNE = LIGNEDEBUT + 1 To LIGNEFIN MATERIEL1 = Sheets("EXPORTATION").Range("C" & LIGNEDEBUT) MATERIEL2 = Sheets("EXPORTATION").Range("C" & LIGNE) MTLLIGNE1 = "C" & LIGNEDEBUT If MATERIEL2 = MATERIEL1 Then QTEMTL = 1 GoTo ENCORE1 End If If MATERIEL2 <> MATERIEL1 Then LIGNEDEBUT = LIGNE MATERIEL2 = Sheets("EXPORTATION").Range("C" & LIGNE) GoTo MTL2 End If ENCORE1: Next GoTo PI2 MTL2: For LIGNE = LIGNEDEBUT + 1 To LIGNEFIN MATERIEL3 = Sheets("EXPORTATION").Range("C" & LIGNE) If MATERIEL3 = MATERIEL2 Or MATERIEL3 = MATERIEL1 Then QTEMTL = 2 GoTo ENCORE2 End If If MATERIEL3 <> MATERIEL2 Or MATERIEL3 <> MATERIEL1 Then LIGNEDEBUT = LIGNE MATERIEL3 = Sheets("EXPORTATION").Range("C" & LIGNE) GoTo MTL3 End If ENCORE2: Next GoTo PI2 MTL3: For LIGNE = LIGNEDEBUT + 1 To LIGNEFIN MATERIEL4 = Sheets("EXPORTATION").Range("C" & LIGNE) If MATERIEL4 = MATERIEL3 Or MATERIEL4 = MATERIEL2 Or MATERIEL4 = MATERIEL1 Then QTEMTL = 3 GoTo ENCORE3 End If If MATERIEL4 <> MATERIEL3 Or MATERIEL4 <> MATERIEL2 Or MATERIEL4 <> MATERIEL1 Then LIGNEDEBUT = LIGNE MATERIEL4 = Sheets("EXPORTATION").Range("C" & LIGNE) GoTo MTL4 End If ENCORE3: Next GoTo PI2 MTL4: For LIGNE = LIGNEDEBUT + 1 To LIGNEFIN MATERIEL5 = Sheets("EXPORTATION").Range("C" & LIGNE) If MATERIEL5 = MATERIEL4 Or MATERIEL5 = MATERIEL3 Or MATERIEL5 = MATERIEL2 Or MATERIEL5 = MATERIEL1 Then QTEMTL = 4 GoTo ENCORE4 End If If MATERIEL5 <> MATERIEL4 Or MATERIEL5 <> MATERIEL3 Or MATERIEL5 <> MATERIEL2 Or MATERIEL5 <> MATERIEL1 Then LIGNEDEBUT = LIGNE MATERIEL5 = Sheets("EXPORTATION").Range("C" & LIGNE) GoTo MTL5 End If ENCORE4: Next GoTo PI2 MTL5: For LIGNE = LIGNEDEBUT + 1 To LIGNEFIN MATERIEL6 = Sheets("EXPORTATION").Range("C" & LIGNE) If MATERIEL6 = MATERIEL5 Or MATERIEL6 = MATERIEL4 Or MATERIEL6 = MATERIEL3 Or MATERIEL6 = MATERIEL2 Or MATERIEL6 = MATERIEL1 Then QTEMTL = 5 GoTo ENCORE5 End If If MATERIEL6 <> MATERIEL5 Or MATERIEL6 <> MATERIEL4 Or MATERIEL6 <> MATERIEL3 Or MATERIEL6 <> MATERIEL2 Or MATERIEL6 <> MATERIEL1 Then LIGNEDEBUT = LIGNE MATERIEL6 = Sheets("EXPORTATION").Range("C" & LIGNE) GoTo MTL6 End If ENCORE5: Next GoTo PI2 MTL6: For LIGNE = LIGNEDEBUT + 1 To LIGNEFIN MATERIEL7 = Sheets("EXPORTATION").Range("C" & LIGNE) If MATERIEL7 = MATERIEL6 Or MATERIEL7 = MATERIEL5 Or MATERIEL7 = MATERIEL4 Or MATERIEL7 = MATERIEL3 Or MATERIEL7 = MATERIEL2 Or MATERIEL7 = MATERIEL1 Then QTEMTL = 6 GoTo ENCORE6 End If If MATERIEL7 <> MATERIEL6 Or MATERIEL7 <> MATERIEL5 Or MATERIEL7 <> MATERIEL4 Or MATERIEL7 <> MATERIEL3 Or MATERIEL7 <> MATERIEL2 Or MATERIEL7 <> MATERIEL1 Then LIGNEDEBUT = LIGNE MATERIEL7 = Sheets("EXPORTATION").Range("C" & LIGNE) GoTo PI2 End If ENCORE6: Next PI2: LIGNEMTL = LIGNEFIN - LIGNEDEBUT If LIGNEMTL = 0 Then DD = "D" & LIGNEDEBUT GG = "G" & LIGNEFIN INSERTION = LIGNEFIN + 2 myres = Range(DD) * Range(GG) Range("C" & INSERTION).Font.Bold = True Range("C" & INSERTION).Interior.Color = RGB(183, 222, 232) Range("C" & INSERTION).Value = "TOTAL PI2 " & "MATERIEL & i" & " = " Range("D" & INSERTION).Font.Bold = True Range("D" & INSERTION).Interior.Color = RGB(183, 222, 232) Range("D" & INSERTION).Value = myres GoTo FIN End If If LIGNEMTL > 0 Then Dim i As Integer i = 1 For i = 1 To QTEMTL INSERTION = LIGNEFIN + 1 + i Nom = "MATERIEL" & i MsgBox Nom myarray = Evaluate("=--(" & CC & "=""ME063PV888PV888"")") 'J'AIMERAIS AVOIR CE CODE EN VARIABLE EX.:= Evaluate("=--(CC="MATERIEL(i)")") myres = Application.WorksheetFunction.SumProduct(myarray, Range(DD), Range(GG)) Range("C" & INSERTION).Font.Bold = True Range("C" & INSERTION).Interior.Color = RGB(183, 222, 232) Range("C" & INSERTION).Value = "TOTAL PI2, " & MTL & " = " Range("D" & INSERTION).Font.Bold = True Range("D" & INSERTION).Interior.Color = RGB(183, 222, 232) Range("D" & INSERTION).Value = myres Next i End If FIN: End Sub
J'ai trouver comment l'écrire pour que ca prenne ma variable en valeur!
Code:myarray = Evaluate("=--(" & CC & "=" & """" & nom & """" & ")")