realisation d'une macro avec plusieurs variables

lao31

XLDnaute Occasionnel
Bonjour le forum et bonnes fetes de fin d'années a tous et toutes.

Pour profiter du temps de libre en ces fetes de fin d'année, je me casse la tete sur un fichier ou avec des formules multiples j'arrive tant bien que mal a faire ce que je desire.
Mon fichier initial est tellement long que je suis intimement convaincu qu'avec une macro, je pourrai faire tourner les calculs beaucoup plus facilment, mon soucis est que je vois kidée des variables, mais je suis incapable d'ecrire cette macro.
cela pourrait etre du style Do while un objectif a atteindre .
la ou cela se complique c'est que j'ai plusieurs objectifs et pire qui peuvent etre chercher en meme temps.
c'est la qu'il me faudrait plusieurs variables sorte de boucle.
Mais comme d'habitude mes explications sont franchement pas tres claires, pourtant j'essai.
Difficile de formuler simplement quand on sais ce que l'on veux mais qu'on ne sait pas comment faire.
Je vous join donc un fichier.
Et d'avance je vous remerçie
Cordialement
lao31
 

Pièces jointes

  • cumul.xlsm
    23.2 KB · Affichages: 58
  • cumul.xlsm
    23.2 KB · Affichages: 56

lao31

XLDnaute Occasionnel
Re : realisation d'une macro avec plusieurs variables

Bonjour le forum, Dranreb,

Je ne suis pas sur de savoir par quel bout commencer. un tableau ? avec les données actuelles du dernier fichier ?
je vais essayer mais c'est la perte de temps qui m'inquietes.
cordialement
Lao31
 

Dranreb

XLDnaute Barbatruc
Re : realisation d'une macro avec plusieurs variables

Bonjour.
Le plus simple c'est de repartir de la procédure TrouveAsk que je vous avais écrite. Elle travaillait déjà avec des tableaux en mémoire.
Elle chargeait tout au début dans un tableau Te et déchargeait le résultat à la fin, rangé dans un tableau Ts. Ce sera exactement pareil, là.
 

lao31

XLDnaute Occasionnel
Re : realisation d'une macro avec plusieurs variables

Bonjour,

Tres bien, je vais essayer de trouver cela cet apres midi. j'ai peur deja de ne pas avoir tout compris a l'epoque, mais je vais essayer.
merçi en tout cas de vous y etre interressé.
cordialement
 

lao31

XLDnaute Occasionnel
Re : realisation d'une macro avec plusieurs variables

Bonjour le forum, Dranreb

Voila en fichier join le debut en esperant que c'est cela que vous vouliez dire en parlant de tableau.
trouveask allez me chercher une valeur et me donne la date a laquelle elle rencontrait la valeur >= a la valeur demandé.
pour le cas present c'est tout a fait different. c'est en fonction d'un texte ( ask ou bid ) que des calculs sont fait et ensuite le resultat doit changer de colonne a chaque fois qu'un ask ou bid est rencontré.
surement plus clair dans mon fichier join.
si je pars sur une auvaise piste je compte sur vous pourme remettre sur le bon chemin.
Cordialement
Lao31
 

Pièces jointes

  • cumullast3.xlsm
    57.7 KB · Affichages: 45
  • cumullast3.xlsm
    57.7 KB · Affichages: 62

Dranreb

XLDnaute Barbatruc
Re : realisation d'une macro avec plusieurs variables

Oui, vous n'avez pas encore fait un grand travail dessus. Là il faut récupérer plus de colonnes que [A: D] dans le tableau d'entrée. [A:H] je pense. Et puis vous faites vos tests comme vous les voulez et quand vous rencontrez "ask" ou "bid" en Te(L, 5) ou Te(L, 6) vous iincrémentez une variable C pour ranger vos nouveaux résultats dans une colonne supplémentaire de Ts.
Mettez Option Explicit en tête du module. La mise au point sera plus facile.
 

lao31

XLDnaute Occasionnel
Re : realisation d'une macro avec plusieurs variables

Re le forum, Dranreb

Au secouuuuuuuuurs je suis perdu, en fait je tatonne car j'essai de prendre la macro trouveask et remplacer des variables ou des ? par ce que je crois etre mes variables, evidemment comme pour moi la plupart du temps c du braille, plouf.
Est ce qu'avec le code qui suis, je suis sur le bon chemin ? disons au moins dans la demarche.

Sub TrouveAsk1()
Option Explicit
Dim F As Worksheet, Te(), Ts(), L&, TVal(1 To 170000) As Double, _
TSup(1 To 170000) As Boolean, TL(1 To 170000), Jask&, J&, K&
Set F = Sheets("essai")
Te = Intersect(F.[A:H], F.UsedRange).Value
ReDim Ts(1 To UBound(Te, 1), 1 To 1)
For L = 2 To UBound(Ts, 1)
If Not IsEmpty(Te(L, 5)) Then
' Jask = Jask + 1
' je ne comprends pas que signifie Jask
TVal(Jask) = Te(L, 7) * (Te(L, 2) - Te(L, 6)) * 10000
' TSup(Jask) = TVal(Jask) > Te(L, 3)
TL(Jask) = L
End If
J = 1: Do While J >= Range(J, 1).Value
' If TVal(J) > Te(L, 3) Xor TSup(J) Then
' If IsEmpty(Ts(L, 1)) Then Ts(L, 1) = IIf(TSup(J), _
' ">", "<=") & " " & TVal(J) ' Instruction à supprimer si elle ne sert à rien…
Ts(TL(J), 1) = Te(L, 1)
Jask = Jask - 1
For K = J To Jask
TVal(K) = TVal(K + 1)
TSup(K) = TSup(K + 1)
TL(K) = TL(K + 1): Next K
Else
J = J + 1: End If: Loop: Next L
F.[E1].Resize(UBound(Ts, 1)).Value = Ts
End Sub

J'ai l'impression parfois de comprendre puis plouf une nouvelle fonction ou autre variable se presente et je ne sais pas a quoi cela correspond, alors je cherche sur google ou sur le site et je me noie ( style Xor ).

Dur de voir qu'on ne saisie pas grand chose et quelle admiration de vous voir si a l'aise
Lao31.
Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : realisation d'une macro avec plusieurs variables

Bonjour.

Xor est un opérateur booléen qui, pour deux expressions, les combine pour donner True si une des deux est fausse et l'autre vraie.
Eqv existe aussi pour déterminer si elles sont dans le même état. And pour déterminer si elle sont toutes vraies, Or si au moins une l'est. Il y a aussi l'opérateur Not qui donne l'état contraire de l'expression à sa droite, True pour False et False pour True.

Je ne veux plus voir de Do While J >= Range(J, 1).Value. Éventuellement Do While J >= Te(J, 1) mais je ne sais pas si c'est ce qu'il vous faut.

JAsk devait être un indice de minuscules tableaux annexes pour noter les conditions des test à effectuer. Vous ne devriez plus avoir besoin de ça je suppose

Est-ce que vous ne verriez pas mieux ce que vous chercher à dégager de vos traitement en mettant vos données sous forme de graphique ?
 
Dernière édition:

lao31

XLDnaute Occasionnel
Re : realisation d'une macro avec plusieurs variables

Bonjour le forum, Dranreb

J'avais mis cela " Do While J >= Te(J, 1) " ou plutot Do While J >= Range(J, 1).Value pensant que cela effectuerai ma boucle jusqu'a ce que la valeur soit >= a J1. mais la je suis paumé. faut qu'a tete reposé je reprennes tout a zero car je suis perdu. j'esperai qu'avec un code VBA cela irai plus vite car j'ai plus de 300 000 lignes et pour les colonnes surement > 1000 alors me faire des copier vers le bas en verifiant les conditions comme je l'ai mis dans mon fichier join cela serai tres long et surement source d'erreur.
pour la forme de graphique, je ne vois pas comment faire et je ne sais pas a quoi cela me servirai, mais je suis preneur.
Ce que je cherche est mettre un systeme ou tester un systeme hedging et d'apres un historique de donnés je voudrais tester ce systeme.
merçi en tout cas d'essayer de me donner la lumiere mais je m'aperçois que mes lacune sont trop grandes a chaque fois c'est comme si je repartais a zero, cela doit etre l'age et surtout le manque de connaissance.
cordialement
Lao31
 

lao31

XLDnaute Occasionnel
Re : realisation d'une macro avec plusieurs variables

Bonjour le forum, Dranreb,
J'ai cherche un peu partout et j'ai vu un post sur lequel vous vous etes penché.
cela ressemble un peu a mon probleme en tout cas pour les tableaux.
j'ai essayé de reprendre votre code et l'adapter suis je sur le bon chemin ?
Comme c parti j'ai peur d'y passer l"année, biensur j'ai envie d'apprendre et donc etre plus autonome, mais je cherche a comprendre et souvent je suis perdu , j'ai apprecie dans le post que j'ai trouvé, comment vous expliquiez , mais je rame malgré tout, je pars sur des hypotheses qui m'echappent apres. je suis intimement coonvaincu que vous avez La solution, et je suis aussi intimement convaincu que vous aimeriez que je la trouve suivant vos explications ( c'est en cela que le coté pedagogique est interressant ) mais y a tant d'elements nouveau pour moi que je perds un temps fou, meme si plutard je pourrai me servir de vos enseignements.
je vous comprends d'ailleurs j'ai fais cela pour mes enfants. mais voila la je patine grave alors comme mes enfants me diraient, mais papaaa aide moi stp, je te promets que j'essayerai de comprendre . et je cedai. ( pour des choses simples ) alors papaaaaaa aides moi stp.
Y a de l'humour la dedans j'espere que vous n'etes pas hermetique, mais je vous garantie que je ne laisserai pas tomber l'apprentissage.
Donc voici le code pris et arranger selon ma comprehension:
Sub For_X_to_Next_Colonne()
Dim PlageDon As Range, TE(), LE&, CE&, TS(), LS&, CS& ' Partout les 1ères lettres
' de Talbeau, Ligne, Colonne, Entrée, Sortie.
Set PlageDon = essai.Rows(3).Find(What:="ask", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Offset(, -1)
Set PlageDon = Intersect(essai.Range(essai.Columns("5"), PlageDon), essai.[3:1048576], essai.UsedRange)
TE = PlageDon.Resize(PlageDon.Rows.Count - 1).Value
ReDim TS(1 To UBound(TE, 1) * UBound(TE, 2), 1 To 6)
For CE = 5 To UBound(TE, 2)
For LE = 3 To UBound(TE, 1)
… (et la suite pareil)


Dim TE(), LE&, CE&, TS(), LS&, CS& ' Partout les 1ères lettres
' de Taleau, Ligne, Colonne, Entrée, Sortie.
Bon ben ça ce sont les déclarations des variables. Les () demande un tableau dynamique, c'est à dire de dimensions indéterminées, d'éléments de type Variant. Les & sont une abréviation pour As Long soit entier codé sur 4 octets.

TE = Intersect(Feuil1.[D5:XFD1048576], Feuil1.UsedRange).Value
Feuil1.[D5:XFD1048576] établit au moyen de la méthode Evaluate de l'objet worksheet dont le nom est Feuil1 la plage allant de la cellule D5 jusqu'à la dernière cellule de la feuille
Feuil1.UsedRange représente la plage effectivement utilisée dans cette même feuille.
Intersect est une méthode de l'objet Application qui rend un objet range représentant l'intersection entre les 2, donc ici de D5 à la dernière utilisée. La propriété Value du Range obtenu est un tableau d'éléments de type Variant, qui est affecté à TE.

ReDim TS(1 To UBound(TE, 1) * UBound(TE, 2), 1 To 6)
Donne ses dimensions au tableau dynamique. UBound(TE, 1) représente le nombre de lignes de TE, UBound(TE, 2) le nombre de colonnes.
For CE = 5 To UBound(TE, 2) - 1
For LE = 3 To UBound(TE, 1) - 1
If TE(LE, CE) <> 0 Then
' Est ce la que je dois mettre le resultat a savoir si <>o donc = Ask donc envoyer la boucle jusqu'a ce que le resultat soit >= $j$1

End Sub

cordialement

Lao31
 

Dranreb

XLDnaute Barbatruc
Re : realisation d'une macro avec plusieurs variables

Bonjour.

Oui, mais là il n'y a pas à parcourir d'abord avec CE les colonnes d'entrées du tableau TE puisqu'il n'y a qu'un jeu de renseignements à des colonnes précises. Par contre il y a peut être à parcourir après, avec CS, les colonne du tableau de sortie puisque vous voulez en ajoutez une dès que vous trouvez du "ask" ou du "bid".
 

lao31

XLDnaute Occasionnel
Re : realisation d'une macro avec plusieurs variables

Bonjour le forum, Dranreb

J'avance pas a pas c'est le moins qu'on puisse dire,
j'ai enlever une colonne en mettant les ask et bid sur la meme colonne.
ensuite j'ai tenu compte de votre post precedent a savoir enlever les CE et si j'ai bien compris CS devrait etre les colonnes de mes resutats.
est ce que CS = CS +1 est totalement idiot ou est ce la que je dois rajouter une variable pour passer a la colonne suivante de CS quand un j'ai atteint ma val de CS >=40 et que je rencontre un autre ask ou bid ?

je joint on dernier fichier avec les dernieres mcro, j'ai peur qu'une chatte n'y retrouve pas ses chatons.

Cordialement
Lao31
 

Pièces jointes

  • cumullast4.xlsm
    85.7 KB · Affichages: 55
  • cumullast4.xlsm
    85.7 KB · Affichages: 43

Dranreb

XLDnaute Barbatruc
Re : realisation d'une macro avec plusieurs variables

Comme c'est le plus facile.
Peut être un LS1 pour explorer de 1 à Ubound(TE, 1) et trouver les "ask" et "bid" dans TE(LS1, 5) puis un LS2 pour explorer de LS1 à Ubound(TE, 1) et ranger ce qu'il faut dans TS(LS2, CS) jusqu'a rencontrer un condition d'abandon de cette seconde boucle par Exit For.
 

lao31

XLDnaute Occasionnel
Re : realisation d'une macro avec plusieurs variables

Bonjour le forum, Dranreb

J'ai beau chercher, je n'avance pas, il parait evident qu'en passant par les tableaux, cela serait certainement mieux voire plus rapide voire encore plus evolutif. Il s'avere que je n'y arrive pas, ce n'est pas que j'y mette de la mauvaise volonté, mais un moment ou l'autre mon cerveau bloque, je m'enerve j'essai des choses et plouf retour case depart.
Alors avec deux autres macro ( ask et bid ) j'arrive la ou je voudrai en venir, mais evidemment c'est ridicule car pour le fichier exemple joint cela fonctionne, mais pour un fichier avec enormement de ligne cela demande un temps fou et je sais biensur que c'est idiot, mais dois je me former pour enfin realiser mon projet et cela vu deja le temps passé montre que je suis peut etre pas a la hauteur de cette tache ou on me donnes un coup de main car nous y sommes presque et apres je cherche a comprendre comment cela a été fait.
1/ la solution 1 a savoirapprendre est certainement a long terme la meilleure, pour cela faut du temps et de la volonté car je ne fais pas que cela non plus.
2/ la solution 2 a savoir qu'on me le fasse en sachant que quand meme j'ai passé beaucoup de temps pour essayer de comprendre parfois je crois y etre et je suis sur que nous sommes tres pres de la solution qui me conviendrais, mais oila bientot 1 mois que j'y suis dessus, et j'ai presque fais le tout a la main.
je partage l'avis de brassens dans sa chanson quand on est c.. on est c.., mais j'aimerai tellement ne pas l'etre.
alors svp soit donnez moi la solution avec des tableaux ceux qui semble la meilleure, soit voyez avec mes macro bid et ask n'en faire qu'une et surtout qu'apres le resultat voulu trouvé ( a savoir 40 pour l'exemple) je passe a une autre colonne pour un autre ask ou bid.
j'ai l'impression d'être trop prolixe et evidement je me noie.
Dranreb svp, je compte sur votre coté altruiste pour m'enlever cette épine du pied.
Cordialement
Lao31
 

Pièces jointes

  • cumullast4.xlsm
    76 KB · Affichages: 38
  • cumullast4.xlsm
    76 KB · Affichages: 41

Dranreb

XLDnaute Barbatruc
Re : realisation d'une macro avec plusieurs variables

Bonjour.
La première erreur que je vois c'est "essai" utilisé comme objet Worksheet alors qu'il n'existe pas. Il y a bien une feuille Excel qui porte ce nom, mais l'objet Worksheet qui la représente s'appelle "Feuil1" et non pas "essai".
 

Discussions similaires

Statistiques des forums

Discussions
312 977
Messages
2 094 107
Membres
105 938
dernier inscrit
Cubernicus