Suppression date+heure+données correspondantes selon non triple présence dans feuil1

Chuppps

XLDnaute Nouveau
Bonjour à toutes et à tous !

Je sais que ma question est très vague ne vous inquiétez pas je vais la développer 
Tout d’abord une petite présentation s’impose, je suis étudiant en 1ère S et en parallèle à ça je fais des recherches sur la bourse, le marché des changes en particulier, à la grande aide d’excel. J’ai toujours trouvé ce dont j’avais besoin sur le net, notamment sur ce forum d’ailleurs, c’est pour cela que je tiens à remercier ses contributeurs :) Mais là je sèche totalement sur mon problème il faut dire.

Voilà ce qui requiert je crois une VBA, mais je m’y connais tellement peu en VBA que je ne sais même pas si on dit un ou une VBA :

J’ai, sur environ 2000 lignes, trois cours différents qui proviennent d’archives différentes. Donc les trois dates et heures (dans des cellules séparées) sur ces lignes ne correspondent pas. Mais je sais qu’elles se retrouvent dans la feuille. Et à coté de ces dates et heures j’ai 5 choses différentes, l’ouverture, le plus haut, le plus bas, la cloture et le volume. Donc une ligne me donne par exemple :

dateX-heureX-Oa-Ha-Ba-Ca-Va-dateY-heureY-Ob-Hb-Bb-Cb-Vb-dateY-heureY-Oc-Hc-Bc-Cc-Vc

avec OHBCV l’ouverture, le plus haut, le plus bas, la cloture et le volume
abc c’est mes cours par exemple ils peuvent être égaux à : a=EURUSD b=GBPUSD c=USDJPY
- signifie que je passe à la cellule de bah droite :p

Sur les deux derniers cours tout va bien la date et l’heure pour les cotations qui suivent se correspondent entre elles . Mais ne correspondent pas avec le premier cours. Soit il n’y a pas de date et heure X pour ces cours, là je supprime carrément les données du premier cours jusqu’à arriver à date et heure Y. Fin pas besoin d’expliquer plus vous m’avez compris je pense être on ne peut plus explicite :) Si je veux exploiter des données je ne peux pas calculer une cotation de 20h à côté d’une de 20h05.

A la main c’est facile me direz-vous. Mais voilà, les cours qui contiennent des paires exotiques ( très peu trader ) contiennes pleins de trous dans leur cotation. Donc le temps pris pour ce faire est vite quintuplé car sur celui que j’ai fait à la main il y avait 200 trous !. 60% des mes cours contiennent des parités exotiques. Et je dois réaliser cette opération sur 116 « triangles » de cours si je puis dire … ^^’

J’ai bien essayé la fonction recherche sans trouver
J’ai cherché sur le net pendant 3h sans trouver
J’ai réfléchi de mon propre chef pendant des heures sans trouver non plus malheureusement
Alors je m’en remet à vous rois du/de la VBA :D J’ai pensé à un truc du style, je rentre mes cours en feuil1 et le tri se fait en feuil2, mais peu m’importe hein, je prône le rasoir d’ockham, donc le plus simple est le mieux :p

Si il reste des points noirs, ben demandez, j’y répondrais le plus vite possible, bien sûr je vous joint un fichier avec en feuille 1 les cours tout moches pas triés et en feuille deux le résultat attendu. Je tiens à signaler que j’ai du supprimer un grand nombre de lignes pour que le classeur fasse les 250ko maximum demandés. Voili voilou.

De la part d’un élève qui a soif de connaissance et, cordialement,
Chuppps
 

Pièces jointes

  • ArchivesForex.xlsx
    220.7 KB · Affichages: 47
  • ArchivesForex.xlsx
    220.7 KB · Affichages: 50
  • ArchivesForex.xlsx
    220.7 KB · Affichages: 49
Dernière édition:

JHA

XLDnaute Barbatruc
Re : Suppression date+heure+données correspondantes selon non triple présence dans fe

Bonjour à tous,

Avec ce que j'ai compris, recherche dans fichier avec index(equiv())
Calcul assez long dû aux formules matricielles
VBA serait plus rapide mais je ne sais pas faire


JHA
 

Pièces jointes

  • ArchivesForex.xlsx
    478 KB · Affichages: 38
  • ArchivesForex.xlsx
    478 KB · Affichages: 42
  • ArchivesForex.xlsx
    478 KB · Affichages: 40

Chuppps

XLDnaute Nouveau
Re : Suppression date+heure+données correspondantes selon non triple présence dans fe

C'est excatement ça ! Mille merci:D
Mais je ne comprend strictement pas la façon de faire, tu pourrais m'expliquer ce que fait la formule ?
Tu parles de temps ca t'en a pris beaucoup ?
Et je remarque que ca ne fait aucun calculs pour le premier cours, alors si j'ai un trou dans un deuxieme ou troisieme ( ce qui n'était pas le cas ici ) ca marche tout pareil ?
Voilà encore un grand merci !
Cordialement,
Chuppps
 

JHA

XLDnaute Barbatruc
Re : Suppression date+heure+données correspondantes selon non triple présence dans fe

Re,

Code:
=DECALER(INDEX($H$3:$H$1000;EQUIV($A3&$B3;$H$3:$H$1000&$I$3:$I$1000;0));;COLONNE()-24)
formule matricielle.


INDEX($H$3:$H$1000;EQUIV($A3&$B3;$H$3:$H$1000&$I$3:$I$1000;0))

Cette formule remplace la fonction recherchev() mais avec les 2 critères des colonnes "A3" et "B3"
Index($H$3:$H$1000.... sera le résultat attendu de cette colonne
EQUIV($A3&$B3;$H$3:$H$1000&$I$3:$I$1000;0).... recherche la ligne qui contient les valeurs "A3&B3" dans les colonnes "$H$1000&$I$3:$I$1000"
le zéro demande la valeur exacte, tu peux consulter l'aide de la fonction pour plus d'info.

l'utilisation de la fonction decaler permet ici de faire une copie de la formule vers la droite sans en changer la syntaxe, ici, pour la formule en "X3", "colonne()-24" renvoi 0 car "x" est la 24ème colonne du tableur.
tu peux consulter l'aide de la fonction pour plus d'info.

Pour le temps de calcul, cela a mis 2 à 3 secondes sur mon PC pour recalculer toutes les lignes de "X3" à "AL968" car se sont des formules matricielles.

Si une bonne âme charitable veut bien te mettre cela en VBA tu y gagneras beaucoup en temps de calcul.


JHA
 

Chuppps

XLDnaute Nouveau
Re : Suppression date+heure+données correspondantes selon non triple présence dans fe

Merci pour l'explication mais en fait je suis toujours bloqué, la formule ne fonctionne qu'a moitié, en effet si j'ai un trou de cotation dans le cours B ou C ça renvoie #N/A. Dans cette feuille ce n'est pas le cas, mais ça arrivera fort certainement.


Vraiment compliqué ce problème je trouve :/

Mais on touche au but c'est certain :D

Chuppps
 

Dormeur74

XLDnaute Occasionnel
Re : Suppression date+heure+données correspondantes selon non triple présence dans fe

Essaye cette macro, chez moi ça marche :

Code:
Option Explicit

Public Tableau() As Long

Sub Macro1()
    Dim NbRecords1 As Long
    Dim NbRecords2 As Long
    Dim NbRecords3 As Long
    Dim X As Long, Y As Long
    Dim NbLignes As Long
    Dim Compteur As Long
    
    ' On duplique la 1ère feuille pour ne pas travailler sur l'original
    Sheets("Feuil1").Select
    Sheets("Feuil1").Copy After:=Sheets(1)
    Sheets("Feuil1 (2)").Select
    Sheets("Feuil1 (2)").Name = "Feuil2"
    Sheets("Feuil2").Select
    Sheets("Feuil2").Copy After:=Sheets(2)
    Sheets("Feuil2 (2)").Select
    Sheets("Feuil2 (2)").Name = "Feuil3"
    Sheets("Feuil2").Select
    Rows("2:2").Select
    'ActiveWindow.ScrollRow = 65535
    Rows("2:65535").Select
    Selection.Delete Shift:=xlUp
    
    Worksheets("Feuil3").Select

    ' On calcule le nombre d'enregistrements de chaque source (AUDCHF, GBPAUD et GBPCHF)
    NbRecords1 = Cells(Rows.Count, 1).End(xlUp).Row
    NbRecords2 = Cells(Rows.Count, 8).End(xlUp).Row
    NbRecords3 = Cells(Rows.Count, 15).End(xlUp).Row
    
    ' On recopie la plage de l'opérateur B à la suite de celle de l'opérateur A
    Range("H3:N" & Trim(Str(NbRecords2))).Select
    Selection.Copy
    Range("A" & Trim(Str(NbRecords1 + 1))).Select
    ActiveSheet.Paste
    
    ' On recopie la plage de l'opérateur C à la suite de celle de l'opérateur B
    Range("O3:U" & Trim(Str(NbRecords3))).Select
    Selection.Copy
    Range("A" & Trim(Str(NbRecords1 + NbRecords2 - 1))).Select
    ActiveSheet.Paste
    
    ' On trie dans l'ordre des dates et des heures
    Cells.Select
    Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _
        , Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom

    ' On recherche les triplets
    NbLignes = Cells(Rows.Count, 1).End(xlUp).Row
    For Y = 3 To NbLignes - 2
        If Cells(Y, 1) = Cells(Y + 1, 1) And Cells(Y, 1) = Cells(Y + 2, 1) And Cells(Y, 2) = Cells(Y + 1, 2) And Cells(Y, 2) = Cells(Y + 2, 2) Then
            Compteur = Compteur + 1
            ReDim Preserve Tableau(Compteur)
            Tableau(Compteur) = Y
            Y = Y + 2
        End If
    Next Y
    
    For Y = 1 To UBound(Tableau)
        For X = 1 To 7
            Sheets("Feuil2").Cells(Y + 1, X) = Sheets("Feuil3").Cells(Tableau(Y), X)
            Sheets("Feuil2").Cells(Y + 1, X + 7) = Sheets("Feuil3").Cells(Tableau(Y) + 1, X)
            Sheets("Feuil2").Cells(Y + 1, X + 14) = Sheets("Feuil3").Cells(Tableau(Y) + 2, X)
        Next X
    Next Y
    
    ' On n'a plus besoin de la feuille 3
    MsgBox "Vous devrez accepter la destruction des feuilles de calcul devenues inutiles", vbInformation + vbOKOnly, "Nettoyage"
    Sheets("Feuil3").Select
    ActiveWindow.SelectedSheets.Delete

    MsgBox "Fin de traitement, les résultats sont dans la feuille 2", vbInformation + vbOKOnly, "Triplets"
    

End Sub
 

Dormeur74

XLDnaute Occasionnel
Re : Suppression date+heure+données correspondantes selon non triple présence dans fe

Ne pas oublier de détruire la feuille "Feuil2" avant de lancer la macro. Il ne doit y avoir que la feuille "Feuil1" contanant les données à traiter dans le classeur.
 

Chuppps

XLDnaute Nouveau
Re : Suppression date+heure+données correspondantes selon non triple présence dans fe

Que dire mis à part un gigantesque merci !
Je vais gagner un temps CONSIDERABLE, donc = plus de temps pour apprendre mes cours ; P
Je viens de tester ta macro et ça fonctionne impeccable aussi chez moi ^^
Je vais bien décortiquer ça pour la comprendre, tes commentaires vont beaucoup aider donc re super mega big gros merci

Et si j'ai des questions eh bien je reviens :)

Sur ce bonne soirée et merci de votre aide à tous les deux ! Et les contributions invisibles si elles ont eu existées :p

Chuppps
 

Chuppps

XLDnaute Nouveau
Re : Suppression date+heure+données correspondantes selon non triple présence dans fe

Ca ma deja mis ça dès le départ :

Erreur d'exécution '9':
L'indice n'apartient pas à la sélection.

Ca ne gène en rien le bon fonctionnement de la macro mais quand je met debogage il m'indique cette ligne (jaune) :
Range("F13").Select
Application.WindowState = xlMinimized
Sheets("AUDCHF").Select
Application.WindowState = xlMinimized
Windows("bArchivesForex.xlsm").Activate
Range("A4:G4").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

J'ai remplacé "AUDCHF" par "A1" Sachant que A1 contient "AUDCHF"

Mais toujours le même message après l'excécution de la macro

des fois la maccro ne calculera pas de AUDCHF, j'ai essayé en supprimant cette ligne, mais même message d'erreur sur celle d'en dessous, je ne comprend pas très bien donc ^^"

Cordialement,
Chuppps
 

Dormeur74

XLDnaute Occasionnel
Re : Suppression date+heure+données correspondantes selon non triple présence dans fe

Tu trouveras le fichier Excel ici, je n'ai pas pu le joindre (probablement trop lourd).
J'ai oublié de te dire une chose importante : j'ai dû mettre les deux premières lignes (titres et sous-titres) sur une seule ligne pour faciliter le tri.

L'algorithme utilisé est le suivant :
- on copie Feuil1 en Feuil2 et Feuil3
- on vide Feuil2 de ses données (on ne garde que la ligne de titre), Feuil3 va servir de feuille de calcul. A la fin de la macro, les données constituant des triplets seront dans Feuil2, on pourra détruire Feuil3.

Traitement de Feuil3.
- dans Feuil3, on prend les données qui se trouvent dans les colonnes H:N et on les ajoute au contenu des colonnes A:G
- on prend les données qui se trouvent dans les colonnes O:U et on les ajoute également au contenu des colonnes A:G
- à présent, on a toutes les données utiles dans les colonnes A:G on effectue un tri de la feuille sur les colonnes A et B (Date et Heure)
- il suffit maintenant de noter dans un tableau le numéro des lignes qui marquent le début des triplets et de reporter les données correspondantes dans la feuille Feuil2.
 

Chuppps

XLDnaute Nouveau
Re : Suppression date+heure+données correspondantes selon non triple présence dans fe

Ah je vois que tu as changé la macro :)
Eh bien eh bien je n'ai plus de question grand merci pour l'explication c'était très clair.
Tu m'as apporté exactement le résultat cherché :D

Rere big thanks !
 

Discussions similaires

Statistiques des forums

Discussions
312 162
Messages
2 085 858
Membres
103 005
dernier inscrit
gilles.hery