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 :

Probleme de type avec une formule


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Probleme de type avec une formule
    Bonjour,
    J'ai un problème avec des chaînes. Je veux que mon programme récupère une chaîne de ce type:
    m / 100 * (1.2 + 0.0899 * V + 0.00044 * V ^ 2)
    , et après avoir récupéré les valeurs de m et V qu'il exécute le calcul.
    Pour V et m c4est bon, par contre je calepour la formule. Avec Cint(string) ça ne marche pas!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub CalculCycle()
    'on exploite les données de dernierecolonne
    Dim V As Integer, m As Integer, fw  As Variant
    'temporairement on exécute dernierecolonne pour regarder comment marche la sub
    Dernierecolonne = Cells(LIDEBCYC, 1).End(xlToRight).Column
    V = Feuil2.Cells(3, Dernierecolonne).Value
    m = Feuil2.Cells(4, Dernierecolonne)
    fw = Feuil2.Cells(6, Dernierecolonne).Value
    'forw = Val(fw)
    forw = CInt(fw)
     
    End Sub
    J'ai ce message d'erreur:
    Erreur d'exécution '13':
    incompatibilité de type

    ça bug à cause de m et V, je pense q'il faudrait que je les remplace par leur valeurs avant defaire la transfo stringinteger, mais je sais pas comment faire...

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    regarde la valeur de Dernierecolonne et des cellule correspondant a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fw = Feuil2.Cells(6, Dernierecolonne).Value
    Je n'ai aucun problème quand je fais ce genre de chose a condition que ma cellule contienne bien un entier (tu peux directement déclarer fw comme entier dailleur et te passer de la convertion Cint)

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Pour dernierecolonne j'ai la bonne valeur.J'avais d'ailleurs déjà corriger des problèmes avec la procédure qui le renvoit.
    Quand je déclare fw comme integer, il me renvoit ce message:
    Erreur '13' incompatibilité de type
    si je déclare en variante, ça passe, mais dans la fenêtre de variables locales, il me met
    Vaiant/String
    , donc chaine de caractère et pas un entier.
    Le problème c'est que les formules que j'utilise contiennent des lettre, et sont donc considérées comme des chaînes de caractères...
    Est ce que je pourrais pas faire une boucle pour isoler les "éléments numériques" (chiffres, et symboles: /, *, +, =)des lettres, pour ensuite attribuerles valeurs numériques à V et m, les réinsérerdans la chaines de charactère, puis la transformer en integer....
    Tiré par les cheveux? Vous en penser quoi?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Bonjour,

    Et pourquoi ne pas déclarer fw en String ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fw = Feuil2.Cells(6, Dernierecolonne).Value
    devrait alors marcher. Et tu pourrais alors virer EDIT : j'ai rien dit, je viens de comprendre...

  5. #5
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Je croi que je viens de comprendre

    Tu as dans une cellule une chaine de caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m / 100 * (1.2 + 0.0899 * V + 0.00044 * V ^ 2)
    sauf que m et v sont des valeurs numériques

    Et tu veux les récupérer c'est bien ca?

    Ou alors une autre facon que j'ai de comprendre ce que tu as écrit
    Tu as cette chaine de caractère d'un coté
    de l'autre tu récupère la valeur de v et m et tu veux le remplacer dans la formule.
    Je croix que c'est cette solution la bonne

    donc essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim formule As String, m As Double, V As Double, resultat As Double
    formule = "m / 100 * (1.2 + 0.0899 * V + 0.00044 * V ^ 2)"
    m = 10
    V = 12.5
     
    formule = Replace(formule, "m", m)
    formule = Replace(formule, "V", V)
     
    Range("A1").Formula = "=" & formule
    resultat = Range("A1").Value
    Range("A1").ClearContents
    MsgBox resultat
    Je magouille un peu pour transformer ta chaine de caractère en une valeur il y a peut etre une fonction qui permet d'éviter de passer par une cellule

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Heureusement que j'ai rafraîchi, sinon on était parti pour un tricot

    J'allais poster quelque chose dans ce goût là. C'est fonctionnel. Tu peux te fier au code de Krovax les yeux fermés

  7. #7
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Citation Envoyé par DeaD78 Voir le message
    Tu peux te fier au code de Krovax les yeux fermés
    ouais enfin, c'est pas moi qui le dit , fait juste attention a ce que la cellule A1 ne soit pas utilisé ou alors ecrit dans une autre cellule qui sera toujours vide

  8. #8
    Futur Membre du Club
    Inscrit en
    Mai 2009
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 20
    Points : 8
    Points
    8
    Par défaut Merci
    Merci les gars, ça marche!!! J'étais en train de réfléchir à une boucle sur ma formule pour isoler les V et m, puis les remplacer, et convertir la formule en integer. Bref un truc super compliqué, alors qu'avec replace, c'est plus simple!!!

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

Discussions similaires

  1. probleme avec une formule
    Par étoile de mer dans le forum Mathématiques - Sciences
    Réponses: 1
    Dernier message: 01/08/2012, 22h40
  2. probleme avec une formule
    Par kyros21 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 13/01/2012, 09h24
  3. Probleme avec une formule
    Par thomasmbai dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 06/11/2011, 14h39
  4. [WD9] Requête de type SELECT avec une formule mathémathique
    Par jo_la_pasteque dans le forum WinDev
    Réponses: 2
    Dernier message: 22/04/2008, 12h42
  5. Réponses: 14
    Dernier message: 09/08/2004, 13h42

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