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 récupérer via VBA les arguments d’une fonction excel contenue dans une cellule ?


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut comment récupérer via VBA les arguments d’une fonction excel contenue dans une cellule ?
    Bonjour,

    Je travaille actuellement sur un projet de création d’une fenêtre spécifique (via un userform) pour indiquer les paramètres une formule excel spécifique, un peu à la manière de lorsque l’on clique sur « fx » à coté de la barre de formule.

    Pour cela, je construis une macro et un useform.

    Mon problème est : comment récupérer via VBA les arguments d’une fonction excel contenue dans une cellule ? (chaque argument pouvant lui-même contenir des formules bien sûr)

    J'ai pensé me lancer dans une analyse de chaque caractère pour arriver à detecter les points virgules mais avec les sous-fonctions ça rend la chose trop complexe pour être fiable..

    Merci d'avance pour votre aide !
    Paul.

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Bonjour,

    Est-ce que tu parles de fonctions personnalisées seulement ou toutes les fonctions, même celles d'Excel ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Août 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2011
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Les 2 ! mais c'est avant tout pour une fonction "personnelle"

    Pour être plus clair voici un exemple :
    Dans la cellule D5, la formule est "=MaFctPerso(Argument1;left(A2;3);Argument3)"
    J'aimerai faire un userform dont la base serai:
    ------------------------------
    | Détails de MaFctPerso: |
    | Argument1 = Argument 1 |
    | Argument2 = left(A2;3) |
    | Argument3 = Argument3 |
    ------------------------------

    Toute la partie construction / alimentation du userform, j'ai aucun problème,
    mais comment "déconstruire la formule de la cellule pour obtenir les 3 arguments de la fct ?

    Merci d'avance,

  4. #4
    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 !

    Récupérer la formule via la propriété FormulaLocal puis utiliser la fonction Split avec le ; comme séparateur,

    se référer à l'aide VBA intégrée …

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Points : 5 901
    Points
    5 901
    Par défaut
    Le problème que je vois, c'est le nombre de parenthèses et de ";"
    Ça va être difficile de différencier les parenthèses de la formule telle quelle et celles intégrées à d'autres formules à l'intérieur.

    Je pense que le mieux serait de prendre tout ce qu'il y a entre les 2 parenthèses extérieures dans un premier temps.
    Par la suite, y aller en boucle, un caractère à la fois pour trouver chaque paramètre ou fonction.

    J'ai fais un test avec l'exemple que tu donnes et on voit que le 2e paramètre se décompose, donc Split ne suffira pas...
    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
    16
    17
    18
    19
    20
    21
    22
    Sub ExtraireParametres()
        Dim I As Long
        Dim Tablo
        Dim strTemp As String
     
        If Left(ActiveCell.Formula, 1) = "=" Then
            'Isoler les paramètres
            strTemp = Right(ActiveCell.Formula, Len(ActiveCell.Formula) - InStr(1, ActiveCell.Formula, "("))
            strTemp = Left(strTemp, Len(strTemp) - 1)
            MsgBox strTemp
     
            Tablo = Split(strTemp, ",")
            strTemp = ""
     
            For I = 0 To UBound(Tablo)
                strTemp = strTemp & Tablo(I) & vbCrLf
            Next
     
            MsgBox strTemp
        End If
     
    End Sub

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 954
    Points : 28 962
    Points
    28 962
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La fenêtre d'insertion d'Excel proposant le même service en sélectionnant dans la liste Personnalisée n'est elle pas suffisante ?
    Sachant que l'on peut aussi placer notre fonction personnalisée dans une des catégories existantes dans excel

  7. #7
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par popaul88 Voir le message
    Mon problème est : comment récupérer via VBA les arguments d’une fonction excel contenue dans une cellule ? (chaque argument pouvant lui-même contenir des formules bien sûr)

    J'ai pensé me lancer dans une analyse de chaque caractère pour arriver à detecter les points virgules mais avec les sous-fonctions ça rend la chose trop complexe pour être fiable..
    Bonjour.

    C'est le type de problème idéal pour une fonction récursive.

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/05/2014, 11h10
  2. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  3. Réponses: 6
    Dernier message: 19/11/2010, 18h27
  4. [VBA-E] Lancement d'une macro en fonction du contenu d'une cellule
    Par Zak Blayde dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2007, 15h13
  5. [VBA-E] faire la moyenne et afficher dans une cellule
    Par tibss dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 15/05/2006, 17h03

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