bonjour
je suis débutante en VBA et j'ai un petit problème de code.
mon objectif est de créer à partir des informations de la "feuil1", 3 onglets qui contiennent chacun une partie des informations de la "feuil1" mais présenté autrement.
je m'explique:
dans la feuil1 j'ai un tableau qui comprends plusieurs champs mais je m'intéresse seulement à 5 champs qui sont:
- name (on a plusieurs name différents)
- seri
- version
- term
- et percentB
à partir de ce tableau je dois extraire 3 tables pour 3 "names" différents ( a, b et f par exemple). Pour chaque table je ne conserve pour chaque "seri" que les lignes avec la "version" la plus récente. De plus, j'aimerai que les lignes avec la même "seri" et la même "version" soit concatenées pour ne donner qu'une seule ligne contenant les valeurs des autres champs (les champs 3Y, 5Y, 7Y et 10Y).
Mon code est ci-dessous. Le problème est que j'obtiens plusieurs lignes. à chaque qu'une cellule est renseigné mon pointeur se déplace a la ligne suivante. Du coup j'ai plus de lignes qu'il ne m'en faut.
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 Option Explicit Sub test() Dim SERIE, version, TERM, nom As String Dim val As Double Sheets("res_a").Select Range("A1").Select Sheets("feuil1").Select Range("a1").Select While ActiveCell.value <> "" If ActiveCell.value = "a" Then nom = ActiveCell.value SERIE = ActiveCell.Offset(0, 1).value version = ActiveCell.Offset(0, 2).value TERM = ActiveCell.Offset(0, 3).value val = ActiveCell.Offset(0, 4).value Sheets("res_a").Select ActiveCell.Offset(1, 0).Select ActiveCell.value = nom ActiveCell.Offset(0, 1).value = SERIE ActiveCell.Offset(0, 2).value = version If TERM = "3Y" Then ActiveCell.Offset(0, 3) = val * 10000 ElseIf TERM = "5Y" Then ActiveCell.Offset(0, 4) = val * 10000 ElseIf TERM = "7Y" Then ActiveCell.Offset(0, 5) = val * 10000 Else ActiveCell.Offset(0, 6) = val * 10000 End If End If Sheets("feuil1").Select ActiveCell.Offset(1, 0).Select Wend ' Order by descending ' Call tri MsgBox (" Fin de l'execution ") End Sub
Name Series Version Term percentB
b 7 1 3Y
b 7 1 10Y 1.64%
a 7 1 7Y 1.30%
a 7 1 10Y 1.63%
c 7 1 5Y 0.64%
c 7 1 10Y 1.40%
f 7 1 10Y 4.43%
f 7 2 5Y 4.99%
f 7 2 10Y 4.43%
b 11 1 3Y 0.66%
b 11 1 5Y 1.14%
b 11 1 7Y 1.47%
b 11 1 10Y 1.68%
f 11 1 3Y 5.14%
f 11 1 5Y 4.09%
f 11 1 7Y 4.32%
f 11 1 10Y 4.36%
a 11 1 3Y 0.81%
a 11 1 5Y 1.11%
a 11 1 7Y 1.36%
a 11 1 10Y 1.53%
a 7 2 3Y
a 7 2 5Y 0.96%
a 7 2 7Y 1.30%
a 7 2 10Y 1.63%
c 7 2 5Y 0.64%
c 7 2 10Y 1.40%
b 7 2 3Y
b 7 2 10Y 1.64%
f 11 2 3Y 5.14%
f 11 2 5Y 4.09%
f 11 2 7Y 4.32%
f 11 2 10Y 4.36%
f 7 3 5Y 4.99%
f 7 3 10Y 4.43%
f 7 4 5Y 4.99%
f 7 4 10Y 4.43%
f 7 5 5Y 4.99%
f 7 5 10Y 4.43%
b 15 1 3Y 1.66%
b 15 1 5Y 1.97%
b 15 1 7Y 2.11%
b 15 1 10Y 2.20%
a 15 1 3Y 1.03%
a 15 1 5Y 1.31%
a 15 1 7Y 1.45%
a 15 1 10Y 1.55%
f 15 1 3Y 3.66%
f 15 1 5Y 4.60%
f 15 1 7Y 4.92%
f 15 1 10Y 5.02%
resultat souhaité
onglet: res_a
name seri Version 3Y 5Y 7Y 10Y
a 15 1 103 31 145 155
a 11 1 81 111 136 153
a 7 2 96 130 163
resulta obtenue:
name seri Version 3Y 5Y 7Y 10Y
a 7 1 130
a 7 1 163
a 11 1 81
a 11 1 111.2375201
a 11 1 136.0920773
a 11 1 152.9323278
a 7 2 0
a 7 2 96.26005998
a 7 2 130.3477709
a 7 2 162.8249332
a 15 1 103.2113366
a 15 1 130.5606504
a 15 1 144.9299307
a 15 1 154.5115675
Partager