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

Dranreb

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

En enlevant les S derrière les C (il n'y a pas à distinguer les colonnes d'entrée et de sortie, CE n'était pas utilisé, et C ne sera toujours que pour la sortie, comme c'était déjà le cas pour L), ça donne ça :
VB:
Sub Colonne1()
Const CMaxAbs = 100
Dim Limite As Double, TE(), TS(), L As Long, C As Long, CMax As Long, CLibre As Long, _
    LDéb(1 To CMaxAbs) As Long, TypeCalcul(1 To CMaxAbs) As String
Limite = Feuil1.[I1].Value
TE = Intersect(Feuil1.[A3:G1048576], Feuil1.UsedRange).Value
ReDim TS(1 To UBound(TE, 1), 1 To CMaxAbs)
For L = 1 To UBound(TE, 1)
   If (TE(L, 5)) <> "" Then
      For C = 1 To CMax
         CLibre = CLibre Mod CMax + 1
         If TypeCalcul(CLibre) = "" Then Exit For
         Next C
      If C > CMax Then
         If C > CMaxAbs Then MsgBox "Impossible de mener plus de " & CMaxAbs _
            & " calculs simulatanément.", vbCritical, "Colonne1": Exit Sub
         CMax = C
      Else: C = CLibre: End If
      LDéb(C) = L
      TypeCalcul(C) = TE(L, 5)
      End If
   For C = 1 To CMax
      Select Case TypeCalcul(C)
         Case "ask": TS(L, C) = TE(LDéb(C), 7) * (TE(L, 2) - TE(LDéb(C), 6)) * 10000
         Case "bid": TS(L, C) = TE(LDéb(C), 7) * (TE(LDéb(C), 6) - TE(L, 3)) * 10000
         End Select
      If TS(L, C) > Limite Then TypeCalcul(C) = ""
      Next C, L
Intersect(Feuil1.[H3:FDX1048576], Feuil1.UsedRange).ClearContents
Feuil1.[H3].Resize(UBound(TS, 1), CMax).Value = TS
End Sub
Vous comprenez comment ça doit marcher ?
 

lao31

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

oups nous avons du nous croiser.
J'ai toujours le probleme de memoire insuffisante.
et debugage sur la ligne en gras ci dessous:

Sub Colonne1()
Const CMaxAbs = 100
Dim Limite As Double, TE(), TS(), L As Long, C As Long, CMax As Long, CLibre As Long, _
LDéb(1 To CMaxAbs) As Long, TypeCalcul(1 To CMaxAbs) As String
Limite = Feuil1.[I1].Value
TE = Intersect(Feuil1.[A3:G1048576], Feuil1.UsedRange).Value

ReDim TS(1 To UBound(TE, 1), 1 To CMaxAbs)

For L = 1 To UBound(TE, 1)
If (TE(L, 5)) <> "" Then
For C = 1 To CMax
CLibre = CLibre Mod CMax + 1
If TypeCalcul(CLibre) = "" Then Exit For
Next C
If C > CMax Then
If C > CMaxAbs Then MsgBox "Impossible de mener plus de " & CMaxAbs _
& " calculs simulatanément.", vbCritical, "Colonne1": Exit Sub
CMax = C
Else: C = CLibre: End If
LDéb(C) = L
TypeCalcul(C) = TE(L, 5)
End If
For C = 1 To CMax
Select Case TypeCalcul(C)
Case "ask": TS(L, C) = TE(LDéb(C), 7) * (TE(L, 2) - TE(LDéb(C), 6)) * 10000
Case "bid": TS(L, C) = TE(LDéb(C), 7) * (TE(LDéb(C), 6) - TE(L, 3)) * 10000
End Select
If TS(L, C) > Limite Then TypeCalcul(C) = ""
Next C, L
Intersect(Feuil1.[H3:FDX1048576], Feuil1.UsedRange).ClearContents
Feuil1.[H3].Resize(UBound(TS, 1), CMax).Value = TS
End Sub

j'apprecie votre courage mais est ce que nous nous en sortirons ?
 

lao31

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

Re le forum, Dranreb,

Cela fonctionne quand je supprime des lignes

bravo en tout cas car effectivement en faisait de cette maniere nous avons besoin de moins de colonne.
reste a savoir maintenant combien de lignes je devrais supprimer pour travailler sur un maximum de lignes

cordialement
 

Dranreb

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

Essayez en réduisant CMaxAbs. Il le faut juste au pire nombre de calculs possibles devant pouvoir être menés en même temps.
Mettez des balise highlight=vb et /highlight autour des codes que vous reproduisez pour préserver l'indentation.
 
Dernière édition:

lao31

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

highlight=vb et /highlight

Const CMaxAbs = 135 ' >= a 135 message " memoire insuffisante.
Const CMaxAbs = 134 ' <= 134 j'ai message impossible de mener plus de 134 calculs simultanement, j'ai essaye même a = 2 pour controle et j'ai impossible calcul 2 simultanement.

etonant no ?
 

Dranreb

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

Est-ce normal qu'il y ait plus de 100 calculs qui n'ont pas rencontré la condition d'arrêt ?
Il n'y a pas de commande pour installer ces balises, j'ignore pourquoi. Tapez les entre crochets droits.
 

lao31

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

Bonjour le forum, Dranreb

Theriquement non,je ne devrais pas avoir plus de 100 calculs. Mais je crois comprendre le pourquoi.
j'avais plusieurs bids et asks de la meme valeur, j'en deduis que lui ne comprenant pas evidemment ils les calcules, donc c'est pas impossible que cela fasse sauter la memoire.
Je vais ce matin essayer de supprimer ces valeurs ( qui malgré tout me seraient neccessaires ) au moins j'en aurai le coeur net.
Peut être aussi , il serait bon de mettre des conditions telles que si >(a certain nombre a determiner) de bids ou asks en calcul, il ne prenne plus les bids ou asks suivant jusqu'a ce que ce nombre soit atteint.
j'essai d'être plus clair. s'il y a par exemple + de 10 bids et 10 asks on ne fais plus e calcul et des qu'une limite est atteinte, on recommence le calcul.
En tout cas j'ai bien progressé et merçi pour votre soutien, aide et patience. Car pour les explications, je suis plutot un colis.
Cordialement
Lao31
 

Discussions similaires

Statistiques des forums

Discussions
312 503
Messages
2 089 053
Membres
104 013
dernier inscrit
VELONDAHY Mickaël