2 macros excel

2 macros excel - VB/VBA/VBS - Programmation

Marsh Posté le 15-11-2007 à 23:08:14    

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.
Des idées?
 
2. Pour le 2ème problème, j'aimerais faire une macro qui enlève les doublons; en gros, je lui demanderai de regarder une liste de nom (par colonne) et d'enlever tous les doublons, mais, en vérifiant quand même la case qui est à droite qui contient un numéro. Si le nom et le numéro correspondent, j'aimerais qu'il efface les doublons (voir plus parfois...)
Celle là, je ne vois pas trop comment l'implémenter...
 
Voilà, je vais réfléchir à tout ça demain, mais si quelqu'un à des pistes à me fournir, ça serait cool, parceque je ne suis pas un expert de VBA encore.
 
Merci :bounce:  
 
 
 

Reply

Marsh Posté le 15-11-2007 à 23:08:14   

Reply

Marsh Posté le 16-11-2007 à 08:37:04    

bonjour,
pour le premier pb je réfère passer par une colonne intermédiaire qui renvoie les valeurs de chaque jour
=SI(CelVal="";CelVal(L-1);CelVal)
De la sorte tu ne pointes jamais sur une cellule vide.
Pour le 2° pb
Au lieu de comparer colonne par colonne crée des variables qui concatènent les 2 colonnes
Str1 = CelCol1 & CelCol2
Str2 = CelColA & CelColB
Si Str1 = Str2 alors doublon...
A+

Reply

Marsh Posté le 16-11-2007 à 14:57:15    

Hello,

 

merci pour les réponses.

 

Alors, avec ton idée, voilà ce que ça donne pour la 2:

Code :
  1. Dim Number_Columns As Double
  2. Dim concat_i, concat_j As Variant
  3. Sub Remove_doublons()
  4. Number_Colums = Range(Selection, Selection.End(xlDown)).Count
  5. For i = 1 To Number_Colums
  6. For j = i + 1 To Number_Colums
  7.      
  8. concat_i = Cells(i, 1).Value & Cells(i, 2).Value
  9. concat_j = Cells(j, 1).Value & Cells(j, 2).Value
  10. If concat_i = concat_j Then Rows(j).Delete
  11. Next j
  12. Next i
  13. End Sub
 

Et ça marche nickel, je suis content!
Maintenant, je me dis que ça serait cool si je pouvais insérer un bouton ds le tableau, qui me permettrait, quand je clique dessus, de lancer la macro automatiquement.
Et ça je sais pas faire encore...

 

Par contre, je comprends pas trop ce que tu veux me dire pour la 1ère. Peut être que je n'ai pas été assez clair, alors je vais préciser.
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.
Dans ce genre, mais en bien écrit quoi...


Message édité par lillumultipass le 16-11-2007 à 15:15:30
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed