OVH Cloud OVH Cloud

optimisation déclaration matrice

8 réponses
Avatar
Elicend_News
Salut

pour faire suites à des développement que j'ai fait les semaines
précédentes, avec notamment l'aide de plusieurs personnes ici, je me trouve
devant qquechose de bizarre : j'ai essayé 2 facons de déclarer différentes
matrices à chaque fois ayant la meme taille, la premiere, en faisant une
boucle et en incrémentant toutes les matrices, et la seconde, en faisant une
boucle par matrice... a premiere vue, la premiere devrait etre la plus
rapide, mais en ajoutant un chrono en début et fin de macro, j'obtiens des
résultats tres differents et c'est la seconde méthode qui est la plus rapide
! ca vous parait logique ?

ci joint les déclaration, la version ou je ne fais qu'une boucle est
commentée et c'est la version a plusieurs boucles qui est fonctionnelle

d'avance merci pour vos commentaires ;)
elicend

'--------------------------------------------------
'Déclaration et mise en forme de toute les matrices
'--------------------------------------------------

'i = 0
'toutes les matrices ont le meme nombre de lignes
'For Each cellule In Sheets("stock").Range(colonne1 & "11:" & colonne1 &
var02)

'Stock
'ReDim Preserve stock(0 To i)
'stock(i) = Sheets("stock").Cells(i + 11, var01 + 2).Value

'reappro
'ReDim Preserve reappro(0 To i)
'reappro(i) = Sheets("reappro").Cells(i + 11, var01 + 2).Value

'commandes pays A
'ReDim Preserve comA(0 To i)
'comA(i) = Sheets("comA").Cells(i + 11, var01 + 2).Value

'commandes pays B
'ReDim Preserve comB(0 To i)
'comB(i) = Sheets("comB").Cells(i + 11, var01 + 2).Value

'commandes pays C
'ReDim Preserve comC(0 To i)
'comC(i) = Sheets("comC").Cells(i + 11, var01 + 2).Value

'ventes pays A
'ReDim Preserve ventA(0 To i)
'ventA(i) = Sheets("venA").Cells(i + 11, var01 + 2).Value

'ventes pays B
'ReDim Preserve ventB(0 To i)
'ventB(i) = Sheets("venB").Cells(i + 11, var01 + 2).Value

'ventes pays C
'ReDim Preserve ventC(0 To i)
'ventC(i) = Sheets("venC").Cells(i + 11, var01 + 2).Value

'reliquat pays A
'ReDim Preserve reliA(0 To i)
'reliA(i) = Sheets("reliA").Cells(i + 11, var01 + 2).Value

'reliquat pays B
'ReDim Preserve reliB(0 To i)
'reliB(i) = Sheets("reliB").Cells(i + 11, var01 + 2).Value

'reliquat pays C
'ReDim Preserve reliC(0 To i)
'reliC(i) = Sheets("reliC").Cells(i + 11, var01 + 2)

'i = i + 1
'Next cellule

'MsgBox stock(5)
'MsgBox reappro(5)

' On commence par remplir le stock avec les données de la feuille
i = 0
For Each cellule In Sheets("stock").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve stock(0 To i)
stock(i) = cellule
i = i + 1
Next cellule

'on remplie la réappro du jour
i = 0
For Each cellule In Sheets("reappro").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reappro(0 To i)
reappro(i) = cellule
i = i + 1
Next cellule

'on remplie la commande A
i = 0
For Each cellule In Sheets("comA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comA(0 To i)
comA(i) = cellule
i = i + 1
Next cellule

'on remplie la commande B
i = 0
For Each cellule In Sheets("comB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comB(0 To i)
comB(i) = cellule
i = i + 1
Next cellule

'on remplie la commande C
i = 0
For Each cellule In Sheets("comC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comC(0 To i)
comC(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes A
i = 0
For Each cellule In Sheets("venA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventA(0 To i)
ventA(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes B
i = 0
For Each cellule In Sheets("venB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventB(0 To i)
ventB(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes C
i = 0
For Each cellule In Sheets("venC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventC(0 To i)
ventC(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats A
i = 0
For Each cellule In Sheets("reliA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliA(0 To i)
reliA(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats B
i = 0
For Each cellule In Sheets("reliB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliB(0 To i)
reliB(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats C
i = 0
For Each cellule In Sheets("reliC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliC(0 To i)
reliC(i) = cellule
i = i + 1
Next cellule




--
Encore merci / Thanks a lot !

@ plus
Elicend
________________________

Attention adresse e-mail :
inconicoAfreePOINTfr
A = @
POINT = .

8 réponses

Avatar
Daniel.M
Bonjour,

1.
Faire des "ReDim Preserve" pour chaque ligne quand tu connais déjà le nombre
total de lignes (var02+1-11), c'est pas très optimisé.
Il faudrait donc 'sortir' le ReDim Preserve à l'EXTÉRIEUR de la boucle.

ReDim Preserve stock(0 To var02-11)
For each Cellule in Sheets("stock").Range(colonne1 ...


2.
Pourquoi ne pas recourir à l'assignation unique?
Ça fait plusieurs fois qu'on te mentionne cette solution.
Pourquoi ne te convient-elle pas?

Par exemple:
Dim stock as variant
stock=Sheets("stock").Range(colonne1 & "11:" & colonne1 & var02).Value

Salutations,

Daniel M.

"Elicend_News" <inconicoAfreePOINTfr> wrote in message
news:42106891$0$12840$
Salut

pour faire suites à des développement que j'ai fait les semaines
précédentes, avec notamment l'aide de plusieurs personnes ici, je me trouve
devant qquechose de bizarre : j'ai essayé 2 facons de déclarer différentes
matrices à chaque fois ayant la meme taille, la premiere, en faisant une
boucle et en incrémentant toutes les matrices, et la seconde, en faisant une
boucle par matrice... a premiere vue, la premiere devrait etre la plus
rapide, mais en ajoutant un chrono en début et fin de macro, j'obtiens des
résultats tres differents et c'est la seconde méthode qui est la plus rapide
! ca vous parait logique ?

ci joint les déclaration, la version ou je ne fais qu'une boucle est
commentée et c'est la version a plusieurs boucles qui est fonctionnelle

d'avance merci pour vos commentaires ;)
elicend

'--------------------------------------------------
'Déclaration et mise en forme de toute les matrices
'--------------------------------------------------

'i = 0
'toutes les matrices ont le meme nombre de lignes
'For Each cellule In Sheets("stock").Range(colonne1 & "11:" & colonne1 &
var02)

'Stock
'ReDim Preserve stock(0 To i)
'stock(i) = Sheets("stock").Cells(i + 11, var01 + 2).Value

'reappro
'ReDim Preserve reappro(0 To i)
'reappro(i) = Sheets("reappro").Cells(i + 11, var01 + 2).Value

'commandes pays A
'ReDim Preserve comA(0 To i)
'comA(i) = Sheets("comA").Cells(i + 11, var01 + 2).Value

'commandes pays B
'ReDim Preserve comB(0 To i)
'comB(i) = Sheets("comB").Cells(i + 11, var01 + 2).Value

'commandes pays C
'ReDim Preserve comC(0 To i)
'comC(i) = Sheets("comC").Cells(i + 11, var01 + 2).Value

'ventes pays A
'ReDim Preserve ventA(0 To i)
'ventA(i) = Sheets("venA").Cells(i + 11, var01 + 2).Value

'ventes pays B
'ReDim Preserve ventB(0 To i)
'ventB(i) = Sheets("venB").Cells(i + 11, var01 + 2).Value

'ventes pays C
'ReDim Preserve ventC(0 To i)
'ventC(i) = Sheets("venC").Cells(i + 11, var01 + 2).Value

'reliquat pays A
'ReDim Preserve reliA(0 To i)
'reliA(i) = Sheets("reliA").Cells(i + 11, var01 + 2).Value

'reliquat pays B
'ReDim Preserve reliB(0 To i)
'reliB(i) = Sheets("reliB").Cells(i + 11, var01 + 2).Value

'reliquat pays C
'ReDim Preserve reliC(0 To i)
'reliC(i) = Sheets("reliC").Cells(i + 11, var01 + 2)

'i = i + 1
'Next cellule

'MsgBox stock(5)
'MsgBox reappro(5)

' On commence par remplir le stock avec les données de la feuille
i = 0
For Each cellule In Sheets("stock").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve stock(0 To i)
stock(i) = cellule
i = i + 1
Next cellule

'on remplie la réappro du jour
i = 0
For Each cellule In Sheets("reappro").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reappro(0 To i)
reappro(i) = cellule
i = i + 1
Next cellule

'on remplie la commande A
i = 0
For Each cellule In Sheets("comA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comA(0 To i)
comA(i) = cellule
i = i + 1
Next cellule

'on remplie la commande B
i = 0
For Each cellule In Sheets("comB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comB(0 To i)
comB(i) = cellule
i = i + 1
Next cellule

'on remplie la commande C
i = 0
For Each cellule In Sheets("comC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comC(0 To i)
comC(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes A
i = 0
For Each cellule In Sheets("venA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventA(0 To i)
ventA(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes B
i = 0
For Each cellule In Sheets("venB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventB(0 To i)
ventB(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes C
i = 0
For Each cellule In Sheets("venC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventC(0 To i)
ventC(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats A
i = 0
For Each cellule In Sheets("reliA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliA(0 To i)
reliA(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats B
i = 0
For Each cellule In Sheets("reliB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliB(0 To i)
reliB(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats C
i = 0
For Each cellule In Sheets("reliC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliC(0 To i)
reliC(i) = cellule
i = i + 1
Next cellule




--
Encore merci / Thanks a lot !

@ plus
Elicend
________________________

Attention adresse e-mail :
inconicoAfreePOINTfr
A = @
POINT = .




Avatar
Elicend_News
gloups! je suis fautif, je suis passé par dessus de la solution 2. Je vais
donc integrer ca dans une version de test pour chronométrer aussi!

merci de me l'avoir rappelé!
elicend.


"Daniel.M" a écrit dans le message de
news:eG%23lR%
Bonjour,

1.
Faire des "ReDim Preserve" pour chaque ligne quand tu connais déjà le
nombre

total de lignes (var02+1-11), c'est pas très optimisé.
Il faudrait donc 'sortir' le ReDim Preserve à l'EXTÉRIEUR de la boucle.

ReDim Preserve stock(0 To var02-11)
For each Cellule in Sheets("stock").Range(colonne1 ...


2.
Pourquoi ne pas recourir à l'assignation unique?
Ça fait plusieurs fois qu'on te mentionne cette solution.
Pourquoi ne te convient-elle pas?

Par exemple:
Dim stock as variant
stock=Sheets("stock").Range(colonne1 & "11:" & colonne1 & var02).Value

Salutations,

Daniel M.

"Elicend_News" <inconicoAfreePOINTfr> wrote in message
news:42106891$0$12840$
Salut

pour faire suites à des développement que j'ai fait les semaines
précédentes, avec notamment l'aide de plusieurs personnes ici, je me
trouve


devant qquechose de bizarre : j'ai essayé 2 facons de déclarer
différentes


matrices à chaque fois ayant la meme taille, la premiere, en faisant une
boucle et en incrémentant toutes les matrices, et la seconde, en faisant
une


boucle par matrice... a premiere vue, la premiere devrait etre la plus
rapide, mais en ajoutant un chrono en début et fin de macro, j'obtiens
des


résultats tres differents et c'est la seconde méthode qui est la plus
rapide


! ca vous parait logique ?

ci joint les déclaration, la version ou je ne fais qu'une boucle est
commentée et c'est la version a plusieurs boucles qui est fonctionnelle

d'avance merci pour vos commentaires ;)
elicend

'--------------------------------------------------
'Déclaration et mise en forme de toute les matrices
'--------------------------------------------------

'i = 0
'toutes les matrices ont le meme nombre de lignes
'For Each cellule In Sheets("stock").Range(colonne1 & "11:" & colonne1 &
var02)

'Stock
'ReDim Preserve stock(0 To i)
'stock(i) = Sheets("stock").Cells(i + 11, var01 + 2).Value

'reappro
'ReDim Preserve reappro(0 To i)
'reappro(i) = Sheets("reappro").Cells(i + 11, var01 + 2).Value

'commandes pays A
'ReDim Preserve comA(0 To i)
'comA(i) = Sheets("comA").Cells(i + 11, var01 + 2).Value

'commandes pays B
'ReDim Preserve comB(0 To i)
'comB(i) = Sheets("comB").Cells(i + 11, var01 + 2).Value

'commandes pays C
'ReDim Preserve comC(0 To i)
'comC(i) = Sheets("comC").Cells(i + 11, var01 + 2).Value

'ventes pays A
'ReDim Preserve ventA(0 To i)
'ventA(i) = Sheets("venA").Cells(i + 11, var01 + 2).Value

'ventes pays B
'ReDim Preserve ventB(0 To i)
'ventB(i) = Sheets("venB").Cells(i + 11, var01 + 2).Value

'ventes pays C
'ReDim Preserve ventC(0 To i)
'ventC(i) = Sheets("venC").Cells(i + 11, var01 + 2).Value

'reliquat pays A
'ReDim Preserve reliA(0 To i)
'reliA(i) = Sheets("reliA").Cells(i + 11, var01 + 2).Value

'reliquat pays B
'ReDim Preserve reliB(0 To i)
'reliB(i) = Sheets("reliB").Cells(i + 11, var01 + 2).Value

'reliquat pays C
'ReDim Preserve reliC(0 To i)
'reliC(i) = Sheets("reliC").Cells(i + 11, var01 + 2)

'i = i + 1
'Next cellule

'MsgBox stock(5)
'MsgBox reappro(5)

' On commence par remplir le stock avec les données de la feuille
i = 0
For Each cellule In Sheets("stock").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve stock(0 To i)
stock(i) = cellule
i = i + 1
Next cellule

'on remplie la réappro du jour
i = 0
For Each cellule In Sheets("reappro").Range(colonne1 & "11:" & colonne1
&


var02)
ReDim Preserve reappro(0 To i)
reappro(i) = cellule
i = i + 1
Next cellule

'on remplie la commande A
i = 0
For Each cellule In Sheets("comA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comA(0 To i)
comA(i) = cellule
i = i + 1
Next cellule

'on remplie la commande B
i = 0
For Each cellule In Sheets("comB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comB(0 To i)
comB(i) = cellule
i = i + 1
Next cellule

'on remplie la commande C
i = 0
For Each cellule In Sheets("comC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comC(0 To i)
comC(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes A
i = 0
For Each cellule In Sheets("venA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventA(0 To i)
ventA(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes B
i = 0
For Each cellule In Sheets("venB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventB(0 To i)
ventB(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes C
i = 0
For Each cellule In Sheets("venC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventC(0 To i)
ventC(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats A
i = 0
For Each cellule In Sheets("reliA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliA(0 To i)
reliA(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats B
i = 0
For Each cellule In Sheets("reliB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliB(0 To i)
reliB(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats C
i = 0
For Each cellule In Sheets("reliC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliC(0 To i)
reliC(i) = cellule
i = i + 1
Next cellule




--
Encore merci / Thanks a lot !

@ plus
Elicend
________________________

Attention adresse e-mail :
inconicoAfreePOINTfr
A = @
POINT = .








Avatar
Elicend_News
bonjour,

j'ai fait le test ce matin, mais ca me renvoie une erreur... pourtant j'ai
calqué ta synthaxe :

dim stock, reappro,... as variant

'--------------------------------------------------
'Déclaration et mise en forme de toute les matrices
'--------------------------------------------------
stock = Sheets("stock").Range(colonne1 & "11:" & colonne1 & var02).Value
reappro = Sheets("reappro").Range(colonne1 & "11:" & colonne1 & var02).Value
comA = Sheets("comA").Range(colonne1 & "11:" & colonne1 & var02).Value
comB = Sheets("comB").Range(colonne1 & "11:" & colonne1 & var02).Value
comC = Sheets("comC").Range(colonne1 & "11:" & colonne1 & var02).Value
ventA = Sheets("venA").Range(colonne1 & "11:" & colonne1 & var02).Value
ventB = Sheets("venB").Range(colonne1 & "11:" & colonne1 & var02).Value
ventC = Sheets("venC").Range(colonne1 & "11:" & colonne1 & var02).Value
reliA = Sheets("reliA").Range(colonne1 & "11:" & colonne1 & var02).Value
reliB = Sheets("reliB").Range(colonne1 & "11:" & colonne1 & var02).Value
reliC = Sheets("reliC").Range(colonne1 & "11:" & colonne1 & var02).Value

'--------------------------------------------------

erreur 9, l'indice n'appartient pas à la selection, si je fais un msgbox
stock(1) par exemple, c'est pareil :(
étrange non ?

sinon c'est sur ca raccourci considérablement le code :)

elicend.

"Daniel.M" a écrit dans le message de
news:eG%23lR%
Bonjour,

1.
Faire des "ReDim Preserve" pour chaque ligne quand tu connais déjà le
nombre

total de lignes (var02+1-11), c'est pas très optimisé.
Il faudrait donc 'sortir' le ReDim Preserve à l'EXTÉRIEUR de la boucle.

ReDim Preserve stock(0 To var02-11)
For each Cellule in Sheets("stock").Range(colonne1 ...


2.
Pourquoi ne pas recourir à l'assignation unique?
Ça fait plusieurs fois qu'on te mentionne cette solution.
Pourquoi ne te convient-elle pas?

Par exemple:
Dim stock as variant
stock=Sheets("stock").Range(colonne1 & "11:" & colonne1 & var02).Value

Salutations,

Daniel M.

"Elicend_News" <inconicoAfreePOINTfr> wrote in message
news:42106891$0$12840$
Salut

pour faire suites à des développement que j'ai fait les semaines
précédentes, avec notamment l'aide de plusieurs personnes ici, je me
trouve


devant qquechose de bizarre : j'ai essayé 2 facons de déclarer
différentes


matrices à chaque fois ayant la meme taille, la premiere, en faisant une
boucle et en incrémentant toutes les matrices, et la seconde, en faisant
une


boucle par matrice... a premiere vue, la premiere devrait etre la plus
rapide, mais en ajoutant un chrono en début et fin de macro, j'obtiens
des


résultats tres differents et c'est la seconde méthode qui est la plus
rapide


! ca vous parait logique ?

ci joint les déclaration, la version ou je ne fais qu'une boucle est
commentée et c'est la version a plusieurs boucles qui est fonctionnelle

d'avance merci pour vos commentaires ;)
elicend

'--------------------------------------------------
'Déclaration et mise en forme de toute les matrices
'--------------------------------------------------

'i = 0
'toutes les matrices ont le meme nombre de lignes
'For Each cellule In Sheets("stock").Range(colonne1 & "11:" & colonne1 &
var02)

'Stock
'ReDim Preserve stock(0 To i)
'stock(i) = Sheets("stock").Cells(i + 11, var01 + 2).Value

'reappro
'ReDim Preserve reappro(0 To i)
'reappro(i) = Sheets("reappro").Cells(i + 11, var01 + 2).Value

'commandes pays A
'ReDim Preserve comA(0 To i)
'comA(i) = Sheets("comA").Cells(i + 11, var01 + 2).Value

'commandes pays B
'ReDim Preserve comB(0 To i)
'comB(i) = Sheets("comB").Cells(i + 11, var01 + 2).Value

'commandes pays C
'ReDim Preserve comC(0 To i)
'comC(i) = Sheets("comC").Cells(i + 11, var01 + 2).Value

'ventes pays A
'ReDim Preserve ventA(0 To i)
'ventA(i) = Sheets("venA").Cells(i + 11, var01 + 2).Value

'ventes pays B
'ReDim Preserve ventB(0 To i)
'ventB(i) = Sheets("venB").Cells(i + 11, var01 + 2).Value

'ventes pays C
'ReDim Preserve ventC(0 To i)
'ventC(i) = Sheets("venC").Cells(i + 11, var01 + 2).Value

'reliquat pays A
'ReDim Preserve reliA(0 To i)
'reliA(i) = Sheets("reliA").Cells(i + 11, var01 + 2).Value

'reliquat pays B
'ReDim Preserve reliB(0 To i)
'reliB(i) = Sheets("reliB").Cells(i + 11, var01 + 2).Value

'reliquat pays C
'ReDim Preserve reliC(0 To i)
'reliC(i) = Sheets("reliC").Cells(i + 11, var01 + 2)

'i = i + 1
'Next cellule

'MsgBox stock(5)
'MsgBox reappro(5)

' On commence par remplir le stock avec les données de la feuille
i = 0
For Each cellule In Sheets("stock").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve stock(0 To i)
stock(i) = cellule
i = i + 1
Next cellule

'on remplie la réappro du jour
i = 0
For Each cellule In Sheets("reappro").Range(colonne1 & "11:" & colonne1
&


var02)
ReDim Preserve reappro(0 To i)
reappro(i) = cellule
i = i + 1
Next cellule

'on remplie la commande A
i = 0
For Each cellule In Sheets("comA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comA(0 To i)
comA(i) = cellule
i = i + 1
Next cellule

'on remplie la commande B
i = 0
For Each cellule In Sheets("comB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comB(0 To i)
comB(i) = cellule
i = i + 1
Next cellule

'on remplie la commande C
i = 0
For Each cellule In Sheets("comC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve comC(0 To i)
comC(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes A
i = 0
For Each cellule In Sheets("venA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventA(0 To i)
ventA(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes B
i = 0
For Each cellule In Sheets("venB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventB(0 To i)
ventB(i) = cellule
i = i + 1
Next cellule

'on remplie les ventes C
i = 0
For Each cellule In Sheets("venC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve ventC(0 To i)
ventC(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats A
i = 0
For Each cellule In Sheets("reliA").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliA(0 To i)
reliA(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats B
i = 0
For Each cellule In Sheets("reliB").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliB(0 To i)
reliB(i) = cellule
i = i + 1
Next cellule

'on remplie les reliquats C
i = 0
For Each cellule In Sheets("reliC").Range(colonne1 & "11:" & colonne1 &
var02)
ReDim Preserve reliC(0 To i)
reliC(i) = cellule
i = i + 1
Next cellule




--
Encore merci / Thanks a lot !

@ plus
Elicend
________________________

Attention adresse e-mail :
inconicoAfreePOINTfr
A = @
POINT = .








Avatar
Daniel.M
Salut,

Pour voir la troisième ligne de stocks :

Msgbox stock(3,1)

Il faut que tu saches que stock devient un tableau à 2 dimensions (la deuxième
dimension est de 1, parce qu'il y a UNE colonne).

Exécute le code pas à pas, puis affiche la vue sur tes variables (dans l'éditeur
VBA) et regarde ce qu'elles contiennent après les assignations.

Salutations,

Daniel M.


"Elicend_News" <inconicoAfreePOINTfr> wrote in message
news:4211c500$0$352$
bonjour,

j'ai fait le test ce matin, mais ca me renvoie une erreur... pourtant j'ai
calqué ta synthaxe :

dim stock, reappro,... as variant

'--------------------------------------------------
'Déclaration et mise en forme de toute les matrices
'--------------------------------------------------
stock = Sheets("stock").Range(colonne1 & "11:" & colonne1 & var02).Value
reappro = Sheets("reappro").Range(colonne1 & "11:" & colonne1 & var02).Value
comA = Sheets("comA").Range(colonne1 & "11:" & colonne1 & var02).Value
comB = Sheets("comB").Range(colonne1 & "11:" & colonne1 & var02).Value
comC = Sheets("comC").Range(colonne1 & "11:" & colonne1 & var02).Value
ventA = Sheets("venA").Range(colonne1 & "11:" & colonne1 & var02).Value
ventB = Sheets("venB").Range(colonne1 & "11:" & colonne1 & var02).Value
ventC = Sheets("venC").Range(colonne1 & "11:" & colonne1 & var02).Value
reliA = Sheets("reliA").Range(colonne1 & "11:" & colonne1 & var02).Value
reliB = Sheets("reliB").Range(colonne1 & "11:" & colonne1 & var02).Value
reliC = Sheets("reliC").Range(colonne1 & "11:" & colonne1 & var02).Value

'--------------------------------------------------

erreur 9, l'indice n'appartient pas à la selection, si je fais un msgbox
stock(1) par exemple, c'est pareil :(
étrange non ?

sinon c'est sur ca raccourci considérablement le code :)

elicend.


Avatar
Elicend_News
merci ;)

donc si je suis je vais devoir en utilisant cette optimisation, corriger
tous mes calculs en remplacant par exemple
stock(j) = stock(j)-comA(j)

par
stock(j,1) = stock(j,1)-comA(j,1)

ca c'est uen correction assez fastidieuse, je vais travailler sur mon
interface cette fin d'apres midi et je me lancerai la dedans demain à l'aube
;)

merci beaucoup pour toute ton aide !!

elicend

"Daniel.M" a écrit dans le message de
news:
Salut,

Pour voir la troisième ligne de stocks :

Msgbox stock(3,1)

Il faut que tu saches que stock devient un tableau à 2 dimensions (la
deuxième

dimension est de 1, parce qu'il y a UNE colonne).

Exécute le code pas à pas, puis affiche la vue sur tes variables (dans
l'éditeur

VBA) et regarde ce qu'elles contiennent après les assignations.

Salutations,

Daniel M.


"Elicend_News" <inconicoAfreePOINTfr> wrote in message
news:4211c500$0$352$
bonjour,

j'ai fait le test ce matin, mais ca me renvoie une erreur... pourtant
j'ai


calqué ta synthaxe :

dim stock, reappro,... as variant

'--------------------------------------------------
'Déclaration et mise en forme de toute les matrices
'--------------------------------------------------
stock = Sheets("stock").Range(colonne1 & "11:" & colonne1 & var02).Value
reappro = Sheets("reappro").Range(colonne1 & "11:" & colonne1 &
var02).Value


comA = Sheets("comA").Range(colonne1 & "11:" & colonne1 & var02).Value
comB = Sheets("comB").Range(colonne1 & "11:" & colonne1 & var02).Value
comC = Sheets("comC").Range(colonne1 & "11:" & colonne1 & var02).Value
ventA = Sheets("venA").Range(colonne1 & "11:" & colonne1 & var02).Value
ventB = Sheets("venB").Range(colonne1 & "11:" & colonne1 & var02).Value
ventC = Sheets("venC").Range(colonne1 & "11:" & colonne1 & var02).Value
reliA = Sheets("reliA").Range(colonne1 & "11:" & colonne1 & var02).Value
reliB = Sheets("reliB").Range(colonne1 & "11:" & colonne1 & var02).Value
reliC = Sheets("reliC").Range(colonne1 & "11:" & colonne1 & var02).Value

'--------------------------------------------------

erreur 9, l'indice n'appartient pas à la selection, si je fais un msgbox
stock(1) par exemple, c'est pareil :(
étrange non ?

sinon c'est sur ca raccourci considérablement le code :)

elicend.






Avatar
Daniel.M
Bonjour,

donc si je suis je vais devoir en utilisant cette optimisation, corriger
tous mes calculs en remplacant par exemple
stock(j) = stock(j)-comA(j)

par
stock(j,1) = stock(j,1)-comA(j,1)

ca c'est uen correction assez fastidieuse, je vais travailler sur mon
interface cette fin d'apres midi et je me lancerai la dedans demain à l'aube
;)


Pour éviter de créer un object à 2 dimensions, il y a ça (mais le Transpose
ralentit l'exécution un peu). Moi, je préfère la méthode 'clean' sans Transpose.

comA = Application.Transpose(Sheets("comA"). _
Range(colonne1 & "11:" & colonne1 & var02).Value)

Salutations,

Daniel M.

Avatar
Elicend_News
ok, je vais l'essayer aussi ;)
ca a l'avantage de ne pas impacter le reste des calculs contrairement à
l'autre méthode ou il faut ajouter ,1 à chaque ligne quasiment !

je te remercie !! j'ai espoir ! un jour j'en saurait autant que toi ;)


"Daniel.M" a écrit dans le message de
news:%
Bonjour,

donc si je suis je vais devoir en utilisant cette optimisation, corriger
tous mes calculs en remplacant par exemple
stock(j) = stock(j)-comA(j)

par
stock(j,1) = stock(j,1)-comA(j,1)

ca c'est uen correction assez fastidieuse, je vais travailler sur mon
interface cette fin d'apres midi et je me lancerai la dedans demain à
l'aube


;)


Pour éviter de créer un object à 2 dimensions, il y a ça (mais le
Transpose

ralentit l'exécution un peu). Moi, je préfère la méthode 'clean' sans
Transpose.


comA = Application.Transpose(Sheets("comA"). _
Range(colonne1 & "11:" & colonne1 & var02).Value)

Salutations,

Daniel M.





Avatar
Elicend_News
j'ai tenté la version avec transpose ! pas eu le temps de faire mieux!
heureusement tout de meme que j'avais obtenu un délais supplémentaire pour
le développement !!!

bon les résultats sont assez encourageant ! je tombe à 6 minutes de calculs
par mois, incluant 0,8 minutes pour l'application de ma table d'appro (c'est
tres long au vue du reste, mais c'est pas le plus important dans le calcul),
et 0,1 minute de génération de graphique (difficilement compressible)...
donc ce qui tournait dans ma premiere version en une heure pour une journée
d'historique, tourne maintenant en 3 minutes pour 31 jours d'historique (6
minutes au début car j'ai ajouter d'autres calculs dans la moulinette :)
soit une accélération de 31 x 20 = 620 !!!! (il y a donc un kit turbo + un
kit noos + un kit pédalier shimano surdimmensionner + le vent dans le dos)

j'ai gagné 2 bonnes minutes en utilisant le transpose par rapport a la
boucle pour définir chaque matrice, par contre, attention, mais je pense que
c'etait du à mes boucles qui tournait à partir de 0, la méthode transpose me
cré des matrice allant de 1 à 30 et non de 0 à 29 comme avant ce qui m'a
joué quelques tours au niveaux des résultats finaux (et aussi je me reperait
en calculant une adresse de ligne en prenant un j, et je me suis mis à tous
décaller)

c'est la premiere fois que j'integre un chrono dans mon appli, mais c'est
vraiment hyper simple à mettre en place, et ca donne des indications trés
interessantes !!

enfin ca tourne, et ca commence à tourner vite, meme si je suis encore loin
des 10 secondes que tu présents ;)

jte tiens au courant pour la suite !

elicend

Pour éviter de créer un object à 2 dimensions, il y a ça (mais le
Transpose

ralentit l'exécution un peu). Moi, je préfère la méthode 'clean' sans
Transpose.


comA = Application.Transpose(Sheets("comA"). _
Range(colonne1 & "11:" & colonne1 & var02).Value)