> 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.
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

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 !!



Publicité
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
PC Portable 16 pouces HP Victus (FHD 144 Hz, Ryzen 7 7840HS, 16Go/512Go, RTX 4070 8 Go) à 1249,99 €
1249,99 € 1599 € -22% @RueDuCommerce

RueDuCommerce fait une promotion sur le PC Portable 16 pouces HP Victus 16-s0010nf qui passe à 1249,99 € avec le code RDC50. On le trouve habituellement à 1599 €.

Il comporte un écran IPS Full HD de 16.1 pouces IPS, un processeur AMD Ryzen 7 7840HS (8 coeurs), 16 Go de RAM DDR5, un SSD de 512 Go, une carte graphique dédiée GeForce RTX 4070 8 Go, un clavier rétro éclairé,. Il possède aussi le WiFi 6, le bluetooth 5.2, 2 ports USB 3.1 type C, un port USB 3.2 Gen 2, un port HDMI 2.1 et un port Ethernet.

L'ordinateur est livré sans OS mais vous pouvez facilement installer Windows 10/11 pour quelques euros.

Une bonne affaire pour un portable performant dernière génération : bureautique, Internet, multimédia et gros jeux.


Voir le bon plan
SSD Interne M.2 NVMe Samsung 980 1 To (3500 Mo/s) à 49,99 €
49,99 € 64 € -22% @Amazon

Amazon fait une superbe promotion sur le SSD Interne M.2 NVMe PCIe 3.0 Samsung 980 1 To qui passe à 49,99 €. On le trouve ailleurs à partir de 64 €. Ce SSD offre des taux de transfert de 3500 Mo/s.


Voir le bon plan
PC portable 15.6 pouces Asus F15 (Full HD 144Hz, Core i5-11400H, 16Go, SSD 512Go, RTX 3050) à 699,99 €
699,99 € 799,99 € -13% @Cdiscount

Cdiscount fait une belle promotion sur le PC portable 15.6 pouces Asus F15 qui passe 699,99 € au lieu de 799,99 €. Ce PC portable possède un écran 15.6 pouces Full HD à 144 Hz, un processeur Intel Core i5-11400H, 16 Go de RAM, un SSD de 512 Go et une carte graphique GeForce RTX 3050 4 Go. 

Un portable petit prix idéal pour un usage polyvalent : bureautique, multimédia et jeux !


Voir le bon plan
SSD externe portable USB 3.1 SanDisk Extreme NVMe 2 To (1050 Mo/s) à 135,99 €
135,99 € 180 € -24% @Amazon

Amazon fait une promotion sur le SSD externe portable USB 3.1 SanDisk Extreme NVMe 2 To qui passe à 135,99 € alors qu'on trouve le SSD à plus de 180 € ailleurs. 

Le disque SSD SanDisk Extreme NVMe Portable 2 To permet, grâce à sa connectique USB 3.1, des haute vitesse de transfert pouvant aller jusqu'à 1050 Mo/s grâce au disque NVMe qu'il contient. Sa coque robuste et certifiée IP55 (eau et poussière) protège vos données partout où vous allez. Vous ne craindrez pas de l'emporter partout avec vous grâce à sa conception robuste et résistante avec un coeur de SSD résistant aux chocs. Le logiciel SanDisk inclu SecureAccess peut crypter vos fichiers personnels. Garantie 5 ans. Interface : USB 3.1 Type A et C.


Voir le bon plan
Kit de surveillance Tapo C420S2 (2 caméras + base avec alarme sonore, QHD, extérieur IP65, WiFi) à 181,81 € livré
181,81 € 249,99 € -27% @Amazon Allemagne

Amazon Allemagne fait une belle promotion sur le kit Tapo C420S2 qui passe à 175,45 €. Comptez 6,36 € pour la livraison en France soit un total de 181,81 € livré au lieu de 249,99 €. Ce kit comporte 2 caméras de surveillance extérieures sans fil IP65, définition 4MP (QHD 2560x1440) avec détection de mouvements, vision nocturne, alarme sonore et lumineuse, audio bidirectionnel, batterie 180 jours. Stockage gratuit en local sur carte microSD dans la base, sur un NAS (compatible Synology) ou bien dans le cloud avec le service Tapo Care (sur abonnement).


Voir le bon plan
Echelle télescopique Ansobea extensible à 3,8 m à 69,27 €
69,27 € 108,99 € -36% @Amazon

Amazon fait une promotion sur l'échelle télescopique Ansobea extensible à 3,8 m à 69,27 € au lieu de 108,99 €. Livrée avec 2 crochets. La livraison est gratuite.


Voir le bon plan

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