Renvoyer des valeurs en fonction d'une date
Fermé
sgrigoryann
Messages postés
7
Date d'inscription
mercredi 28 août 2019
Statut
Membre
Dernière intervention
29 août 2019
-
Modifié le 28 août 2019 à 14:36
sgrigoryann Messages postés 7 Date d'inscription mercredi 28 août 2019 Statut Membre Dernière intervention 29 août 2019 - 29 août 2019 à 08:55
sgrigoryann Messages postés 7 Date d'inscription mercredi 28 août 2019 Statut Membre Dernière intervention 29 août 2019 - 29 août 2019 à 08:55
A voir également:
- Renvoyer des valeurs en fonction d'une date
- Fonction si et - Guide
- Trouver une date de naissance gratuit ✓ - Forum Google Chrome
- Comment colorer une cellule excel en fonction du contenu d'une autre cellule ✓ - Forum Excel
- Fonction moyenne excel - Guide
4 réponses
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
28 août 2019 à 14:57
28 août 2019 à 14:57
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...
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
28 août 2019 à 16:21
28 août 2019 à 16:21
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
sgrigoryann
Messages postés
7
Date d'inscription
mercredi 28 août 2019
Statut
Membre
Dernière intervention
29 août 2019
28 août 2019 à 22:37
28 août 2019 à 22:37
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!!
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
28 août 2019 à 23:18
28 août 2019 à 23:18
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
sgrigoryann
Messages postés
7
Date d'inscription
mercredi 28 août 2019
Statut
Membre
Dernière intervention
29 août 2019
29 août 2019 à 08:55
29 août 2019 à 08:55
Merci infiniement! ca marche du tonerre! je vais essayer de l'appliquer sur ma vrai feuille excel maintenant !!!
yg_be
Messages postés
23480
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
3 mars 2025
Ambassadeur
1 568
Modifié le 28 août 2019 à 15:39
Modifié le 28 août 2019 à 15:39
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
.
sgrigoryann
Messages postés
7
Date d'inscription
mercredi 28 août 2019
Statut
Membre
Dernière intervention
29 août 2019
28 août 2019 à 15:49
28 août 2019 à 15:49
non toujours le meme message d'erreur :(
28 août 2019 à 15:28
28 août 2019 à 15:40
28 août 2019 à 15:41
28 août 2019 à 15:31