> Tous les forums > Forum Bureautique
 Creer une fonction personnalisée sous Excel 2003
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
melanieleveque
  Posté le 05/09/2007 @ 15:08 
Aller en bas de la page 
Petite astucienne

Bonjour à tous,

Gros probléme, j'ai besoin de créer une fonction dans mon logiciel Excel pour pouvoir calculer mes marges bénéficiares. Comment dois-je procéder pour creer une fonction perso? Est ce possible?

Merci de votre aide

Publicité
Bérylion
 Posté le 05/09/2007 à 15:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien


Salut

rien de plus facile.

tu veux faire quoi exactement ? (c'est quoi ta fonction perso, elle doit faire quoi...)
Bérylion
 Posté le 05/09/2007 à 15:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bérylion
 Posté le 05/09/2007 à 15:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien




parti trop vite !!

bon, 2 ou 3 petites choses en plus, bonnes à savoir :

- il faut activer les macros pour que ça fonctionne (outils/macros/sécurité : choisir moyen ou bas)

- ta fonction n'est valable que pour le classeur dans laquelle elle est contenue (pour la rendre accessible par tous les classeurs ouvert, il faut ajouter public devant function

- perso est le nom de la fonction, mais tu l'appelles comme tu veux...

(pour info, celle dans mon exemple fait la meme chose que la fonction moyenne...)

si tu as des questions, n'hésite pas...
melanieleveque
 Posté le 05/09/2007 à 15:44 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Merci c'est niquel

melanieleveque
 Posté le 05/09/2007 à 17:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

J'ai suivi tes conseils et tout fonctionne, merci!!! Par contre, je n'arrive pas à créer le formule dont j'ai besoin. Ce que je veux c'est

Colonne A : Prix de Vente

Colonne B : Prix d'Achat

Colonne C : Calcul de la Marge en pourcentage

Marge = 100-(PA/PVx100)

Sachant que mes colonnes A et B ne sont pas fixes, elles peuvent varier

Merci de ton aide...

Bérylion
 Posté le 06/09/2007 à 11:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Salut
c'est ta formule qui va pas
essaie avec =(A1-B1)/B1
en code, ça donne un truc du genre :
function marge(PA,PV)
marge =(PV-PA)/PA
end function



melanieleveque
 Posté le 06/09/2007 à 15:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonjour,

J'ai tout fait comme tu m'as dis mais la formule finale donne Marge(PV;PA) et c'est pas ce que je veux.

Pourtant dans le module j'ai bien inscrit marge=(PV-PA)/PA

Merci

melanieleveque
 Posté le 06/09/2007 à 15:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne
Excuse moi mais je voudrais aussi qu'elle soit accessible à tout moment et pas seulement pour les classeurs ouvert au moment de la création.
Publicité
Bérylion
 Posté le 06/09/2007 à 16:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien


re

http://cjoint.com/?jgqP3orIb8

je peux pas faire mieux...

c'est peut-être pas ce que tu veux, mais c'est pourtant ce que tu as demandé...
melanieleveque
 Posté le 06/09/2007 à 17:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

La formule est exactement ce que je veux mais elle s'applique mal

J'ai entré toutes les données de ton message mais quand je l'applique j'obtiens Marge=(A1;B1) et pas 100-(A1/B1x100)

Et à la pace d'un résultat j'obtiens #Valeur.

Désolé pour le dérangement si tu n'as pas de solution te prends pas la tête...

Bonne soirée

Bérylion
 Posté le 06/09/2007 à 19:11 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

melanieleveque a écrit :

La formule est exactement ce que je veux mais elle s'applique mal

J'ai entré toutes les données de ton message mais quand je l'applique j'obtiens Marge=(A1;B1) et pas 100-(A1/B1x100)

Et à la pace d'un résultat j'obtiens #Valeur.

Désolé pour le dérangement si tu n'as pas de solution te prends pas la tête...

Bonne soirée






pas tout compris...

si tu écris =marge(A1;B1), ça calcule (A1-B1)/B1 (normal, puisque c'est ce qu'on lui demande...)

en clair, ça calcule le rapport de la différence du prix de vente et du prix d'achat sur le prix d'achat

ex : PA=100 et PV=110

marge(100;110) = (110-100) / 100 = 0,1 (et si tu mets le format en %, tu obtiens 10%... magique !!)


mais bon, pour ce genre de formule faut meme pas la personnaliser, tu écris ta formule (A1-B1)/B1 et tu incrémentes...
(enfin, c'est mon avis et je le partage )

sur ce, je te laisse, j'ai un réseau à reconfigurer sans le foutre en l'air cette fois...



Modifié par Bérylion le 06/09/2007 19:12
galopin01
 Posté le 06/09/2007 à 19:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,
Il faut bien distinguer 2 choses bien différentes :
1- La confection d'une fonction personnalisée (ou de la macro, ce qui est la même chose)
2- L'utilisation de cette fonction personnalisée.

1- La confection de la macro personnalisée :
Elle s'effectue sur un classeur dédié à cet effet. L'usage veut qu'on l'appelle perso.xls ou perso.xla.
Les deux classeurs sont un peu différents les uns des autres dans leur utilisation.
Je préconise l'utilisation du perso.xla à mes yeux plus fonctionnel à condition de garder à l'esprit les indications qui suivent :

Pour créer un perso.xla
Rien de bien compliqué : Ouvrir un nouveau classeur, supprimer toutes les feuilles (sauf la première qui restera vide)
Dans le menu Fichier faire Enregistrer (ou Enregistrer sous...)
Dans la boite de dialogue, tout en bas (flêche rouge) dans la boite de dialogue choisir Macro complémentaire... (*.xla) puis (juste au dessus) baptisez votre nouveau classeur "perso.xla".
Notez au passage que dès que vous aurez cliqué sur Macro complémentaire... (*.xla) en haut dans la boite de dialogue le nom de votre dossier va changer : Excel cache les macros complémentaires dans un dossier particulier...

Ceci fait votre perso.xla va disparaître ! En effet son principal intéret est d'être invisible.

Pour que les modifications soient prises en compte et que ce classeur "monte la garde" en permanence :

Quittez Excel puis Ouvrez un Nouveau Classeur Excel et dans le menu Outils cliquez Macros Complémentaire... puis dans la boite de dialogue suivante vous devez découvrir votre perso il suffit de le cocher puis Ok. Désormais votre Perso.xla restera disponible tant qu'il restera coché dans les macros complémentaires et ce, à chaque ouverture d'Excel.

En dehors du menu Outils / Macros Complémentaire, le perso.xla n'est pas visible depuis Excel.
Pour le voir (s'il est coché dans le menu Outils / Macros Complémentaire) il faut aller dans VBA.
Si aucun autre classeur n'est ouvert, à minima vous devez trouver dans le coin en haut à gauche une fenêtre VBAProject qui trahi la présence du perso.xla
Cliquez sur ce le petit signe + qui permet de "déplier" le perso.xla, vous voyez maintenant apparaitre Feuil1 et ThisWorkbook.
Faites un Clic Droit dans cette Fenêtre puis cliquez sur Insertion / Module Votre VBA Project ressemble maintenant à ceci :

...et dans la grande feuille blanche (à droite) qui correspondant à ce nouveau module (Module1) vous pouvez maintenant développer vos propre Fonctions personnalisées qui seront disponibles dans tous les classeurs.

Pour la facilité et une meilleure compréhension, nous allons d'abord créer une fonction simple (qui n'a rien à voir avec votre question) mais qui va vous permettre de décortiquer le mécanisme.

La Fonction que nous allons créer s'appelle PérimetreDuRectangle.

Nous écrivons donc :

Function PerimetreDuRectangle()
End Function

Nous savons que pour calculer le périmètre d'un rectangle nous devons connaître la Longueur et la Largeur. VBA ne procède pas différemment.
Nous allons donc prier l'utilisateur de communiquer à VBA les éléments qui lui sont nécessaire pour renvoyer la solution.
Nous écrivons donc:

Function PerimetreDuRectangle(Longueur, Largeur)
End Function

Lorsque l'utilisateur utilisera cette fonction la barre de formule lui suggérera qu'il doit entrer d'abord la longueur et ensuite la largeur...

et les boites de dialogues suivantes également.
Ces valeurs pourront être introduites "en dur" : =PerimetreDuRectangle(25;40)
...ou par référence au contenu de certaines cellules : =PerimetreDuRectangle(A1;A2)

Il ne nous reste plus qu'a indiquer à VBA quel calcul il doit effectuer pour renvoyer la solution :

Function PerimetreDuRectangle(Longueur, Largeur)
PerimetreDuRectangle = (Longueur + Largeur)*2
End Function

2- L'utilisation de cette fonction personnalisée.
Désormais dans n'importe quel classeur si tu utilises cette fonction personnalisés dans une cellule sous l'une ou l'autre de ces deux formes :
=PerimetreDuRectangle(25;40)
=PerimetreDuRectangle(A1;A2)
...tu devrais obtenir un résultat exact (sous réserve que tes cellules soit formatées avec un nombre de décimales adéquates !

Attention ! Quand tu travailles sur le perso.xla tu dois impérativement sauvegarder tes modifications avant de quitter Excel sinon tout ton travail sur le perso.xla est perdu. Par défaut VBA considère que le programmeur consciencieux n'a pas besoin d'avertissement ni de rappel.
Important : Le perso.xla n'étant pas visible depuis Excel, tu dois impérativement le sauvegarder depuis VBA !

Il ne te reste plus qu'a adapter cette méthode à ton propre cas avec toutes les gâteries indispensables ! (gestion des erreurs, définitions des variables et paramètres...) Dans ton cas c'est assez simple ça ne devrait pas te poser de problème particulier.
Toutes les fonctions personnalisées dérivent de cette méthodes avec des calculs plus ou moins compliqués, mais si tu sais quelle formule et quel pourcentage appliquer à tes prix, YAPA d'raison que ça fonctionne pas...

Si tu éprouves une difficulté à appliquer celà il faudra nous mettre éventuellement un petit classeur démo dans cjoint pour pouvoir corriger car il n'est pas aisé de comprendre ce que tu es bien en peine d'exprimer en détail.

A+



Modifié par galopin01 le 07/09/2007 04:44
Bérylion
 Posté le 06/09/2007 à 19:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien




Salut l'ami

digne d'un grand chef ton tuto !!

si toutefois je puis me permettre :

- pour une fonction, on déclare pas une function plutot qu' une sub ??
- pour l'utiliser depuis tous les classeurs, faudrait pas la déclarer public function ?


galopin01
 Posté le 07/09/2007 à 04:04 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

bonjour,

Function / Sub : Il s'agit bien sur d'une coquille que j'avais d'ailleurs remarquée dans ma préparation, mais au hasard des copier des coller ou des sauvegardes j'ai du écraser la correction...

C'est donc modifié en conséquence.

Public : Il n'est pas utile de la déclarer publique.

A+

melanieleveque
 Posté le 07/09/2007 à 10:05 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Bonjour,

Merci à toi! J'essaye de suite voir si ca fonctionne...

Bonne journée

melanieleveque
 Posté le 07/09/2007 à 10:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petite astucienne

Merci beaucoup de ton aide, ca fonction à merveille!

Pour info, public n'est pas nécessaire...

Merci à toi aussi Bérylion car tu as passé du temps sur mon probléme!

Bonne journée à tous les deux

Publicité
Bérylion
 Posté le 07/09/2007 à 14:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien





il a raison le bougre...

c'est le contraire en fait, il faut la déclarer private pour qu'elle ne soit dispo que dans son classeur !!



Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
25,49 €Casque sans fil Sony WH-CH500 Bluetooth à 25,49 € avec le code 15CASQUE
Valable jusqu'au 18 Avril

Cdiscount fait une promotion sur le casque sans fil Sony WH-CH500B Bluetooth qui passe à 25,49 € avec le code 15CASQUE alors qu'on le trouve ailleurs à plus de 60 €. Ce casque sans fil rechargeable (via USB-C) offre jusqu'à 35h d'autonomie. Il possède un microphone intégré et permet des appels mains libres avec annulation de l’écho et suppression des bruits extérieurs.


> Voir l'offre
82,23 €SSD Crucial BX500 1 To à 82,23 € livré
Valable jusqu'au 17 Avril

Amazon Allemagne propose actuellement le SSD Crucial BX500 1 To à 77,65 €. Comptez 4,58 € pour la livraison en France soit un total de 82,23 € livré. Ce SSD offre des débits de 540 Mo/s en lecture et 500 Mo/s en écriture. Le SSD est accompagné du logiciel Acronis true image qui vous permettra de transférer tout le contenu de votre ancien disque dur sur le SSD. Il est garanti 3 ans. 

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douane.


> Voir l'offre
Gratuit3 mois d'abonnement à Amazon Music Unlimited gratuits
Valable jusqu'au 24 Mai

Amazon vous permet d'essayer son service de streaming musical pendant 3 mois gratuitement. Avec Amazon Music Unlimited, accédez à plus de 50 millions de titres, sans publicité et en illimité sur tous vos appareils : smartphone, tablette, PC/Mac, Fire, Alexa. Vous avez même la possibilité de télécharger vos playlists pour des écoutes hors connexion. A la fin de ces 3 mois, vous pourrez basculer vers l'offre payante à 9,99 € / mois ou bien arrêter sans frais le service. A noter l'existence d'une offre famille à 14,99 € / mois qui permet jusqu'à 6 utilisateurs d'écouter leur musique à tout moment et sur leurs appareils préférés. Vous pouvez annuler l'abonnement à tout moment.


> Voir l'offre

Sujets relatifs
Créer un graphique sous excel 2003 XP
VisualBasic sous Excel : fonction personnalisée
Créer un message d'erreur sous excel 2007
Perte hyperliens Excel 2003 sous Vista Edition Familiale
Amélioration d'une macro sous excel 97 ou 2003
COMMENT CREER DES GROUPES ALEATOIRES SOUS EXCEL
Sous totaux avec Excel 2003
enregistrement partiel sous EXCEL 2003
Problème de "fonction" sous Excel
Excel 2003: fonction NB.SI
Plus de sujets relatifs à Creer une fonction personnalisée sous Excel 2003
 > Tous les forums > Forum Bureautique