Bonjour a tous, et a toutes,

je me permets de vous demander assistance, je ne suis pas fait pour faire de la prog. J avais deja essaye de me mettre a l epoque au html et php... Mais sans succes. par contre je detectais les erreurs de codes fait par d autres...

Enfin, ceci dit, j ai toujours pense que le vba et les macros pouvaient m aider mais a chaque fois meme en utilisant la fonction macro recorder... ca part en cacahouete... bug en ligne 9...
Dernierement, j ai essaye de mettre en place une macro avec le recorder (sur un pc avec OS en allemand):
Ca se rapproche de ce qu il a ete demande ici, je pense. Ci dessous ce que j essayais d obtenir 2fichiers, toujours en feuille 1).

-workbook 1 "Calcul sur data" --> on renseigne ici l'ID d une caracteristique en colonne A et les pourcentages en colonne B
la macro sert a recuperer/ copier des parametres supplementaires dans le workbook 2 pour chaque ID renseignee dans le workbook1 et de les coller dans la colonne C.
On demande ensuite a la macro d effectuer des operations (faire somme / integrale / variance) ou de multiplier et diviser la colonne B avec la colone C et donner le resultat pour chque ID en colonne D)

-Workbook "Source data". Contient une liste de 500 ID ou plus (par exemple) et pour chaque ID on a un parametre ayant une valeur par exemple age / Poids / hauteur.

Du Coup, j ai tente d enregistrer une macro. en faisant la chose suivante (apres avoir importer un masque pour le premier exemple seulement j ai demarrer la macro juste apres): premiere etape dans "calcul de data" - rechercher "article Nr" puis je ferme la recherche. je suis donc bien sur la cellule article Nr. je descends avec la fleche d une cellule. -->premiere ID se trouve en dessous.
Copier "ID1". (le dossier source data est deja ouvert)
changer de fenetre active "source data", lancer une recherche valeur "ID1" copiée, la cellule avec ID1 est trouvee. on ferme la recherche, je deplace avec la fleche droite sur la meme ligne jusqu a la colonne desiree (parametre hauteur par exemple valeur "H1" ), je copie la cellule,
Je change de fenetre active. je lance une recherche (ID1 est toujours present) je ferme la recherche je suis sur la cellule ID1 du workbook1 donc. je me deplace avec la fleche, pour aller en colonne C. je colle ici la valeur H1.
je recherche ID1 (qui est toujours par defaut dans la recherche) dans workbook 1. cette fois ci je descends d une case. et je suis en ID2.

je fais la meme chose avec ID2 (valeur "H2" dans workbook 2- "source data" ) et ainsi de suite jusqu a ce que sur workbook1 je passe de IDy (y un entier ici ca pourrait etre 3 comme ca pourrait etre 851 - osef :-P c est just pour l exemple - y est le dernier ID) a une case en dessous ou il n a plus de valeur en gros une cellule vide.
La je m arrete de faire des recherche et je passe au calcul je fais la somme de la colonne ID1 a IDy puis je fais une multiplication de ID1 avec H1 avec resultat en colonne D (ID1H1).
$$$$$Pour rappel, la colonne en C n existait pas et est le resultat de la "macro a la main" qui a extraite les donnees depuis le fichier source data. j ai fait cela pour 3 ID en fait)

ID1 IDy ont des designations qui sont similaires mais les valeurs ne sont pas forcement donnes dans l ordre croissant$$$$$$


Je fais la somme de IDyHy dans la cellule en dessous IDyHy

Fin - je stoppe l enregistrement de la macro, je l enregistre.

Je change les valeurs ID1 a IDy qui correspondent donc a d autres valeurs H1 a Hy dans workbook 2... et la ca ne marche pas.
Mais alors pas du tout. quand je regarde le code. je me dis que VBA macro recorder n a pas capter qu il doit copier la valeur et ne pas l integrer au code mais l utiliser pour les etapes. Or dans ce code la valeur est donnee. donc a fortiori il a copie une valeur est fixe dans le code au lieu d etre une variable.
de plus je ne sais pas comment faire pour indiquer au programme que SI (IF) dans Workbook 1 on passe de la case IDy a une case vide en dessous, ALORS (THEN) on passe a la phase de calcul....
De plus il me faudrait un code pour au cas ou une valeur est manquante --> qu il me mette genre une valeur nulle, mais en mettant une mention dans une autre colonne vide. Pour eviter que le script stoppe prematurement parce qu un argument est manquant.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Je remercie d avance tous ceux qui prendront le temps de repondre a mon post et me proposer un code qui devrait fontionner de la maniere decrite"

ci dessous le code obtenu. (ID1 possede la valeur "RM01" )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
Sub TestCalculation()
'
' TestCalculation Makro
'
'
    Cells.Find(What:="article Nr", After:=ActiveCell, LookIn:=xlFormulas, _
 
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
 
        MatchCase:=False, SearchFormat:=False).Activate
 
    Range("B2" ).Select
 
    Selection.Copy
 
    Windows("source data.xlsx" ).Activate
 
    Cells.Find(What:="RM01", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 
        False, SearchFormat:=False).Activate
 
    Range("D2" ).Select
 
    Application.CutCopyMode = False
 
    Selection.Copy
 
    Windows("data.xlsx" ).Activate
 
    Range("B2" ).Select
 
    Cells.Find(What:="RM01", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 
        False, SearchFormat:=False).Activate
 
    Range("F2" ).Select
 
    ActiveSheet.Paste
 
    Cells.Find(What:="RM01", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 
        False, SearchFormat:=False).Activate
 
    Range("B3" ).Select
 
    Application.CutCopyMode = False
 
    Selection.Copy
 
    Windows("source data.xlsx" ).Activate
 
    Cells.Find(What:="RM05", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 
        False, SearchFormat:=False).Activate
 
    Range("D6" ).Select
 
    Application.CutCopyMode = False
 
    Selection.Copy
 
    Windows("data.xlsx" ).Activate
 
    Cells.Find(What:="RM05", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 
        False, SearchFormat:=False).Activate
 
    Range("F3" ).Select
 
    ActiveSheet.Paste
 
    Cells.Find(What:="RM05", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 
        False, SearchFormat:=False).Activate
 
    Range("B4" ).Select
 
    Application.CutCopyMode = False
 
    Selection.Copy
 
    Windows("source data.xlsx" ).Activate
 
    Cells.Find(What:="RM03", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 
        False, SearchFormat:=False).Activate
 
    Range("D4" ).Select
 
    Application.CutCopyMode = False
 
    Selection.Copy
 
    Windows("data.xlsx" ).Activate
 
    Cells.Find(What:="RM03", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 
        False, SearchFormat:=False).Activate
 
    Range("F4" ).Select
 
    ActiveSheet.Paste
 
    Cells.Find(What:="RM03", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
 
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
 
        False, SearchFormat:=False).Activate
 
    Range("B5" ).Select
 
    Application.CutCopyMode = False
 
    Selection.Copy
 
    Range("D7" ).Select
 
    Application.CutCopyMode = False
 
    ActiveCell.FormulaR1C1 = "=SUMME"
 
    Range("D7" ).Select
 
    ActiveCell.FormulaR1C1 = "=SUM(R[-5]C:R[-3]C)"
 
    Range("E2" ).Select
 
    ActiveCell.FormulaR1C1 = "=RC[-1]/R[5]C[-1]"
 
    Range("E2" ).Select
 
    Selection.Copy
 
    Range("E3" ).Select
 
    Range("E2" ).Select
 
    Application.CutCopyMode = False
 
    ActiveCell.FormulaR1C1 = "=RC[-1]/R7C4"
 
    Range("E3" ).Select
 
    ActiveCell.FormulaR1C1 = "=RC[-1]/R7C4"
 
    Range("E3" ).Select
 
    Selection.Copy
 
    Range("E4" ).Select
 
    ActiveSheet.Paste
 
    Range("G2" ).Select
 
    Application.CutCopyMode = False
 
    ActiveCell.FormulaR1C1 = "=RC[-1]*RC[-2]"
 
    Range("G2" ).Select
 
    Selection.Copy
 
    Range("G3" ).Select
 
    ActiveSheet.Paste
 
    Range("G4" ).Select
 
    ActiveSheet.Paste
 
    Range("G5" ).Select
 
    ActiveSheet.Paste
 
    Range("G7" ).Select
 
    Application.CutCopyMode = False
 
    ActiveCell.FormulaR1C1 = "=SUM(R[-5]C:R[-3]C)"
 
    Range("H7" ).Select
 
    ActiveCell.FormulaR1C1 = "=RC[-1]/RC[-7]"
 
    Range("H7" ).Select
 
    ActiveCell.FormulaR1C1 = "=RC[-1]*RC[-7]"
 
    Range("H8" ).Select
 
End Su