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 :

formule en vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 93
    Par défaut formule en vba
    Bonjour à tous

    Cette question est pour ma connaissance personnelle.
    J'essaye de mettre en vba une formule avec des variables donc ma formule s'apparente à :

    si j'écris comme ça ça ne fonctionne pas, erreur 1004:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    montant1=range("J4")
    ...
    range("B10").formula="=(" & montant1 &" -E10+D10)/( "&  montant1  &" + "& montant2  &" + "&  montant3  &" + "&  montant4  &"+ D10-E10+D11-E11+D12-E2+D13-E13)"
    et si je l'écrit comme ça, ça fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    range("B10").formula="=(" & montant1 &" -E10+D10)/( """&  montant1  &""" + """& montant2  &""" + """&  montant3  &""" + """&  montant4  &"""+ D10-E10+D11-E11+D12-E2+D13-E13)"
    [/CODE]

    Mais du coup dans ma formule, ça m'écrit mes nombres "montant" entre guillemet. Même si ça ne gêne pas le calcul, j'aimerai le faire sans quand même. au pire je peux évidemment passer ensuite par un recherche et remplace

    Merci de vos lumières

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    fait un debug.print ou un Msgbox sur cette chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=(" & montant1 &" -E10+D10)/( "&  montant1  &" + "& montant2  &" + "&  montant3  &" + "&  montant4  &"+ D10-E10+D11-E11+D12-E2+D13-E13)"
    et ne soit pas avare quand tu écris du code : renseigne la propriété .Value sur tes Range, et rattache tes ranges aux feuilles d'appartenance

    et regarde ce que ça donne
    au besoin, copie nous le retour de cette chaine si tu ne voit pas le problème

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par zertupo Voir le message
    si j'écris comme ça ça ne fonctionne pas, erreur 1004:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    montant1=range("J4")
    ...
    range("B10").formula="=(" & montant1 &" -E10+D10)/( "&  montant1  &" + "& montant2  &" + "&  montant3  &" + "&  montant4  &"+ D10-E10+D11-E11+D12-E2+D13-E13)"
    Il est peu probable que cette ligne soit un copier/coller d'une ligne de code issue de l'éditeur VBA, étant donné la position des espaces (parfois manquants, parfois surnuméraires).
    En particulier, en VBA, un & doit toujours être précédé et suivi d'un espace, comme tout opérateur.

    Chez moi, ceci ne génère pas d'erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("B10").formula = "=(" & montant1 & "-E10+D10)/(" & montant1 & "+" & montant2 & "+" & montant3 & "+" & montant4 & "+D10-E10+D11-E11+D12-E2+D13-13)"
    Je pense donc que non seulement du mets des données fausses dans ta question mais surtout tu ne donnes pas toutes les données.
    En particulier le contenu de tes 4 variables.
    Je suppose qu'elles contiennent des nombres avec une partie décimale, non ?
    Or Excel et VBA sont souvent en désaccord pour l'interprétation des date et des séparateurs décimaux.

    Remplace Formula par FormulaLocal et ça devrait s'arranger.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 93
    Par défaut
    Le debut.print m'affiche bien le calcul que je veux correctement.

    Le formulaLocal finit de la même manière.

    Oui ce n'était pas le copié de la formule exactement, les espaces demandés par "&" sont bien respecté, ci-joint le vrai code copié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim montant1, montant2, montant3, montant4 As Double
     
    montant1 = Range("J4")
    montant2 = Range("J5")
    montant3 = Range("J6")
    montant4 = Range("J7")
     
     
     
    Range("B10").Formula= "=(" & montant1 & "-E10+D10)/(" & montant1 & "+D10-E10+ " & montant2 & "+D11-E11+" & montant3 & "+D12-E12+" & montant4 & "+D13-E13)"

    peut être qu'il y a trop de variable, et excel n'arrive pas... Parce que si j'utilise qu'une seule variable, ça fonctionne.

    merci

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour,

    et non la "formule" VBA est forcément fausse, il suffit juste de comparer le Debug.Print avec la vraie formule ‼
    Sans non plus recourir à des variables …

    ___________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2014
    Messages : 93
    Par défaut
    Le debug.print m'affiche

    =(13000000-E10+D10)/(13000000+D10-E10+18794756,39+D11-E11+0+D12-E12+0+D13-E13)

    donc je vois pas ce qu'il y a de faux qu'il ne peut pas afficher...

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Cette formule fonctionne bien de mon côté via la propriété FormulaLocal sur une feuille de calculs vierge.
    (Edit :   Menhir que je salue a été plus rapide …   Et salut joe !)

    zertupo, essaye de ton côté avec ton code et s'il est toujours en échec,
    le poster ici accompagné du classeur sans code enregistré au format xlsx

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par zertupo Voir le message
    peut être qu'il y a trop de variable, et excel n'arrive pas... Parce que si j'utilise qu'une seule variable, ça fonctionne.
    Si tu avais quelques centaines de variables, on aurait pu envisager cette hypothèse mais avec 4 variables, c'est fortement improbable.

    Il est plus probables que ce soit le contenu d'une de tes cellules J qui pose problème.

    Perso, quand j'ai testé ta formule

    Déjà, tu devrais commencer par déclarer correctement tes variables.
    Parce que dans ta déclaration, il n'y a que montant4 qui soit de type Double. Les autres sont de type Variant.
    Tu pourras le vérifier en regardant dans la fenêtre des variables locales.

    La bonne syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim montant1 As Double, montant2 As Double, montant3 As Double, montant4 As Double
    Perso, quand je mets des entier dans tes variables, ça passe.
    Quand on mets des décimales, ça génère une erreur.
    Quand on remplace Formula par FormulaLocal, ça passe, même avec des décimales.

    Mais puisque tu dis que tu as essayé et que ça n'est pas ça...

    Citation Envoyé par zertupo Voir le message
    Le debug.print m'affiche
    =(13000000-E10+D10)/(13000000+D10-E10+18794756,39+D11-E11+0+D12-E12+0+D13-E13)
    donc je vois pas ce qu'il y a de faux qu'il ne peut pas afficher...
    Sauf que Formula ne comprendra pas la virgule devant le 39.
    Seul un FormulaLocal peut le comprendre.
    Mais puisque tu dis que tu as testé et que ce n'est pas ça... (bis)

    PS : Peu probable aussi que debug.print te renvoie exactement ça puisque dans ton code, il y a un espace derrière le second "E10+"

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

Discussions similaires

  1. [VBA-E]Formules en VBA?
    Par dev81 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/06/2007, 20h55
  2. [VBA-E] ecrire une formule en vba
    Par Huubb dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/01/2007, 14h15
  3. tirage formules en VBA avec excel
    Par melodyyy dans le forum Macros et VBA Excel
    Réponses: 46
    Dernier message: 23/11/2006, 18h33
  4. Paramétrer une formule en vba
    Par arnogef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/08/2006, 11h48
  5. Copier une formule avec vba
    Par NAMORJOSE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/05/2006, 00h12

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