Excel formules très compliquées

Résolu
Bonjour,
comment
modifier une feuille de calculs très compliqués en macro sans avoir à tout retaper?
est ce possible de convertir une feuille de calculs en macro ou de faire exécuter ces formulés par une macro?

Merci

8 réponses

  1. Contributeur
    Bonjour,

    Et si tu expliquais (clairement et complètement) ce que tu as et ce que tu veux ?
    eric
    1. Modérateur
      Salut Eriic,
      Il s'agit de la suite de ce sujet...
      Ne pas tout relire, juste le message permalink 23.
      Je reste ici en cas de besoin.
      1. Contributeur
        Ok, ben c'est pas plus clair là bas... ;-)

        Pour info pour le demandeur, on peut faire des fonctions personnalisées en vba.
        Donner le nom voulu pour la fonction, les variables d'entrées et la formule pour fournir le résultat en sortie.
        Ca permet d'accélérer et d'alléger un tableau, ainsi que de simplifier la saisie et la lecture.

        @+
        eric
    2. Modérateur
      Si vous le voulez on va continuer ici.......

      Il faut que tu sois simple dans tes explications, je ne suis pas ingénieur en aérospaciale et donc moi, tous tes trucs Einsteiniens, je risque de ne pas les comprendre. Eriiic peut être mais moi pas!

      Bon pour être simple, voici ce dont nous avons besoin.

      Exemple :
      En colonne A, j'ai des nombres à 5 chiffres après la virgule,
      En Colonne B, j'ai des nombres entiers de 1 à 9999,
      En colonne C, un pourcentage à 2 chiffres après la virgule,
      En Colonne D, un chiffre entre -9 et 9,
      En Colonne E, la formule =(A*B)+C

      Je souhaites obtenir en colonne F, par macro, à chaque changement d'une donnée dans les colonnes A, B, C, D, le résultat de la formule :
      =((A/(B*C))+Ln(E)*10^4-Exp(A*D))*k ou k = 1,61803399 * pi

      Là c'est clair. En tout cas pour moi...
      Ok?
      1. Le hic c'est que si je te fait ça avec toutes mes formules, je te fais trois pages, on va donc partir du principe de base et si je te comprends pour ça, je l'appliquerai au reste:

        Je défini par n'importe quel nombre:

        I6
        I7
        I12
        I13

        J8=RACINE((PUISSANCE(I6;2)+PUISSANCE(I7;2)))
        J14=RACINE((PUISSANCE(I12;2)+PUISSANCE(I13;2)))

        K6=I6+J8
        K7=I7+J8
        K12=I12+J14
        K13=I13+J14

        J8=RACINE((PUISSANCE(K6;2)+PUISSANCE(K7;2)))
        J14=RACINE((PUISSANCE(K12;2)+PUISSANCE(K13;2)))

        En gros

        Ma feuille de calculs en contient des tonnes.... est il possible de les convertir en macro sans tout retaper ou de faire une macro reprenant ces formules telles quel le but étant de ne pas tout retaper en VBA

        C'est mieux là, non?
        Plus simple sera compliqué
        1. Contributeur
          Re,

          Si tu pouvais déposer un fichier exemple sur cjoint.com et coller le lien ici (avec le résultat attendu...).
          Ca a l'air d'un calcul récursif.
          Si c'est ça (assez complexe et pas de garantie d'y arriver ;-) ) quelle est la condition de sortie ?

          Sinon, te faut-il tous les résultats intermédiaires, et combien de calculs successifs ?

          eric
        2. s'il y a un maximum de calculs successifs, je suis preneur
          pour l'instant je me sert des résultats intermédiaires (vitesses et accélérations sur x et y) pour les afficher en graphique mais je ne suis pas borné.

          Merci
      2. S'agissant du calcul de trajectoires de deux corps A et B en partant de leurs masses, de leurs positions en x et y de départ (en gros: I6;I7;I12;I13) et de leurs vitesses initiales pour calculer les nouvelles position en x et y (K6;K7;K12;K13) la condition de sortie pourra être complètement arbitraire (pourquoi pas la fin de la ligne sur excel 2010 par exemple?)

        Cordialement
        1. Contributeur
          Les résultats intermédiaires sont toujours en J8, J14 et sont écrasés par le calcul suivant, c'est ça ?
          Donc ils ne te servent pas et on peut s'abstenir de les mettre sur la feuille. D'accord ?

          Sinon on peut tous les mettre mais plutôt en I8, i14, puis J8,J14, puis K8, K14, etc.
          Cette irrégularité avec une colonne sautée me perturbe.
          Je répète : Si tu pouvais déposer un fichier exemple sur cjoint.com et coller le lien ici
          Sinon on va faire à notre idée et la position de cellules ne conviendra peut-être pas à ton projet.

          eric
        2. Je suis plutôt d'accord pour ta solution de les mettre dans la colonne suivante sinon, je suis preneur de toute disposition qui pourra être plus pratique mais je préfère les garder
        3. Contributeur
          Et il n'y a qu'un seul couple à calculer ?
          S'il y en a d'autres où sont-ils ? Nombre fixe ou variable ?
      3. Pour comprendre le principe je voudrais juste avoir les lignes VBA pour les relations que j'ai donné.

        A part

        I6
        I7
        I12
        I13

        fixés au début tout le reste est calculé et donc variable si je comprends bien ta question
        1. Contributeur
          Re,

          Regarde si ça va :
          Sub calcul()
              Dim nbcol As Long, col As Long
              nbcol = Application.InputBox("Nombre de calculs voulus : ", Type:=1)
              If nbcol < 1 Then
                  MsgBox ("nombre non valide")
              Else
                  Application.ScreenUpdating = False
                  ' nettoyage
                  [J6].Resize(2, Columns.Count - 9).ClearContents
                  [J12].Resize(2, Columns.Count - 9).ClearContents
                  For col = 10 To WorksheetFunction.Min(nbcol, Columns.Count - 10) + 9
                      Cells(8, col) = Sqr(Cells(6, col - 1)) ^ 2 + (Cells(7, col - 1) ^ 2)
                      Cells(14, col) = Sqr(Cells(12, col - 1)) ^ 2 + (Cells(13, col - 1) ^ 2)
                      '
                      Cells(6, col) = Cells(6, col - 1) + Cells(8, col)
                      Cells(7, col) = Cells(7, col - 1) + Cells(8, col)
                      Cells(12, col) = Cells(12, col - 1) + Cells(14, col)
                      Cells(13, col) = Cells(13, col - 1) + Cells(14, col)
                  Next col
                  Application.ScreenUpdating = True
              End If
          End Sub


          Je te laisse contrôler les calculs sur qcq exemples.

          Comme tu es avare de détails et pour fournir un exemple, selon les conditions de départ on obtient un overflow assez rapidement que tu devrais pouvoir régler.

          eric
          1. C'est exactement la base qu'il me fallait merci beaucoup