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 :

Solveur VBA Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Par défaut Solveur VBA Excel
    Bonjour tout le monde,
    Voici plusieurs heures maintenant que j'essaie de fairet tourner le solveur ci-joint mais sans succès.
    Le message me dit qu'il n'y pas de formule dans la cellule L10 dans le fichier ci-joint. Effectivement la formule n'est pas dans la cellule mais dans le code.
    Peut on tout de meme faire tourner le solveur?
    D'avance merci pour votre aide, commentaires et collaboration.
    Au plaisir de vous lire
    Fichiers attachés Fichiers attachés

  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,

    de quel bout de code parles-tu ?

    La cellule cible doit comporter une formule, sinon, n'était pas reliée à des cellules, ça sert un peu à rien

    Un tuto sur le solveur
    http://jpcheck.developpez.com/tutori...ur-sous-excel/


    D'autre part, je peux te recommander de faire un peu de nettoyage de code en remplaçant par exemple :
    - les If / End If à répétition par un Select Case / End Select
    - les boucles k/kk/kkk/kkkk/kkkk par des valeurs (pourquoi boucler de 1 à 1 / de 2 à 2 etc.
    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
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Par défaut Solveur VBA Excel
    Bonsoir JP,
    Merci pour ta rapide réponse.
    La cellule cible comporte effectivement une formule mais cette dernière n'est pas écrite dans la cellule mais directement dans le code.
    Le bout de code est celui du solveur vers la fin du module 1. Le module 2 était un essai => a effacer
    En d'autres termes cellule L10 doit être minimisée. Les variables sont alpha et bêta qui doivent varier entre 0 et 1. La cellule l10 est la moyenne de la colonne F.
    Les variables alpha et bêta sont comprises dans les calcul des colonnes C et D!
    J'espère que cela t'aide! Et mil merci pour ta collaboration!!
    C'est vrai que mon code est loin d'être nickel mais mes bases en VBA sont très limitées!
    J'espère te lire bientot

  4. #4
    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
    Pour que cela, il faut directement mettre ta fonction moyenne dans la cellule L
    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

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Par défaut Solveur VBA Excel
    Merci pour le conseil mais ce n'est pas si facile car la cellule "L" dépend de la colonne "F" et cette colonne F dépend des colonnes C ET D.
    Tu crois que c'est faisable?
    merci pour tout

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour pouvoir utiliser le solveur, il faudra que la valeurs cible dépend (par formule des cellules variables). Je dirai logique.

    Pour toi, tu n'avais aucun lien par formule sur la feuille excel entre L3, L4 et L10.

    Ci-joint, code, qui remplace les valeurs trouvée dans le code par les formules adéquates. Ensuite l'utilisation du solveur, et enfin remplacer les formules par les valeurs.

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Sub HoltsByFormulas()
    Dim NBLG As Long
     
    Application.ScreenUpdating = False
    With ThisWorkbook.Worksheets("Holts")
        NBLG = .Range("B" & .Rows.Count).End(xlUp).Row
        .Range("C5:L" & NBLG + 1).ClearContents
        .Range("L3:L4").ClearContents
     
        'Calcul du forecast
        .Range("E5") = "Forecast"
        .Range("E7:E" & NBLG + 1).Formula = "=C6+D6"
     
        ' Base
        .Range("C5") = "Base"
        .Range("C6") = .Range("B6")
        .Range("C7:C" & NBLG).Formula = "=$L$3*B7+(1-$L$3)*(C6+D6)"
     
        ' Trend
        .Range("D5") = "Trend"
        .Range("D7:D" & NBLG).Formula = "=$L$4*(C7-C6)+(1-$L$4)*C6"
     
        ' Absolute Error
        .Range("F5") = "Absolute Error"
        .Range("F7:F" & NBLG).Formula = "=ABS(E7-B7)"
     
        'Squared Error
        .Range("G5") = "Squared Error"
        .Range("G7:G" & NBLG).Formula = "=F7^2"
     
        'Percentage Error
        .Range("H5") = "Percentage Error"
        .Range("H7:H" & NBLG).Formula = "=ABS((B7-F7)/B7)*100"
     
        'Error
        .Range("I5") = "Error"
        .Range("I7:I" & NBLG).Formula = "=B7-E7"
     
        .Range("K10:K15") = Application.Transpose(Array("MAD", "MSE", "MAPE", "MFE", "", "r2"))
        .Range("L10").Formula = "=AVERAGE(F7:F" & NBLG & ")"
        .Range("L11").Formula = "=AVERAGE(G7:G" & NBLG & ")"
        .Range("L12").Formula = "=SUM(H7:H" & NBLG & ")/" & NBLG
        .Range("L13").Formula = "=SUM(I7:I" & NBLG & ")/" & NBLG
        .Range("L15").Formula = "=CORREL(B7:B" & NBLG & ",E7:E" & NBLG & ") ^ 2"
     
        ' Solveur
        SolverReset
        SolverOk SetCell:="$L$10", MaxMinVal:=2, ValueOf:="0", ByChange:="$L$3:$L$4"
        SolverAdd CellRef:="$L$3:$L$4", Relation:=1, FormulaText:="1"
        SolverAdd CellRef:="$L$3:$L$4", Relation:=3, FormulaText:="0"
        Solversolve Userfinish:=True
        SolverFinish keepfinal:=1
        SolverReset
     
        ' Figer les valeurs
        With .Range("C7:L" & NBLG)
            .Value = .Value
        End With
    End With
    End Sub
    PS: Mets en commentaire la ligne 57 pour pouvoir vérifier les formules.

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

Discussions similaires

  1. [VBA-Excel,VB6,Fichier texte]enregistrer un classeur excel..
    Par Tarul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 13h09
  2. [vba-excel] Le temps de fermeture trop court ?
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/01/2005, 10h03
  3. [VBA-Excel]
    Par Damsou dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/01/2005, 10h17
  4. [VBA EXCEL] Réduire/Agrandir UserForms
    Par Fench dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2003, 16h02
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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