salut tout le monde,
alors voilà, pour améliorer mon quotidien de stage, j'aimerais bien améliorer 2-3 fichiers excel.
1. Dans le premier, en fait, on récupère d'une autre appli des séries de données pour calculer des taux de rendements (cad qu'il fait (xt/xt-1)-1 avec xt-1 la valeur à la date t-1). Le problème, c'est qu'il arrive parfois que des données manquent (pour un jour donné), et donc ce qui empêche de calculer un taux de rendement et on obtient un joli "N/A" dans la case.
Dans ce cas, on rajoute (à la main) un "-1" à toutes les formules qui posent problème, pour lui dire d'aller chercher la valeur du jour d'avant (et donc, aussi la valeur en t-2). Le problème c'est qu'il faut faire ça pour chaque cas qui pose problème. Et pire, la fois d'après, il faut enlever les "-1" pour voir s'il trouve des valeurs.
Bref, c'est la merdouille.
Donc, ce que j'aimerais faire, c'est créer une formule, voire une macro, pour lui dire d'aller chercher la valeur de la date en question, et si le résultat du calcul donne "N/A", de prendre la date j-1; si ça donne encore rien, prendre j-2, puis j-3.
J'avais pensé à faire une macro VBA à base d'une boucle For i=0, 3...
mais vu comment le fichier est foutu, je me demande si ça ne serait pas plus facile de faire une formule que j'étirerai dans toutes les cellules concernées.
EDIT: En gros, à chaque fois qu'on lance la macro (en ayant précisé un champ de dates), Excel va chercher dans Bloomberg des valeurs qu'il stocke ensuite dans une worksheet; dans la worksheet principal, on lui demande de calculer des taux de rendements journaliers, hebdomadaires, mensuels, annuels...
Donc, si par exemple, dans bloomberg il n'y a pas le prix le 17/11/2007, il ressort "N/A history" ce qui empêche de calculer les rendements hebdomadaire entre le 17 et le 10 par exemple. Donc, je mets un "-1" dans la formule, pour qu'il calcule entre le 16 et le 9 par exemple.
Mais faire ça à la main une centaine de fois, c'est soulant...
En gros, comme il y a déjà les formules dans chaque case, je me dis qu'il faudrait juste rajouter un truc du genre IF Value= "N/A History" Then Do... avec la même formule que déjà inscrite avec un -1 en plus.
Des idées?
2. Pour le 2ème problème, je voulais faire une macro qui enlève les doublons; en gros, je veux qu'elle regarde une liste de noms (par colonne) et d'enlever tous les doublons, mais, en vérifiant quand même la case qui est à droite qui contient des chiffres. Si le nom et le numéro correspondent, j'aimerais qu'il efface les doublons, triplets...(efface toute la ligne)
J'ai fait un ptit bout de code:
ça marche, mais comme je calcule en fait pleins de fois les mêmes chose (je concatène chaque ligne i fois en fait...) , je me dis qu'il y a peut être plus efficient.
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 Code : 1. Dim Number_Columns As Double 2. Dim concat_i, concat_j As Variant 3. Sub Remove_doublons() 4. Number_Columns = Range(Selection, Selection.End(xlDown)).Count 5. 6. For i = 1 To Number_Columns 7. For j = i + 1 To Number_Columns 8. 9. concat_i = Cells(i, 1).Value & Cells(i, 2).Value 10. concat_j = Cells(j, 1).Value & Cells(j, 2).Value 11. 12. If concat_i = concat_j Then Rows(j).Delete 13. 14. Next j 15. Next i 16. End Sub
Merci![]()
Partager