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 :

Formater le résultat d'une fonction perso sous VBA Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut Formater le résultat d'une fonction perso sous VBA Excel
    Bonjour à tous,

    Voici une petite fonction qui calcule une évolution en pourcentage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function Evolution(Encours, Anterieur)
     
    Evolution = (Encours - Anterieur) / Anterieur
    Selection.NumberFormat = "0.00%"
     
    End Function
    Je souhaiterais la mettre en forme directement à la suite du calcul. Malheureusement, la syntaxe que j'ai ajoutée en fin de code (Selection.NumberFormat = "0.00%"
    ) ne fonctionne pas.

    De plus j'ai déjà testé la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    evolution = formatnumber ((Encours - Anterieur) / Anterieur,2) & "%"
    L'inconvénient c'est qu'il me retourne le résultat en texte. (Cela ne m'intéresse pas vraiment).

    Si qqun peut m'aider merci bcp par avance.

  2. #2
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut
    Bonjour,

    comme précisé par la dernière phrase de l'introduction du tutoriel Les fonctions personnelles dans Excel, ce n'est pas possible …


    _______________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Abord on ne fait jamais de division dans vb ou presque
    Evolution = (Encours - Anterieur) / Anterieur
    Imaginons =>(Encours - Anterieur) =0 =>0/ Anterieur = err
    Imaginons=> Anterieur=0 =>1/ Anterieur=err
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Anterieur=0 then
    	Evolution=0
    Else
    	Evolution = (Encours - Anterieur) * (1/ Anterieur)
     
    End if
    De plus si tu passes une cellule en paramètre, autant l’utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evolution.NumberFormat = "0.00%"
    Et maitenant si tu veux que ton format soit pris en compte le faire avant de donner la valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function Evolution(Encours As Range, Anterieur)
    Dim Myval As Range
    Set Myval = Encours
     Myval.NumberFormat = "0.00%"
    If Anterieur = 0 Then
        Myval = 0
    Else
        Myval = (Encours - Anterieur) * (1 / Anterieur)
    End If
     
    End Function
    Sub test()
    ActiveCell = 50
    Evolution ActiveCell, 100
    End Sub
    Dernière modification par AlainTech ; 09/06/2013 à 19h18. Motif: Fusion de 2 messages identiques

  4. #4
    Membre actif
    Homme Profil pro
    Technicien Méthodes
    Inscrit en
    Mars 2013
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Technicien Méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2013
    Messages : 128
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par rdurupt Voir le message
    Bonjour,
    Abord on ne fait jamais de division dans vb ou presque

    Imaginons =>(Encours - Anterieur) =0 =>0/ Anterieur = err
    Désolé de te contredire, mais c'est faux, rouvre tes bouquins de maths

    0/x = 0 et non erreur. Il y a une erreur uniquement si le diviseur, ici Anterieur, est égal à 0

    Citation Envoyé par rdurupt Voir le message
    Imaginons=> Anterieur=0 =>1/ Anterieur=err
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If Anterieur=0 then
    	Evolution=0
    Else
    	Evolution = (Encours - Anterieur) * (1/ Anterieur)
     
    End if
    Ici aussi il y a une erreur.

    1/0 => est une forme indéterminée et donne +/- l'infini.
    De plus, Evolution = (Encours - Anterieur) * (1/ Anterieur) donnera une erreur de la meme maniere.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Le code fonctionne avec la procedure de test.
    Cependant la fonction me renvoie #valeur! qd je l'utilise directement ds excel ce que je souhaite faire ...

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour Guiiand,
    Il semble que ton conseille soit judicieux, je vais faire une expédition à la cave pour retrouver mes livres sous la poussière.
    miron_fds ta fonction ne retourne rien donc c’est normal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function Evolution(Encours As Range, Anterieur)
    Dim Myval As Range
    Set Myval = Encours
     Myval.NumberFormat = "0.00%"
    If Anterieur = 0 Then
        Myval = 0
    Else
        Myval = (Encours - Anterieur) * (1 / Anterieur)
    End If
     Evolution = "OK"
    End Function

  7. #7
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut formater le résultat d'une fonction perso
    bonjour,

    voir fichier joint.

    cordialement.
    Fichiers attachés Fichiers attachés

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 29
    Points : 13
    Points
    13
    Par défaut
    Je ne veux pas que les valeurs soit choisi arbitrairement mais par selection avec la souris comme une formule.

Discussions similaires

  1. [XL-2007] Fonction Left sous VBa EXCEL
    Par FramanKalima dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 18/06/2015, 21h50
  2. Résultat d'une fonction sous forme de tableau
    Par Touty01 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 31/05/2010, 23h35
  3. utiliser le résultat d'une requette Access sous VBA
    Par bossLINDROS dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 29/07/2008, 16h49
  4. [MySQL] Une fonction perso pour aléger le code...
    Par tsing dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/11/2005, 23h56
  5. Existe-t-il une fonction Eval() sous Delphi ?
    Par Hell dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2004, 17h45

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