IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Méthode des trapèzes [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut Méthode des trapèzes
    Bonjour à vous,

    Voilà je m'adresse à vous pour un soucis en code VBA : calculer une intégrale de fonctions à l'aide de la méthode des trapèzes, voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Function Inttrap(ByVal X As Range, ByVal Y As Range)
     
    'Dimension du taleau pour le calcul intégral
    L = X.Rows.Count
     
    'initialisation
    Dim t0 As Double
    t0 = (X(1) - X(0)) * (Y(1) - Y(0)) / 2
     
    'algo
    Dim i As Long, ti As Double
    For i = 1 To L
    ti = ((X(i + 1) - X(i)) * (Y(i + 1) - Y(i)) / 2)
    Inttrap = ti + t0
    Next i
    End Function
    Voilà je suis nouveau en VBA et ça marche pas ... et je ne comprend pas si quelqu'un a une astuce bon après midi à vous

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    il faut sommer tous tes trapezes, donc
    doit a minima se transformer en
    et initialiser inttrap (sauf erreur)
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2017
    Messages : 5
    Par défaut Code fonctionnels
    Voila le code foonctionnel, si ça intéresse quelqu'un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Function Inttrap(ByVal X As Range, ByVal Y As Range)
     
    'Dimension des taleaux pour le calcul intégral
    L = X.Rows.Count
     
    'initialisation
    Dim t1 As Double
    t1 = (X(2) - X(1)) * (Y(2) + Y(1)) / 2
    Inttrap = t1
     
    'algo
    Dim i As Long, ti As Double
    For i = 2 To L
    ti = (X(i + 1) - X(i)) * (Y(i + 1) + Y(i)) / 2
    Inttrap = Inttrap + ti
    Next i
    End Function
    Et un autre code plus précis et fonctionnel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Function IntegralP(ByVal X As Range, ByVal Y As Range)
    'Integral d'une fonction donnée en des points discrets non équidistants
    'interpolation par un polynôme du second degré
    'identique à la méthode de Simpson si point équidistants
    'les X doivent être croissant
     
    'Tailles matrices
    Dim L As Long, L2 As Long, C As Long, C2 As Long
    L = X.Rows.Count
    L2 = Y.Rows.Count
    C = X.Columns.Count
    C2 = Y.Columns.Count
     
    'Erreur de taille
    If C > 1 Or C2 > 1 Then IntegralP = "#COLONNE!": Exit Function
    If L <> L2 Then IntegralP = "#LIGNE!": Exit Function
    If L < 3 Then IntegralP = "#POINT!": Exit Function
     
    'Calcul initial
    Dim a0 As Double, b0 As Double, k As Double
    a0 = ((Y(1) - Y(3)) * (X(2) - X(3)) - (X(1) - X(3)) * (Y(2) - Y(3))) / ((X(1) ^ 2 - X(3) ^ 2) * (X(2) - X(3)) - (X(1) - X(3)) * (X(2) ^ 2 - X(3) ^ 2))
    b0 = (Y(2) - Y(3) - a0 * (X(2) ^ 2 - X(3) ^ 2)) / (X(2) - X(3))
    k = 2 * a0 * X(1) + b0
     
    'Algo
    Dim i As Long, ai As Double, bi As Double, ci As Double
    For i = 2 To L
        'coef de l'eq polynome second degré : ax^2+bx+c
        ai = (Y(i) - Y(i - 1) - k * (X(i) - X(i - 1))) / (X(i) - X(i - 1)) ^ 2
        bi = k - 2 * ai * X(i - 1)
        ci = Y(i) - ai * X(i) ^ 2 - bi * X(i)
        'integration : [ax^3/3+bx^2/2+cx]
        IntegralP = IntegralP + ai * (X(i) ^ 3 - X(i - 1) ^ 3) / 3 + bi * (X(i) ^ 2 - X(i - 1) ^ 2) / 2 + ci * (X(i) - X(i - 1))
        'dérivé au point de départ pour continuité au segment suivant
        k = 2 * ai * X(i) + bi
    Next i
     
    End Function

  4. #4
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2015
    Messages : 4
    Par défaut Erreur de fin de boucle
    Merci pour le code de ces fonctions.
    Pour l'intégration simple par la méthode des trapèzes, la boucle doit s'arrêter à L-1 au lieu de L.
    Je n'ai pas vérifié l'autre code.

  5. #5
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 032
    Par défaut
    Bonjour a vous tous.
    Une remarque à axel.loiacono : tu aurais dû citer ta source http://fordom.free.fr/
    Car ce site contient de nombreux outils pour les forts en maths et ça peut rendre service à plus d'un.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème méthode des trapèzes en C++ pour débutant
    Par Andromedae dans le forum Débuter
    Réponses: 18
    Dernier message: 14/11/2014, 10h33
  2. double intégrale par la méthode des trapèzes
    Par sergy01 dans le forum MATLAB
    Réponses: 28
    Dernier message: 26/06/2012, 17h05
  3. Méthode des trapèzes
    Par solo12 dans le forum Fortran
    Réponses: 6
    Dernier message: 11/06/2011, 08h18
  4. méthode des trapèzes
    Par humanite dans le forum MATLAB
    Réponses: 12
    Dernier message: 10/01/2011, 21h09
  5. méthode des trapèzes
    Par suzanne1307 dans le forum Fortran
    Réponses: 3
    Dernier message: 15/03/2010, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo