bonsoir Thierry, bonsoir forum,
Ce que je cherche à réaliser : conversion de dates daily en weekly sur 42 feuilles dans un même classeur.
J'ai examiné une possibilité d'utilisation de la feuille "valeurs hebdo" dans le fichier joint "formule Zip" à l'adresse : http://www.excel-downloads.com/html/French/forum/messages/1_12997_12997.htm
J'y ai collé les historiques du cac40, du début janvier 200 au 9/01/03 (fichier de 219 Ko)
Inconvénients :
- les calculs intermédiaires ne se mettent pas à jour automatiquement si on ajoute des historiques en dernière ligne colonnes I et J
- il faut 1 calcul par feuille : 219 Ko x 42, la solution n'est pas raisonnable
j'ai donc envisagé de convertir toutes les formules excel en vba, en utilisant l'enregistreur de macros…
la macro fait 5733 Ko… beaucoup plus que la macro qui me fait le téléchargement et le calcul des rendemens quotidiens des 40 titres !!!
bon, mais j'ai dû louper quelque chose, puisque le code vba recrée les formules excel dans les cellules… et les calculs consomment de la mémoire…
il va donc falloir que je transforme toutes les formules en vba, je crois… ça sera pour la semaine prochaine… je n'ai pas fini parce que pour moi le langage excel, c'est un peu comme du Vénusien…
Mes formules vba:
J'ai lié les macros dans Zip SEM avec Call : fonctionnement rapide, sans PB
Puis j'ai ajouté :
Sub GuySem()
'
' GuySem Macro
' Macro enregistrée le 09/01/2003 par Packard Bell NEC Inc.
'
'
Range("C2").Select
ActivecellFormulaR1C1 = "=IF(R2C3<>"""",MIN(RC[-4]:R[389]C[-4]),"""")"
End Sub
Sub EnGtrois()
'
' EnGtrois Macro
' Macro enregistrée le 10/01/2003 par Packard Bell NEC Inc.
'
'
'Range("G3").Select
'Set Plage = Range(Selection, Selection.End(xlDown)).Offset(-1, 0)
'Plage.FormulaR1C1 = _
' "=IF(R2C3<>"""",IF(R[-1]C<MAX(R2C3:R4000C3),R[-1]C+1,""""),"""")"
ActiveCell.FormulaR1C1 = "=IF(R2C3<>"""",MIN(RC[-4]:R[389]C[-4]),"""")"
End Sub
Sub hacheDEUX()
'
' hacheDEUX Macro
' Macro enregistrée le 09/01/2003 par Packard Bell NEC Inc.
'
'
Range("H2").Select
Set Plage = Range(Selection, Selection.End(xlDown))
'ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]<>"""",INDIRECT(ADDRESS(MATCH(RC[-1],R400C3,1),COLUMN(RC[-7]))),"""")"
Plage.FormulaR1C1 = "=IF(RC[-1]<>"""",INDIRECT(ADDRESS(MATCH(RC[-1],R1C3:R400C3,1),COLUMN(RC[-7]))),"""")"
'Range("H3").Select
End Sub
Sub EnIdeux()
'
' EnIdeux Macro
' Macro enregistrée le 09/01/2003 par Packard Bell NEC Inc.
'
'
Range("I2").Select
Set Plage = Range(Selection, Selection.End(xlDown))
'ActiveCell.FormulaR1C1 =
Plage.FormulaR1C1 = "=IF(AND(RC[-2]<>"""",COUNTIF(R2C3:R400C3,RC[-2])>0),SUMIF(RC[-6]:R400C3,RC[-2],RC[-7])/COUNTIF(RC[-6]:R400C3,RC[-2]),"""")"
End Sub
….je peux faire comment pour gagner de la mémoire et du temps de calcul ???
Merci
albert