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 :

Exécuter une fonction personnalisée sur cellule variable [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 14
    Par défaut Exécuter une fonction personnalisée sur cellule variable
    Bonjour à tous,

    Tout d'abord je tiens à préciser que l'on va sûrement me conseiller de faire cela sous Excel et non VBA mais je n'ai pas le choix, c'est un projet d'études VBA obligatoirement.

    Mon problème:
    Je suis sur un userform qui remplit une base de données vendeurs sur ma feuille excel (code unique, nom, prénom, date de naissance etc...) chacun sur une ligne. La colonne G doit correspondre au pourcentage du nombre de transactions réalisées par le vendeur. Ces transactions sont résumées sur une autre feuille où figure évidemment le code du vendeur je me suis donc dit que je pouvais passer par une fonction personnalisée via un CountIf comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function proportionDesVentes(sellerID As Variant, transacList As Range) As Double
    Application.Volatile
    Dim nombreapparition As Integer, totaltrans As Integer
    nombreapparition = Application.WorksheetFunction.CountIf(transacList, sellerID)
    totaltrans = Sheets("Liste des transactions").Cells(Rows.Count, 4).End(xlUp).Row - 1
    proportionDesVentes = (nombreapparition) * 100 / (totaltrans)
    End Function

    Ma fonction fonctionne parfaitement quand je l'utilise directement sur Excel comme une fonction basique. Néanmoins je souhaiterai que en validant mon userform la fonction s'applique automatiquement dans la cellule G pour la ligne que je crée ET que la formule apparaisse (pas juste le résultat). J'ai essayé ceci mais en vain après des heures à passer par des variables ou non je n'y arrive pas surtout que si je fais afficher une Msgbox avec contenu cela m'affiche bien le code unique mais pourquoi la fonction ne s'y applique pas?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Sheets ("Liste des vendeurs")
    'récupère le code unique du vendeur qui est en colonne A et sur la ligne créée par l'userform
    contenu = Cells(Derlignevendeur + 1, 1).Value   
     'calcule le pourcentage du nombre total de ventes qu'il ou elle a réalisé
    .Cells(Derlignevendeur + 1, 7).FormulaLocal = "=proportionDesVentes(contenu ;'Liste des transactions'!D:D)"
    End With
    Je vous remercie de m'apporter des éclairages!

  2. #2
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    as tu essayé dans ce style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(Derlignevendeur + 1, 7).FormulaR1C1= "=formule"

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 14
    Par défaut
    Oui j'ai essayé toutes les formes de .Formula à .FormulaLocal en passant par .FormulaR1C1

    Je ne sais pas si j'ai été claire, mais avec .FormulaLocal ma fonction s'affiche bel et bien dans ma cellule souhaitée mais elle ne récupère pas le contenu de la A correspondant à la ligne donc le résultat affichée est toujours 0 c'est pourquoi je pense que le problème vient de ma variable contenu que ma fonction n'arrive pas à prendre en compte...

  4. #4
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gedaes Voir le message
    Oui j'ai essayé toutes les formes de .Formula à .FormulaLocal en passant par .FormulaR1C1

    Je ne sais pas si j'ai été claire, mais avec .FormulaLocal ma fonction s'affiche bel et bien dans ma cellule souhaitée mais elle ne récupère pas le contenu de la A correspondant à la ligne donc le résultat affichée est toujours 0 c'est pourquoi je pense que le problème vient de ma variable contenu que ma fonction n'arrive pas à prendre en compte...
    elle s'affiche en texte
    peut être une question de langue anglais/français
    si c'est le cas , normalement en te plaçant dans la formule et faisant entrée ou F9 le calcul devrait se faire

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 14
    Par défaut
    En me plaçant sur la formule dans la cellule Excel c'est bien cela? Non je fais entrée, le calcul se refait mais me redonne 0

    J'ai essayé de ne pas passer par cette variable contenu et de donner directement dans l'application de ma fonction la variable cherchée mais je n'ai pas non plus réussi...

  6. #6
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    et un truc de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Derlignevendeur + 1, 7).FormulaLocal = "=proportionDesVentes(R0C-7 ;'Liste des transactions'!D:D)"

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 14
    Par défaut
    toujours 0 alors que la formule est bien écrite dans la barre mais que pourtant je devrais avoir 1/2...

    cela pourrait-il venir du type que j'ai donné à ma première variable dans ma déclaration de fonction par hasard? Variant convient-il pour stocker les données à l'intérieur d'une cellule?
    Function proportionDesVentes(sellerID As Variant, transacList As Range) As Double

  8. #8
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    variant c'est le passe partout, ça prend juste le plus de place en mémoire , c'est Excel qui s'adapte
    essayes peut etre de concatener ta formule
    "=maformule(" & ma variable & " suite "

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 14
    Par défaut
    Sous tes conseils j'ai fait ceci c'est cela? c'est ce que tu entendais par là?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(Derlignevendeur + 1, 7).FormulaLocal = "=proportionDesVentes(""& contenu &"" ;'Liste des transactions'!D:D)"
    j'ai doublé les guillemets pour que ça ne se confonde pas avec la fin de formule mais j'ai un message d'erreur 1004 "Erreur définie par l'application ou par l'objet"

  10. #10
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    le doublement de guillemet peut etre devant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(Derlignevendeur + 1, 7).FormulaLocal = ""=proportionDesVentes( " & contenu & " ; Liste des transactions!D:D)""
    mais c'est sans garantie, le formula je m'en sers tres peu

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2017
    Messages : 14
    Par défaut
    non toujours pas... le problème reste entier je ne sais pas ce qui cloche dans mon appel de fonction, merci de toutes tes propositions en tout cas!

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Sans préjuger (je ne m'intéresse qu'à la syntaxe de la formule) de ce que fait la fonction, la formule devrait être, si contenu est une variable string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=proportionDesVentes(""" & contenu & """ ; Liste des transactions!D:D)"
    pour formulalocal
    et/ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=proportionDesVentes(""" & contenu & """ , Liste des transactions!D:D)"
    pour formula

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/06/2017, 17h38
  2. Réponses: 8
    Dernier message: 17/03/2008, 13h01
  3. Réponses: 3
    Dernier message: 29/01/2008, 16h17
  4. Exécuter une fonction sur le onchange d'un select
    Par Lung dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 20/06/2006, 15h05
  5. [VB.NET] Exécuter une fonction VB sur un Datagrid
    Par MiJack dans le forum Windows Forms
    Réponses: 3
    Dernier message: 24/09/2004, 14h45

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