IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

2 macros excel: boucles!


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut 2 macros excel: boucles!
    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:

    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
    ç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.

    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut lillumultipass et le forum
    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.
    une solution par formule (à complèter)

    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)
    Pour la seconde question, tu travaille sur une sélection, donc, je ne sais pas la plage à traiter
    mais une possibilité sur le fichier par formule et filtre auto

    Sinon, tu peux faire une macro qui trie sur première et 2ème colonne, puis une boucle décrementante pour supprimer les ligne concernée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for X = [A65536].end(xlup).row to 2 step -1
    if range("A" & X) & range("B" & X)=range("A" & X-1) & range("B" & X-1) then row(X).delete
    Next X
    A+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 10
    Par défaut
    Merci pour la réponse!

    Pour la 2ème, le problème est que je ne connais pas à priori le nombre de lignes contenant des données, donc c'est pour ça que défini Number_Columns.

    Pour le premier, j'ai un peu commencé à regarder ce que tu m'as envoyé, mais je comprends pas tout. Je vais regarder de plus près.

    Merci encore

Discussions similaires

  1. Comment créer une macro en boucle sous excel ?
    Par jib orhan dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 16/04/2014, 12h18
  2. [XL-2007] Comment créer une macro en boucle sous excel ?
    Par jib orhan dans le forum Excel
    Réponses: 2
    Dernier message: 15/04/2014, 13h16
  3. Macro EXCEL - Boucle qui ne fonctionne pas
    Par babouchka01 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/10/2011, 11h24
  4. [XL-2003] boucles dans une Macro Excel?
    Par answer3 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/12/2009, 20h07
  5. Macro sur Excel/Boucle sur les lettres
    Par life is magic dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/11/2005, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo