soucis d'extraction d'une boucle

  • Initiateur de la discussion alex
  • Date de début
A

alex

Guest
bonjour,

j'ai un petit soucis sur du code tout simple :


- j'ai une cellule de reference (years) a partir de laquelle je lance une boucle.
- mes "years" sont dans une feuille "pricing"
- en fonction du nombre d'annees, je veux aller recuperer un range d'informations contenues dans la feuille "bloomberg"
- je veux recopier ce range d'information dans la feuille "pricing"

j'ai une erreur en permanence sur cette ligne:
Set tauxswaps = Worksheets("Bloomberg").Range("A5:A17,C1:C17")

pourriez me dire comment resoudre cela svp ?

merci :eek:)
(5h de programmation en vba deja! ;o)

voila la prog:



'on initialise le nombre d'annees pour recuperer les taux swaps dans la bonne feuille
Dim years As Range
Set years = Sheets("pricing").Cells(2, 2)

'on initialise un compteur
Dim N As Byte

'on lance la boucle avec le compteur precedent
For N = 1 To years
Dim tauxswaps As Range
Set tauxswaps = Worksheets("Bloomberg").Range("A5:A17,C1:C17")
Worksheets("pricing").Cells(10 + N, 1).Insert
Next

End Select
 
A

alex

Guest
je vais essayer de suite:
par contre mes souvenirs de programmation en php (intermediare seulement) m'ont sauve aussi.

voila une solution peu elegante et certainement gourmande mais ca marche en passant par 2 variables:



'on initialise le nombre d'annees pour recuperer les taux swaps dans la bonne feuille
Dim years As Range
Set years = Sheets("pricing").Cells(2, 2)

'on initialise un compteur
Dim N As Byte

'on lance la boucle avec le compteur precedent
For N = 1 To years + 1
Dim tauxswaps1
Dim tauxswaps2

Set tauxswaps1 = Sheets("Bloomberg").Cells(3 + N, 1)
tauxswaps1.Copy
Sheets("Pricing").Cells(5 + N, 1).Insert

Set tauxswaps2 = Sheets("Bloomberg").Cells(3 + N, 3)
tauxswaps2.Copy
Sheets("Pricing").Cells(5 + N, 2).Insert

Next

End Select
 
M

Minick

Guest
Re,

excuse moi je t'ai di une betise c'est bien une virgule qu'il faut

En regardant plus precisement et en testant "surtout " je n'est aucun pb avec ton code.

Peux tu mettre ton fichier en pj


@+
Minick
 
M

Minick

Guest
RE,

houla je comprend plus rien

ton code ne fait plus la meme chose qu'au debut
et en plus je regarde tous ca les yeux fermé pasque j'avai meme pas vu qu'il manquait un copy avan ton Insert dans le 1er code que tu a donné.

Alors en ce qui concerne le 1er code le copy ne peux pas fonctionner car tu as une selection multiple.

parcontre pour ton 2eme code tu n'as plus la selection multiple donc pas de probleme d'ailleur tu n'es pas obligé d'utiliser 2 variables

@+
Minick

PS: si je trouve le moyen de copier une selection multiple je te tien au courant
 
A

alex

Guest
ok, effectivement il faut se mettre dans la tete que c'est excel que l'on fait bosser au bout du compte!
j'ai donc casser une multiselection par deux selections separees si je comprends bien.

par contre pas mouen de faire un bete calcul de math dans ma macro...

tu saurais pourquoi il ne me retourne pas la valeur de Df stp?

c'est assez embetant, je pense ne pas bien comprendre la procedure qui permet de copier/coller... pas forcement evident le Vba au debut...


merci



voici le code:




'on initialise le nombre d'annees pour recuperer les taux swaps dans la bonne feuille
Dim years As Range
Set years = Sheets("pricing").Cells(2, 2)

'on initialise un compteur
Dim N As Byte

'on lance la boucle avec le compteur precedent et on rajoute +1 au nombre d'annees
'car on recupere aussi l'intitule du tableau des swaps
For N = 1 To years + 1

'on initialise 1 variable dans laquelle on va stocker les taux de swaps
Dim tauxswaps


'tant que l'on boucle la variable prend les valeurs des annees et les affiche
Set tauxswaps = Sheets("Bloomberg").Cells(3 + N, 1)
tauxswaps.Copy
Sheets("Pricing").Cells(5 + N, 1).Insert

'initialisation du Df

Dim Df
Df = "(1 / ( 1 + tauxswaps ) ^ N)"
Sheets("pricing").Cells(5 + N, 3).Insert



'tant que l'on boucle la variable prend les valeurs des taux de swaps et les affiche
Set tauxswaps = Sheets("Bloomberg").Cells(3 + N, 3)
tauxswaps.Copy
Sheets("Pricing").Cells(5 + N, 2).Insert

Next

End Select
 
A

alex

Guest
hum, en fait, pour commencer, le Df doit etre mis apres le second taux swaps...

donc le code devrait plutot etre comme cela:



'on initialise le nombre d'annees pour recuperer les taux swaps dans la bonne feuille
Dim years As Range
Set years = Sheets("pricing").Cells(2, 2)

'on initialise un compteur
Dim N As Byte

'on lance la boucle avec le compteur precedent et on rajoute +1 au nombre d'annees
'car on recupere aussi l'intitule du tableau des swaps
For N = 1 To years + 1

'on initialise 1 variable dans laquelle on va stocker les taux de swaps
Dim tauxswaps


'tant que l'on boucle la variable prend les valeurs des annees et les affiche
Set tauxswaps = Sheets("Bloomberg").Cells(3 + N, 1)
tauxswaps.Copy
Sheets("Pricing").Cells(5 + N, 1).Insert


'tant que l'on boucle la variable prend les valeurs des taux de swaps et les affiche
Set tauxswaps = Sheets("Bloomberg").Cells(3 + N, 3)
tauxswaps.Copy
Sheets("Pricing").Cells(5 + N, 2).Insert

'initialisation du Df

Dim Df
Df = "(1 / ( 1 + tauxswaps ) ^ N)"
Sheets("pricing").Cells(5 + N, 3).Insert

Next

End Select
 
M

Minick

Guest
re,

En fait les guillemets sont de trop dans la definition de Df et ensuite le insert sert a inserer le contenu du press papier donc ce n'est pas Df que tu essayé de coller mais le presse papier ( cad tauxswaps )

Df = (1 / ( 1 + tauxswaps ) ^ N)
Sheets("pricing").Cells(5 + N, 3)=Df

@+
Minick
 
A

alex

Guest
Merci Mincik, c'est vraiment tres sympa !

j'ai appris pleins de trucs aujourd'hui :eek:)

tu pourrais juste me dire un derniere chose stp?

dans ce code:

Df = (1 / ( 1 + tauxswaps ) ^ N)
Sheets("pricing").Cells(5 + N, 3)=Df

si je veux le voir en % avec 2chiffres apres la virgule mon Df je m'y prend comment stp ?

j'essaie avec:


Selection.Style = "Percent"
Selection.NumberFormat = "0.00%"

mais je n'arrive pas a mettre mon select ou il faut...


merci :)

(apres je te laisse tranquille... )
 
M

Minick

Guest
re,

alors pour le format de la cellule en fait tu peux faire directement cela

Sheets("feuil1").Cells(5 + N, 3).NumberFormat = "0.00%"

tu n'es pas obligé de selectionner ta cellule pour lui donner un format il suffit juste d'affecter le format a la cellule.

De plus le...Style = "Percent" n'est pas utile, le NumberFormat lui donne par defaut le 'style %'


@+
Minick
 
A

alex

Guest
c'est pourtant ce que je fais a peu de choses pres:

Dim Df
Df = (1 / (1 + tauxswaps) ^ N)
Sheets("pricing").Cells(6 + N, 3).NumberFormat = "#,##0.00" = Df

mais le =Df ne passe pas...

pas doue que je suis :(
 
A

alex

Guest
Pige!! :)


Dim Df
Df = (1 / (1 + tauxswaps) ^ N)
Sheets("pricing").Cells(6 + N, 3).NumberFormat = "0.00%"
Sheets("pricing").Cells(6 + N, 3) = Df

d'abord le format a la cellule et apres son contenu!! :)

merci minick!! :O)
 

Discussions similaires

Réponses
7
Affichages
444

Statistiques des forums

Discussions
312 683
Messages
2 090 905
Membres
104 693
dernier inscrit
azizou900