Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2012, 19h20   #1
Invité de passage
 
Homme
Étudiant
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2012
Messages : 4
Points : 1
Points : 1
Par défaut transmettre des données entre macro et tableur

Bonjour!

je vous explique mon problème:
j'ai créer la fonction suivante:

Code :
1
2
3
Function fonc(x) As Double
fonc = x*x
End Function
Ainsi dans mon programme principale, je calculer les différentes valeurs de x² en appelant ma fonction.

Cependant, je suis obligé de rentrer dans ma macro si je veux changer ma fonction à étudier.
J'aimerais pouvoir la changer directement depuis mon tableur.
J'ai essayé de faire fonc=Cells(1,1).value où j'ai écris dans la cellule A1: x*x
mais cela ne marche pas.
Je pense que c'est dû au fait que j'ai déclaré fonc(x) comme un double et quand j'appelle la cellule A1 elle revient comme un string.
Je n'ai vraiment pas d'idées pour corriger ce problème
Pouvez vous m'aider svp?
guynux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 20h26   #2
Membre Expert
 
Homme
Retraité
Inscription : avril 2011
Messages : 700
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Retraité

Informations forums :
Inscription : avril 2011
Messages : 700
Points : 1 460
Points : 1 460
Bonjour,

Si j’ai bien compris, tu cherches à faire une fonction personnelle.

La fonction doit être placée dans un module standard.
Dans VBE, Modules / Module 1 tu copies
Code :
1
2
3
Function fonc(x As Double) As Double
    fonc = x * x
End Function
Ensuite,
- dans la feuille, en A1 par exemple, tu places ton nombre x (tu saisis 12 par exemple)
- dans la feuille, en B1 par exemple, tu écris = =fonc(A1)
et tu obtiens le résultat (144).

Tu peux en profiter pour regarder la fonction PUISSANCE dans l’aide EXCEL.

Voici un lien sur les fonctions personnelles
http://silkyroad.developpez.com/vba/fonctions/

Cordialement.
gFZT82 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 18h40   #3
Invité de passage
 
Homme
Étudiant
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2012
Messages : 4
Points : 1
Points : 1
Bonjour,
non ce n'est pas exactement ça

j'aimerais écrire n'importe quelle fonction dans A1 ( par exemple x*x ou sin(x)...)

et ensuite calculer f(12) (par exemple)dans mon programme principlal après avoir rempli la cellule A1
guynux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 21h21   #4
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Citation:
J'aimerais écrire n'importe quelle fonction dans A1
et ensuite calculer f(12) (par exemple)dans mon programme principlal
(1) : Ecrire la fonction au format texte avec en paramètre (x) ... avec les parenthèses pour limiter les ambiguïtés de décodage de la fonction.

(2) Appeler la fonction :
Code :
1
2
3
Function fonc(x as Double) As Double
      fonc = CDbl(Evaluate(Strings.Replace(CStr([A1].Value), "(x)", CStr(x))))
End Function
Attention : Cette fonction fait appel à la méthode Evaluate.
Le principe est qu'elle est capable d'appeler les fonctions présente dans Worksheetfunctions (SIN, COS ...).
Mais pas les fonctions françaises SOMME, ET ... Utiliser leur équivalents SUM, OR ...

Testé sur les formules suivantes en A1 :
- (x)*(x)
- (x)/(1 + (x))
- sin(2*pi()*(x))
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 04/02/2012, 09h53   #5
Invité de passage
 
Homme
Étudiant
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2012
Messages : 4
Points : 1
Points : 1
Bonjour,

merci pour ta réponse!
La fonction que tu m'as donné marche bien.
Le seul problème c'est qu'elle fonctionne uniquement pour les entiers. Dès que je met un décimal, ça ne marche pas.

A vrai dire je ne comprend pas vraiment pourquoi puisque tu déclares x comme un double dans dans la function fonc.

Aurais tu une idée?
guynux est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 10h38   #6
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonjour,


Si tu utilise le séparateur décimal "," ceci devrait résoudre le problème.

Code :
1
2
3
Function fonc(x as Double) As Double
     fonc = CDbl(Evaluate(Strings.Replace(CStr([A1].Value), "(x)", Strings.Replace(x, ",", "."))))
End Function
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/02/2012, 11h56   #7
Invité de passage
 
Homme
Étudiant
Inscription : février 2012
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2012
Messages : 4
Points : 1
Points : 1
Merci beaucoup!
tu m'as rendu un grand service!
guynux est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h02.


 
 
 
 
Partenaires

Hébergement Web