VisualBasic : formules sur plusieurs feuilles

NNBBVV Messages postés 7 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai 39 feuilles (Nom des feuilles: Feuil1, Feuil2,Feuil3,...) avec une disposition totalement identique.
Chaque feuille contient le bilan comptable d'une entreprise durant 6 années (de 1999à2004).
Exemple Feuille1 (Entreprise 1): Cells(2,1)

1 2 3 4
A 31/12/2004 31/12/2003 31/12/2002
B Dette financière 344 300 300
C Dette commercial. 100 100 50
D Dette totale 444 400 350

Sur la 40ème feuilles je souhaiterai réaliser différents ratios.
Il faudrait, par exemple, pour chaque firme et pour chaque année calculer le ratio 1:
Firme 1_Ratio 1 = dette financière/dettes totales = Cells(2,2) / Cells(4,2)

Je souhaiterai avoir le résultat suivant sur la feuille 40:

1 2 3 4
A 31/12/2004 31/12/2003 31/12/2002
B Firme 1_Ratio 1 0,774 0,75 0,857
C Firme 1_Ratio 2 .... ... ...
D Firme 2_Ratio 1 ... ... ...

Mon idée de départ (très peu élaborée!!!) était la suivante:

Function Macro1()

Dim dfLT As Long
Dim d As Long

For i = 1 To 39
For j = 2 To 7

Worksheets(i).Cells(j, 341) = dfLT
Worksheets(i).Cells(j, 339) = d
Worksheets(40).Cells(i + 1, j) = dfLT / d

Next j
Next i

End Function

J'espère être sur le bon forum
Si vous avez une solution sans VBA, je la prends aussi, mais je pense pas que ce soit possible!??
Je vous remercie d'avance,
L'homme qui a surestimé ses capacités en VBA :(((((((
A voir également:

2 réponses

michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour

J'aurais plutôt écris

subMacro1()
dim i as long, j as long
Dim dfLT As Long 'es tu sûr qu'il s'agit d'un nombre entier
Dim d As Long   'es tu sûr qu'il s'agit d'un nombre entier

For i = 1 To 39
For j = 2 To 7

dfLT=Worksheets(i).Cells(j, 341) 
d=Worksheets(i).Cells(j, 339) 
Worksheets(40).Cells(i + 1, j) = dfLT / d

Next j
Next i

End sub

--
:-x
0
NNBBVV Messages postés 7 Statut Membre
 
dfLT et d = entier
Par contre, j'ai essayé de faire tourner mais ily a un message d'erreur
"Dépassement de capacité"
Cela signifie?????

Sub est-il capable de réaliser un calcul??
Je pensais que c'était avec "Function".

Merci pour ton aide,
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
bonjour,

39 onglets, cellules à la ligne 340 et colonne7, soit environ une surface de 2400 cellules*39
si ton classeur pèse plusieurs Mo (plusieurs= dépend de la ram)... il est "précaire"

une fonction opère un calcul sur une cellule mais peut être installée dans une procédure
par ex dans ton cas (non testée)

function ratio(onglet as byte, dflt as range, d as range) as single
with sheets(onglet)
ratio=.dflt.value/.d.value
end with
end ratio

sub macro1()
dim i as byte, j as byte

For i= 1 to 39
For j=2 to 7
sheets(40).cells(i+1,j)= ratio( i,cells(j,341),cells(j,339))
next j
next i

end sub

dans ce cas, l'utilité de la fonction n'est pas prouvée. Tu pourrais cependant te placer dans la feuil40 et utiliser la fonction avec des copier-coller mais...
On créée des fonctions pour se constituer une bibliothèque dans la quelle on puise pour réaliser les projets: ne pas réinventer l'eau tiède à chaque fois...
0