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 :

Appel d'une fonction avec cellules en arguments [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 41
    Par défaut Appel d'une fonction avec cellules en arguments
    Bonjour le forum

    Je bloque sur un problème de syntaxe. Si quelqu'un pouvait m'aider...

    J'ai créé une fonction F1 qui utilise 3 valeurs en arguments:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function F1(Cell1 As Range, Cell2 As Range, Cell3 As Range) As Double
    ...
    End Function
    Lorsque je l'utilise directement dans une feuille de calcul en référençant les cellules, tout fonctionne bien.
    Par exemple si je saisis =F1(A4;B4;C4) dans la cellule D4.

    Mais j'ai besoin d'appeler cette fonction à partir d'une procédure.
    J'ai saisi le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub S1()
    ...
        X = F1(Range(A4), Range(B4), Range(C4))
    ...
    End Sub
    Et j'obtiens une erreur d'exécution 1004 sur la méthode Range.

    Comment puis-je appeler ma fonction F1 sur les cellules A4, B4 et C4 au sein de ma procédure?

  2. #2
    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 : 67
    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
    Bonjour Alexandre,

    Astuce que j'utilise souvent

    Depuis la feuille de travail, enregistrer la fonction par l'enregistreur de macro.
    Utiliser le code obtenu dans une procédure plus globale.
    Coller la valeur à la formule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Function lafonction(x As Double, y As Double) As Double
    lafonction = (x * 2) + (y * 3)
    End Function
     
    Public Sub laprocédure()
    With Worksheets(1).Range("C9")
            .FormulaR1C1 = "=lafonction(RC[-2],RC[-1])"
            .Value = .Value
    End With
    End Sub
    Mais bizarre en effet.
    A titre d'information, tutoriel de référence
    les fonctions par Silkyroad

    Au demeurant, pourrais-tu nous retourner le code intégral de ta fonction et celui de son appel.

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    L'erreur ne serait-elle pas là? (manque les guillemets)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X = F1(Range("A4"), Range("B4"), Range("C4"))
    Cdlt

  4. #4
    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 Alexandre_P Voir le message
    J'ai saisi le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub S1()
    ...
        X = F1(Range(A4), Range(B4), Range(C4))
    ...
    End Sub
    Et j'obtiens une erreur d'exécution 1004 sur la méthode Range.
    L'argument d'un Range est une chaine de caractère.
    Ton code, tel qu'il est écrit, demande (par exemple) le Range dont l'adresse est dans la variable A4.
    Comme je suppose que A4 n'existe pas en tant que variable, tu demandes le Range de l'adresse... rien.
    Normal que VBA n'apprécie pas.

    Mets un Option Explicit avant ton code, ça t'obligera à déclarer tes variables et ça t'évitera ce type d'erreur.

  5. #5
    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 : 67
    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
    Pas vu. (Fin de journée pour Marcel!)

    Pour compléter, tu peux rendre cette déclaration obligatoire dans tous tes modules de par les options de ton VBE.
    Ce que personnellement je conseille fortement.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 41
    Par défaut
    Merci à tous
    J'ai ajouté l'Option Explicit et surtout les guillemets et ça fonctionne

  7. #7
    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 : 67
    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
    Bonjour à vous, bonjour au Forum,

    J'insiste.
    Il est utile de rendre obligatoire la déclaration de variables à tous les modules.
    Une fois pour toutes.
    Pour ce faire, dans l'éditeur VBE, Outils\Options Cocher la "déclaration des variables obligatoire"

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/06/2017, 13h10
  2. Réponses: 4
    Dernier message: 09/03/2014, 09h38
  3. appel d'une fonction avec pointeur comme argument
    Par airness86180 dans le forum Débuter
    Réponses: 1
    Dernier message: 06/03/2009, 13h34
  4. appel d'une fonction avec parametre.
    Par rollernox dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/10/2006, 23h07
  5. [FPDF] Erreur après appel d'une fonction avec include
    Par orus8 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 04/11/2005, 10h49

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