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 :

Comment entrer une fonction typée sur tableur [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Comment entrer une fonction typée sur tableur
    Salut les amis,

    Question simple.

    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
    Option Explicit
     
    Public Type mavariabletypée
            nb_1 As Long
            nb_2 As Long
    End Type
     
    Public Function lafonctiontypée(lenombre As Long) As mavariabletypée
     
    With lafonction
        .nb_1 = lenombre * 2
        .nb_2 = lenombre * 3
    End With
     
    End Function
    Comment entrer sur tableur la fonction lafonctiontypée

    Si j'entre
    =lafonctiontypée(50).nb_1
    La cellule retourne l'erreur
    CHAMP!
    Par avance, merci.

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 583
    Par défaut
    bonjour,
    le réceptacle doit être typé comme la fonction or il d'agit d'un range et un type personnalisé!

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Merci pour ta réponse.

    Pourrais-tu être un peu plus explicite, s'il te plaît.

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 583
    Par défaut
    Bonjour,
    Une cellule est un objet qui contient intrinsèquement des méthodes de conversion !
    String = Integer on appel cela la surcharge des opérateurs. On détermine toutes méthodes de conversions de type pour la fonction = !
    String = Integer, String = Date, Integer = String etc…

    Range.value= mavariabletypée.nb_1 ???????
    Attention ici on est dans un formule pas en vba !

  5. #5
    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
    Il est très rare que je mette une matrice en output d'une fonction personnalisée mais quand je le fais, je procède ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Function LAFONCTION(lenombre As Long)
        LAFONCTION = Array(lenombre * 2, lenombre * 3)
    End Function
    Ou, légèrement plus propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Base 1
    Public Function LAFONCTION(lenombre As Long)
        Dim MaVar(2) As Long
        MaVar(1) = lenombre * 2
        MaVar(2) = lenombre * 3
        LAFONCTION = MaVar
    End Function
    Et dans Excel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    =INDEX(LAFONCTION();2)
    =SOMME(LAFONCTION)
    ... etc ...
    Ca n'est pas très propre de ne pas typer une fonction mais je n'ai pas trouvé comment faire autrement.
    L'avantage, c'est que ça fonctionne.

  6. #6
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Merci Thumb down pour cette précision.

    Hé, merci Menhir.

    Je considère le fait de n'avoir que cette ressource est une lacune d'Excel.
    Si l'on peut intégrer une fonction personnalisée, alors pourquoi ne pas envisager ce type de fonction basée sur un Type?

    A bientôt pour de nouvelles aventures.

  7. #7
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour Marcel
    Citation Envoyé par MarcelG Voir le message
    Je considère le fait de n'avoir que cette ressource est une lacune d'Excel.
    Une formule ne peut retourner qu'une seule donnée dans une cellule.
    C'est à dire une valeur parmi les quatre grands types de variables Excel : un nombre, un texte, un booléen ou une erreur (et uniquement une de celles prévues) et rien d'autre.
    Pas de variable VBA, donc pas d'énumération, pas de variable typée, pas de collection, pas d'objet, pas de classe, ....

    Est-ce pour autant une lacune ???
    Comment pourrait-on réemployer une de ces dernières valeurs ???

  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 Patrice740 Voir le message
    C'est à dire une valeur parmi les quatre grands types de variables : un nombre, un texte, un booléen ou une erreur (et uniquement une de celles prévues) et rien d'autre.
    Tu oublies un type : une matrice.
    Il existe en natif dans Excel des fonctions qui renvoient une matrice. La seule que j'utilise régulièrement est FREQUENCE() mais il en existe plusieurs autres : INVERSEMAT(), MODE.MULTIPLE(), TRANSPOSE(), etc.
    Même INDIRECT() et DECALER() peuvent renvoyer une matrice.

  9. #9
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour Menhir,

    Citation Envoyé par Menhir Voir le message
    Tu oublies un type : une matrice
    Non, je n'ai rien oublié ... (SIC le grand Charles)
    Relis :
    Citation Envoyé par Patrice740 Voir le message
    Une formule ne peut retourner qu'une seule donnée dans une cellule.
    Une formule matricielle ne renvoie qu'une seule valeur par cellule.

  10. #10
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 583
    Par défaut
    Exactement, excel à été implémenté autour de type connus .{surcharge des opérateurs}.
    Vba ne permet pas de créer ses propre surcharge et quand bien même il faudrait définir la valeur par défaut
    =lafonctiontypée(50) retourne nb_1 ou nb_2.

  11. #11
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    OK à tous les 3. Merci et bravo pour vos lumières.

    Peut-être pourrait-on s'interroger, pour reprendre l'expression de Thumb down, sur l'implémentation d'Excel.
    C'est tout ce que je voulais dire.
    Mais, je l'avoue, ce sont des notions qui m'échappent quelque peu.

    Bonne soirée à vous. Bonne soirée au Forum.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 22/02/2007, 14h51
  2. Comment lancer une fonction présente sur une autre page ?
    Par mappy dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/12/2006, 14h44
  3. Réponses: 24
    Dernier message: 26/05/2006, 15h08

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