reprendre les dates d'aujourd'hui dans un tableau

garrec

XLDnaute Occasionnel
Bonjour a tous

Voici en PJ un tableau qui repertorie des actions achetées au cours de plusieurs jours.

J'aimerais bien recuperer les lignes correspondant à aujourd'hui (feuille 2 j'ai mi les intitulés des colonne a reprendre).

Mais je ne vois pas comment faire.
:confused:


Merci d'avance
 

Pièces jointes

  • reprendre lignes d'aujourd'hui.xlsx
    19.3 KB · Affichages: 45
  • reprendre lignes d'aujourd'hui.xlsx
    19.3 KB · Affichages: 45
  • reprendre lignes d'aujourd'hui.xlsx
    19.3 KB · Affichages: 48

Modeste

XLDnaute Barbatruc
Re : reprendre les dates d'aujourd'hui dans un tableau

Bonjour garrec,

Il faudra vérifier en fonction du volume de données à traiter: s'il y en a de grandes quantités, la proposition jointe risque d'exiger un temps de calcul "conséquent" (j'ai utilisé des formules matricielles).
Si ça "coince", dis-le nous, on peut faire autrement, bien sûr (en utilisant des colonnes supplémentaires ou par macro, par exemple)

... Commence par tester la pièce jointe ... et dis-nous

Edit: impossible de joindre un fichier ... donc colle cette formule en E14 de Feuil2:
Code:
=SI(SOMME(N(ENT(Feuil1!$A$2:$A$60)=AUJOURDHUI()))>=LIGNES($1:1);INDEX(Feuil1!$A$2:$P$60;PETITE.VALEUR(SI(ENT(Feuil1!$A$2:$A$60)=AUJOURDHUI();LIGNE(Feuil1!$A$2:$A$60)-1);LIGNES($1:1));EQUIV(Feuil2!E$13;Feuil1!$A$1:$P$1;0));"")
... et valide avec Ctrl+Shift+Enter, puis recopie en bas et à droite

Attention le texte "cours achat/vente" n'est pas identique dans les titres de colonne en Feuil1 et Feuil2. Pour que la formule fonctionnedans la dernière colonne, il faut remédier à ce problème.
 

garrec

XLDnaute Occasionnel
Re : reprendre les dates d'aujourd'hui dans un tableau

Bonjour c'est vraiment cool de ta part.

Mais je voyais plus un truc comme ça (ci joint).

Comme ça a chaque fois que l'on rajoute une ligne dans la feuille 1 elle se met a la suite du tableau dans la feuille 2

Le probleme c'est qu'il y a beaucoup trop d'espace avant dans le tableau de la feuille 2!!! :confused: Il faudrait supprimer ces lignes!!

A moins que tu vois une solution plus simple?


Bonne journée et merci encore
 

garrec

XLDnaute Occasionnel
Re : reprendre les dates d'aujourd'hui dans un tableau

Bonjour c'est vraiment cool de ta part.

Mais je voyais plus un truc comme ça (ci joint).

Comme ça a chaque fois que l'on rajoute une ligne dans la feuille 1 elle se met a la suite du tableau dans la feuille 2

Le probleme c'est qu'il y a beaucoup trop d'espace avant dans le tableau de la feuille 2!!! Il faudrait supprimer ces lignes!!

A moins que tu vois une solution plus simple?


Bonne journée et merci encore
 

Pièces jointes

  • reprendre lignes d'aujourd'hui.xlsx
    39.6 KB · Affichages: 35
  • reprendre lignes d'aujourd'hui.xlsx
    39.6 KB · Affichages: 34
  • reprendre lignes d'aujourd'hui.xlsx
    39.6 KB · Affichages: 34

Robert

XLDnaute Barbatruc
Repose en paix
Re : reprendre les dates d'aujourd'hui dans un tableau

Bonour le fil, bonjour le forum,

Une proposition VBA avec le code ci-dessous :
Code:
Sub Macro1()
Dim ad As Range 'déclare la variable ad (Anciennes Données)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)

Set ad = Sheets("Feuil2").Range("E13").CurrentRegion 'définit la plage des anciennes données
If ad.Rows.Count > 1 Then 'condition : si ad contient plus d'une seule ligne
    Set ad = ad.Offset(1, 0).Resize(ad.Rows.Count - 1, ad.Columns.Count) 'redéfinit ad (sans la première ligne)
    ad.Clear 'efface ad
End If 'fin de la condition

With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne A
    Set pl = .Range("A2:A" & dl) 'définit la plage pl
End With 'fin de la prise en compte de l'onglet "Feuil1"
For Each cel In pl 'boucle sur toutes les cellule cel de la plage pl
    'condition : si la date correspond
    If Day(cel.Value) = Day(Date) And Month(cel.Value) = Month(Date) And Year(cel.Value) = Year(Date) Then
        'définit la cellle de destination
        Set dest = IIf(Sheets("Feuil2").Range("E14") = "", Sheets("Feuil2").Range("E14"), Sheets("Feuil2").Cells(Application.Rows.Count, 5).End(xlUp).Offset(1, 0))
        dest.Value = cel.Value 'récupère la date
        dest.Offset(0, 1).Value = cel.Offset(0, 4).Value 'récupère le code isin
        dest.Offset(0, 2).Value = cel.Offset(0, 3).Value 'reçupère le nom de la valeur
        dest.Offset(0, 3).Value = cel.Offset(0, 12).Value 'récupère la devise
        dest.Offset(0, 4).Value = cel.Offset(0, 11).Value 'récupère la quantité
        dest.Offset(0, 5).Value = cel.Offset(0, 6).Value 'récupère le sens
        dest.Offset(0, 6).Value = cel.Offset(0, 15).Value 'récupère le cours
    End If 'fin de la condition
Next cel 'prochaine celllule de la boucle
End Sub
 

Modeste

XLDnaute Barbatruc
Re : reprendre les dates d'aujourd'hui dans un tableau

Re-bonjour,

Doucement, doucement, je n'ai plus 20 ans ;) ... 3 messages en 6 minutes, c'est plus que je ne saurais en assimiler! En plus je ne comprends pas tout:
- Tu peux recopier la formule que j'ai proposé sur 50 lignes, si tu le souhaites: les données ajoutées en Feuil 1 s'afficheront automatiquement. Il faudra bien sûr adapter la taille de la plage, mais on peut le faire de façon dynamique.
- La proposition était à tester, si le temps de calcul reste acceptable, on peut envisager les aménagements proposés ci-dessus. Dans un de tes messages, tu dis: "5 minutes pour le fichier" .. c'est le temps de calcul? Sur le fichier exemple ou avec les données réelles?
- Pour l'histoire des lignes vides inutiles ou des infos qui doivent s'afficher plus bas, je n'ai pas compris :confused:


... Bon, je vois que Robert a essayé par macro ... voyons si sa proposition convient (et donc je ne cherche pas plus loin, pour l'instant)
 

garrec

XLDnaute Occasionnel
Re : reprendre les dates d'aujourd'hui dans un tableau

@ Robert: Merci ton code est tres bien. Je l'ai réorganisé car le fichier que je met sur ce site est un résumé donc voila ce que donnerait le vrai

Code:
Sub Macro1()
 Dim ad As Range 'déclare la variable ad (Anciennes Données)
 Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
 Dim pl As Range 'déclare la variable pl (PLage)
 Dim cel As Range 'déclare la variable cel (CELlule)
 Dim dest As Range 'déclare la variable dest (cellule de DESTination)
 
Set ad = Sheets("Port_MOMENTUM").Range("BV172").CurrentRegion 'définit la plage des anciennes données
 If ad.Rows.Count > 1 Then 'condition : si ad contient plus d'une seule ligne
     Set ad = ad.Offset(1, 0).Resize(ad.Rows.Count - 1, ad.Columns.Count) 'redéfinit ad (sans la première ligne)
     ad.Clear 'efface ad
 End If 'fin de la condition
 
 
 Windows("KARA_VIEW_GP.xls").Activate
With Sheets("Daily Equity") 'prend en compte l'onglet "Daily Equity" dans le fichier "KARA_VIEW_GP.xls"
     dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne A
     Set pl = .Range("A3119:A" & dl) 'définit la plage pl
 End With 'fin de la prise en compte de l'onglet "Daily Equity"
 For Each cel In pl 'boucle sur toutes les cellule cel de la plage pl
     'condition : si la date correspond
     If Day(cel.Value) = Day(Date) And Month(cel.Value) = Month(Date) And Year(cel.Value) = Year(Date) Then
         'définit la cellle de destination
         Set dest = IIf(Sheets("Port_MOMENTUM").Range("BV172") = "", Sheets("Port_MOMENTUM").Range("BV172"), Sheets("Port_MOMENTUM").Cells(Application.Rows.Count, 5).End(xlUp).Offset(1, 0))
         dest.Value = cel.Value 'récupère la date
         dest.Offset(0, 1).Value = cel.Offset(0, 4).Value 'récupère le code isin
         dest.Offset(0, 2).Value = cel.Offset(0, 3).Value 'reçupère le nom de la valeur
         dest.Offset(0, 3).Value = cel.Offset(0, 12).Value 'récupère la devise
         dest.Offset(0, 4).Value = cel.Offset(0, 11).Value 'récupère la quantité
         dest.Offset(0, 5).Value = cel.Offset(0, 6).Value 'récupère le sens
         dest.Offset(0, 6).Value = cel.Offset(0, 15).Value 'récupère le cours
     End If 'fin de la condition
 Next cel 'prochaine celllule de la boucle
 End Sub

Comme tu peux le voir il y a 2 fichiers!

Le probleme c'est quand j'execute la macro il me revient que la premiere ligne d'aujourd'hui du fichier KARA VIEW onglet Daily Equity en ligne 172 dans le port_MOMENTUM.

Apres il me met une erreur ici "Set dest = IIf(Sheets("Port_MOMENTUM").Range("BV172") = "", Sheets("Port_MOMENTUM").Range("BV172"), Sheets("Port_MOMENTUM").Cells(Application.Rows.Count, 5).End(xlUp).Offset(1, 0))" comme quoi l'indice n'appartient pas la selection .


Tu vois ou j'explicite plus?


@Modeste (autre solution ci le VBA ne fonctionne pas :))

J'ai maintenant mes lignes d'aujourd'hui qui s'affichent dans mon fichier comme tu peux le voir en ligne 60.
Je n'ai pas utilisé ta formule car elle semblait pas fonctionner automatiquement quand je rajoutais une ligne dans la feuille 1! Mais ce que j'ai fait fonctionne tres bien!

Maintenant il reste a supprimer les lignes (avec une macro?) avant la ligne 60 en loccurence dans la feuille 2. Tu vois ce que je veux dire??? Je te rejoins mon fichier ce sera plus explicit.

Merci encore a tous les 2!
 

Pièces jointes

  • reprendre lignes d'aujourd'hui.xlsx
    39.6 KB · Affichages: 41
  • reprendre lignes d'aujourd'hui.xlsx
    39.6 KB · Affichages: 38
  • reprendre lignes d'aujourd'hui.xlsx
    39.6 KB · Affichages: 39
Dernière édition:

garrec

XLDnaute Occasionnel
Re : reprendre les dates d'aujourd'hui dans un tableau

@ Robert mais même quand je met ton code c a d

Code:
Sub Macro1()
 Dim ad As Range 'déclare la variable ad (Anciennes Données)
 Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
 Dim pl As Range 'déclare la variable pl (PLage)
 Dim cel As Range 'déclare la variable cel (CELlule)
 Dim dest As Range 'déclare la variable dest (cellule de DESTination)
 
Set ad = Sheets("Feuil2").Range("E13").CurrentRegion 'définit la plage des anciennes données
 If ad.Rows.Count > 1 Then 'condition : si ad contient plus d'une seule ligne
     Set ad = ad.Offset(1, 0).Resize(ad.Rows.Count - 1, ad.Columns.Count) 'redéfinit ad (sans la première ligne)
     ad.Clear 'efface ad
 End If 'fin de la condition
 
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
     dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne A
     Set pl = .Range("A2:A" & dl) 'définit la plage pl
 End With 'fin de la prise en compte de l'onglet "Feuil1"
 For Each cel In pl 'boucle sur toutes les cellule cel de la plage pl
     'condition : si la date correspond
     If Day(cel.Value) = Day(Date) And Month(cel.Value) = Month(Date) And Year(cel.Value) = Year(Date) Then
         'définit la cellle de destination
         Set dest = IIf(Sheets("Feuil2").Range("E14") = "", Sheets("Feuil2").Range("E14"), Sheets("Feuil2").Cells(Application.Rows.Count, 5).End(xlUp).Offset(1, 0))
         dest.Value = cel.Value 'récupère la date
         dest.Offset(0, 1).Value = cel.Offset(0, 4).Value 'récupère le code isin
         dest.Offset(0, 2).Value = cel.Offset(0, 3).Value 'reçupère le nom de la valeur
         dest.Offset(0, 3).Value = cel.Offset(0, 12).Value 'récupère la devise
         dest.Offset(0, 4).Value = cel.Offset(0, 11).Value 'récupère la quantité
         dest.Offset(0, 5).Value = cel.Offset(0, 6).Value 'récupère le sens
         dest.Offset(0, 6).Value = cel.Offset(0, 15).Value 'récupère le cours
     End If 'fin de la condition
 Next cel 'prochaine celllule de la boucle
 End Sub


dans un module de mon fichier test je n'obtiens que la premiere ligne qui porte la valeur de la date d'aujourd'hui en A?

:)
 

Modeste

XLDnaute Barbatruc
Re : reprendre les dates d'aujourd'hui dans un tableau

Re-bonjour,

@Robert: mes hommages :D

@garrec: pas certain que "courir deux lièvres à la fois" soit une bonne idée, mais je confirme avoir testé la formule en ligne 2 de la Feuil2 ... sans souci (et sans être obligé de supprimer des lignes, ensuite).
Si je trouve une solution au problème qui m'empêche de joindre des fichiers cet après-midi, je posterai un fichier, mais là ... :(
 

Modeste

XLDnaute Barbatruc
Re : reprendre les dates d'aujourd'hui dans un tableau

Re²,

Voilà donc l'illustration dans un fichier ... Si j'ai bien compris ce que tu voulais :confused:
J'en ai profité pour travailler avec une plage nommée "dynamique", mais à ce stade, ça ne change rien au fait que ça fonctionne ou non!

Une fois que tu auras vu si ça donne le résultat voulu, il me semble qu'il serait préférable de te centrer sur la recherche d'une solution par formule ou par macro!? Non pas qu'une solution soit préférable à l'autre (quoique, la macro peut-être, si on maîtrise :rolleyes:) ... juste pour éviter de "s'éparpiller"
 

Pièces jointes

  • reprendre lignes d'aujourd'hui (3).xlsx
    23.7 KB · Affichages: 39

garrec

XLDnaute Occasionnel
Re : reprendre les dates d'aujourd'hui dans un tableau

Merci

Oui j'ai compris la formule. C'est super mais quand je la rentre ailleur ça me met 0? Tu vois une erreur j'arrive pas a la trouvé?

Merci encore M.Modeste
 

Pièces jointes

  • essai.xlsx
    170.1 KB · Affichages: 71
  • essai.xlsx
    170.1 KB · Affichages: 74
  • essai.xlsx
    170.1 KB · Affichages: 72

Modeste

XLDnaute Barbatruc
Re : reprendre les dates d'aujourd'hui dans un tableau

Bonsoir (pour changer!),

Deux propositions de modification:
EQUIV(BT$173;'Daily Equity'!$A$1:$AJ$1;0)
... Alors que la formule elle-même figure en F173, provoque une référence circulaire: BT$172 me semble plus adapté

INDEX('Daily Equity'!$A$2:$A$110 ...
Si tu ne sélectionnes qu'une colonne, la formule ne pourra pas être recopiéedans les cellules à droite (comment trouver la deuxième, puis la troisième, etc. colonne d'une plage que n'en compte qu'une seule!?)
Index doit s'appliquer à la plage $A$2:$P$110
 

garrec

XLDnaute Occasionnel
HEyyyyyyyyyyyyyyy Re^10

Finalement j'ai repris le code de Robert. En le modifiant le voici

Code:
Sub Macro1()
 Dim ad As Range 'déclare la variable ad (Anciennes Données)
 Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
 Dim pl As Range 'déclare la variable pl (PLage)
 Dim cel As Range 'déclare la variable cel (CELlule)
 Dim dest As Range 'déclare la variable dest (cellule de DESTination)
 

 
Set ad = Sheets("Port_MOMENTUM").Range("BT173").CurrentRegion 'définit la plage des anciennes données
 If ad.Rows.Count > 1 Then 'condition : si ad contient plus d'une seule ligne
     Set ad = ad.Offset(1, 0).Resize(ad.Rows.Count - 1, ad.Columns.Count) 'redéfinit ad (sans la première ligne)
     ad.Clear 'efface ad
 End If 'fin de la condition
 
 
With Sheets("Daily Equity")  'prend en compte l'onglet "Feuil1"
     dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne A
     Set pl = .Range("A2:A" & dl) 'définit la plage pl
 End With 'fin de la prise en compte de l'onglet "Feuil1"
 For Each cel In pl 'boucle sur toutes les cellule cel de la plage pl
     'condition : si la date correspond
      
      If Day(cel.Value) = Day(Date) And Month(cel.Value) = Month(Date) And Year(cel.Value) = Year(Date) Then
         'définit la cellle de destination
         Set dest = IIf(Sheets("Port_MOMENTUM").Range("BT173") = "", Sheets("Port_MOMENTUM").Range("BT173"), Sheets("Port_MOMENTUM").Cells(Application.Rows.Count, 5).End(xlUp).Offset(1, 0))
         dest.Value = cel.Value 'récupère la date
         dest.Offset(0, 1).Value = cel.Offset(0, 4).Value 'récupère le code isin
         dest.Offset(0, 2).Value = cel.Offset(0, 3).Value 'reçupère le nom de la valeur
         dest.Offset(0, 3).Value = cel.Offset(0, 12).Value 'récupère la devise
         dest.Offset(0, 4).Value = cel.Offset(0, 11).Value 'récupère la quantité
         dest.Offset(0, 5).Value = cel.Offset(0, 6).Value 'récupère le sens
         dest.Offset(0, 6).Value = cel.Offset(0, 15).Value 'récupère le cours
     End If 'fin de la condition
 Next cel 'prochaine celllule de la boucle
 End Sub

Et je l'ai incerer dans ce fichier ci dessous.

ça fonctionne PARFAITEMENT sauf que ça ne resort que la premiere ligne qui a la bonne date!

Je ne vois pas d'ou sors le probleme? ;);)


Merci encore et bne fin de journée
 

Pièces jointes

  • VL ESAAI.xlsx
    242.3 KB · Affichages: 54
  • VL ESAAI.xlsx
    242.3 KB · Affichages: 54
  • VL ESAAI.xlsx
    242.3 KB · Affichages: 51

Discussions similaires

Réponses
7
Affichages
339

Statistiques des forums

Discussions
312 833
Messages
2 092 598
Membres
105 463
dernier inscrit
ilmentore02