Renvoyer des valeurs en fonction d'une date
sgrigoryann
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
sgrigoryann Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
sgrigoryann Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
Bojour a tous,
Je vous serais extremement reconnaissante si vous pouviez m'aider sur un code vba/macro.
J 'ai écrit un code qui me copie les valeurs de la ligne 14 de la feuille Excel appelée MSBI ETFs et me les renvoie dans la feuille excel Sheet2.
1) J'aimerais que ce code marche en fonction d'une cellule B1 contenant des valeurs qui changeront (par exemple une date). Car je m'explique : les valeurs de la ligne 14 que je veux dépendent d'une date car c'est une série temporelle.
J 'aimerais que lorsque je change la valeur de la cellule B1 (exemple 23.08.2019) du Worksheet("Sheet2") la macro me ramene les valeurs de la ligne 14 du worksheet("MSBI ETFs") pour la meme date.
1.2) De plus j'aimerais que les valeurs renvoyées soient transposées : ne pas être renvoyées sur la ligne 1 mais dans la colonne A. VBA me donne toujours le meme message d'erreur "Run-tim error 1004: paste method of worksheet class failed" quand je lance mon code.
Voici le code pour le renvoie que j'ai écrit :
Merci beaucoup de votre aide!
Je vous serais extremement reconnaissante si vous pouviez m'aider sur un code vba/macro.
J 'ai écrit un code qui me copie les valeurs de la ligne 14 de la feuille Excel appelée MSBI ETFs et me les renvoie dans la feuille excel Sheet2.
1) J'aimerais que ce code marche en fonction d'une cellule B1 contenant des valeurs qui changeront (par exemple une date). Car je m'explique : les valeurs de la ligne 14 que je veux dépendent d'une date car c'est une série temporelle.
J 'aimerais que lorsque je change la valeur de la cellule B1 (exemple 23.08.2019) du Worksheet("Sheet2") la macro me ramene les valeurs de la ligne 14 du worksheet("MSBI ETFs") pour la meme date.
1.2) De plus j'aimerais que les valeurs renvoyées soient transposées : ne pas être renvoyées sur la ligne 1 mais dans la colonne A. VBA me donne toujours le meme message d'erreur "Run-tim error 1004: paste method of worksheet class failed" quand je lance mon code.
Voici le code pour le renvoie que j'ai écrit :
Code : Sub copy() Worksheets("MSBI ETFs").Activate Range("C14:Z14").Select Selection.copy Worksheets("Sheet2").Activate ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("A1").PasteSpecial(Transpose:=True) End Sub
Merci beaucoup de votre aide!
A voir également:
- Renvoyer des valeurs en fonction d'une date
- Fonction si et - Guide
- Comment colorer une cellule excel en fonction du contenu d'une autre cellule ✓ - Forum Excel
- Fonction moyenne excel - Guide
- Whatsapp date incorrecte ✓ - Forum Mobile
- Airpods 3 date de sortie - Guide
4 réponses
Bonjour Yann, bonjour le forum,
Il y a un problème dans ton énoncé. Tu veux les données en fonction d'une date, ok, mais puisque tu veux toujours la plage C14:Z14, je ne vois pas en quoi la modification de date va changer quelque chose. En me relisant je me rend compte que je suis aussi peu clair que toi... Je te propose de nous fournir un fichier exemple à l'aide d'un hébergeur e fichier type : https://www.cjoint.com.
Ce sera plus facile pour tout le monde...
Il y a un problème dans ton énoncé. Tu veux les données en fonction d'une date, ok, mais puisque tu veux toujours la plage C14:Z14, je ne vois pas en quoi la modification de date va changer quelque chose. En me relisant je me rend compte que je suis aussi peu clair que toi... Je te propose de nous fournir un fichier exemple à l'aide d'un hébergeur e fichier type : https://www.cjoint.com.
Ce sera plus facile pour tout le monde...
sgrigoryann
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
https://www.cjoint.com/doc/19_08/IHCnCl7FRVd_Exemple-exercice.xlsx
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
1 584
>
sgrigoryann
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
le fichier n'inclut pas de code, et ne semble pas correspondre au code.
sgrigoryann
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
>
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Oui j'a juste fait un exemple car je ne peux pas envoyer le fichier en question c'est assez confidentiel :(
sgrigoryann
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
J'a besoin de faire ca parce que pour une date donnée je peux ne pas avoir un certain instrument dans mon portefeuille d'actifs par exemple. Je peux aussi très bien acheter et vendre un instrument financiers et c'est donc normal que pour une date donnée j'ai pas de montant investit pour un instrument (dans ce cas j'aimerais que vba me renvoie les instruments oè il y a un montant)
Re,
Je te propose la macro événementielle Change ci-dessous à placer dans le composant de l'onglet Output. Chaque fois que tu changeras la date ça agira...
Le lien : https://www.cjoint.com/c/IHCouPrUldc
Je te propose la macro événementielle Change ci-dessous à placer dans le composant de l'onglet Output. Chaque fois que tu changeras la date ça agira...
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet Dim DC As Date 'déclare la variable DC (Date Cherchée) Dim OP As Worksheet 'déclare la variable OP (Onglet Portfolio) Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs) Dim I As Integer 'déclare la variable I (Incrément) Dim DT As Date 'déclare la variable DT (Date Trouvée) If Target.Address <> "$C$1" Then Exit Sub 'si le changement a lieu ailleurs qu'en C1, sort de la procédure range("A3:A" & Application.Rows.Count).ClearContents 'efface d'éventuelles anciennes données If Target.Value = "" Then Exit Sub 'si C1 est effacée, sort de la procédure DC = DateSerial(Year(Target.Value), Month(Target.Value), Day(Target.Value)) 'définit la date cherchée DC Set OP = Worksheets("Portfolio") 'définit l'onglet OP TV = OP.Range("A12").CurrentRegion 'définit le tableau des valeurs TV For I = 4 To UBound(TV, 1) 'boucle sur toutes les ligne I du tableau des valeurs (en partant de la 4ème) DT = DateSerial(Year(TV(I, 1)), Month(TV(I, 1)), Day(TV(I, 1))) 'définit la date trouvée DT (donnée en colonne 1 de la ligne de la boucle) If DT = DC Then 'condition : si les dates correspondent Range("A3").Resize(UBound(TV, 2),1).Value = application.transpose(Application.Index(TV, I)) 'renvoie dans A3 redimensionnée la ligne I du tableau des valeurs TV Exit Sub 'sort de la procédure End If 'fin de la condition Next I 'prochaine ligne de la boucle End Sub
Le lien : https://www.cjoint.com/c/IHCouPrUldc
Salut ThauTheme, merci infiniement pour ton temps et le code! Le code est pratiquement ce que je cherche sauf que j'aimerais que le code renvoie les noms des ETFs se trouvant sur le ligne 14 à la place de leur montants chaque fois que il y a un montant existant pour la date entré dans la cellule C1. En gros j'aimerais que lorsque quand je rentre 01.01.2018 dans la cellule C1 au lieu de me donner 15000 6000 il me donne SPY EUN2.
Merci encore mille fois pour ton aide et ton temps!!
Merci encore mille fois pour ton aide et ton temps!!
Re,
Le code adapté :
Le code adapté :
Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet Dim DC As Date 'déclare la variable DC (Date Cherchée) Dim OP As Worksheet 'déclare la variable OP (Onglet Portfolio) Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs) Dim I As Integer 'déclare la variable I (Incrément) Dim J As Integer 'déclare la variable J (incrément) Dim K As Integer 'déclare la variable K (incrément) Dim DT As Date 'déclare la variable DT (Date Trouvée) Dim TT() As Variant 'déclare la variable TT (Tableau des Tickers) If Target.Address <> "$C$1" Then Exit Sub 'si le changement a lieu ailleurs qu'en C1, sort de la procédure Range("A2:A" & Application.Rows.Count).ClearContents 'efface d'éventuelles anciennes données If Target.Value = "" Then Exit Sub 'si C1 est effacée, sort de la procédure DC = DateSerial(Year(Target.Value), Month(Target.Value), Day(Target.Value)) 'définit la date cherchée DC Set OP = Worksheets("Portfolio") 'définit l'onglet OP TV = OP.Range("A12").CurrentRegion 'définit le tableau des valeurs TV K = 1 'initialise la variable K For I = 4 To UBound(TV, 1) 'boucle 1 : sur toutes les ligne I du tableau des valeurs (en partant de la 4ème) 'définit la date trouvée DT (donnée en colonne 1 de la ligne de la boucle) DT = DateSerial(Year(TV(I, 1)), Month(TV(I, 1)), Day(TV(I, 1))) If DT = DC Then 'condition 1 : si les dates correspondent For J = 1 To UBound(TV, 2) 'boucle 2 : sur toutes les colonnes J du tableau des valeurs TV If TV(I, J) <> "" Then 'condition 2 : si la donnée ligne I colonne J de TV n'est pas vide ReDim Preserve TT(1 To 1, 1 To K) 'redimensionne le tableau des tickers TT TT(1, K) = TV(2, J) 'récupère dans la ligne 1 colonne K de TT, la donnée en ligne 2 colonne J de TV K = K + 1 'incrémente K (ajoute une colonne au tableau des tickers TT) End If 'fin de la condition 2 Next J 'prochaine colonne de la boucle 2 Exit For 'sort de la boucle 1 End If 'fin de la condition 1 Next I 'prochaine ligne de la boucle 1 'si K est supérieure à 1, renvoie dans la cellule A2 redimensionnée le tableau TT transposé If K > 1 Then Range("A2").Resize(UBound(TT, 2), 1).Value = Application.Transpose(TT) End Sub
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour, au lieu de
tu peux peut-être faire
il vaut mieux éviter de faire
Range("C14:Z14").Select Selection.copy Worksheets("Sheet2").Activate ActiveSheet.Paste Destination:=Worksheets("Sheet2").Range("A1").PasteSpecial(Transpose:=True)
tu peux peut-être faire
Range("C14:Z14").copy Worksheets("Sheet2").Paste Destination := Worksheets("Sheet2").Range("A1").PasteSpecial(Transpose:=True)
il vaut mieux éviter de faire
selectet
activate.