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

2 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. 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
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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