VisualBasic : formules sur plusieurs feuilles

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 :(((((((

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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
    1. 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,
      1. Contributeur
        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...