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 :

fonction personnalisée VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Electricien
    Inscrit en
    Mai 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 56
    Points : 22
    Points
    22
    Par défaut fonction personnalisée VBA
    Bonsoir,

    J'ai utilisé cette fonction personnalisée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function concours(pays, nombrefrance, nombreetranger, juges, nombrejuges, certificats, nombrecertificats)
        For i = 1 To pays.Count
            If UCase(certificats(i)) = "OBTENU" Then
                nc = nc + 1
                If pays(i) <> "" Then If UCase(pays(i)) = "FRANCE" Then nf = nf + 1 Else ne = ne + 1
                If juges(i) <> "" Then If InStr(jugesstr, juges(i)) = 0 Then nj = nj + 1: jugesstr = jugesstr & juges(i)
            End If
        Next i
        concours = nf >= nombrefrance And ne >= nombreetranger And nj >= nombrejuges And nc >= nombrecertificats
    End Function
    la fonction est à utiliser dans une cellule excel comme n'importe quelle autre fonction excel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =concours(pays, nombrefrance, nombreetranger, juges, nombrejuges, certificats, nombrecertificats)

    pays : est la plage du tableau contenant les pays,
    nombrefrance : est le nombre minimum de certificats obtenus en France nécessaire
    nombreetranger : est le nombre minimum de certificats obtenus à l'Etranger nécessaire
    juges : est la plage du tableau contenant les noms des juges
    nombrejuges : est le nombre minimum de juges différents nécessaire
    certificats : est la plage contenant le statut des certificats
    nombrecertificats : est le nombre minimum de certificats obtenus nécessaire

    Dans cette fonction je voudrais juste qu'elle renvoi Vrai ou Faux quand je l'utilise et je dois pouvoir utiliser le vrai ou faux pour vérifier une autre condition

    Pouvez vous m'aider svp

  2. #2
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonsoir,
    Citation Envoyé par mickaeldu45 Voir le message
    Dans cette fonction je voudrais juste qu'elle renvoi Vrai ou Faux quand je l'utilise
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        concours = nf >= nombrefrance And ne >= nombreetranger And nj >= nombrejuges And nc >= nombrecertificats
    il suffit de mettre ceci en fonction du résultat déterminé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    concours = False
    ' ou
    concours = True

  3. #3
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 415
    Points : 16 257
    Points
    16 257
    Par défaut
    Bonjour

    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if concours = nf >= nombrefrance And ne >= nombreetranger And nj >= nombrejuges And nc >= nombrecertificats then true else false
    mais en principe ta formulation devrait fonctionner...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  4. #4
    Membre à l'essai
    Homme Profil pro
    Electricien
    Inscrit en
    Mai 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 56
    Points : 22
    Points
    22
    Par défaut
    Bonjour 78chris

    Tout d'abord merci pour ta réponse j'ai essayé ta proposition mais lorsque je modifie une erreur de compilation apparaît (Attendu : numéro de ligne ou étiquette ou instruction ou fin d'instruction

    Citation Envoyé par 78chris Voir le message
    Bonjour

    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if concours = nf >= nombrefrance And ne >= nombreetranger And nj >= nombrejuges And nc >= nombrecertificats then true else false
    mais en principe ta formulation devrait fonctionner...

  5. #5
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Essai en mettant des parenthèses
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    concours = (nf >= nombrefrance) And (ne >= nombreetranger) And (nj >= nombrejuges) And (nc >= nombrecertificats)
    Parfois je pense qu'Excel interprète avec des priorités de calcul que nous n'attendons pas, je doute pourtant que ce soit le cas ici mais après avoir eu quelques mauvaises surprises, je mets des parenthèses quand il y a plusieurs terme dans une expression booléenne.

    Et en précisant le type de la variable de sortie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function concours(pays, nombrefrance, nombreetranger, juges, nombrejuges, certificats, nombrecertificats) as Boolean
    [Edit]
    Pour l'erreur rencontré avec le code du dessus, c'est parce que tu n'as pas précisé à quelle variable tu voulais attribuer True ou False
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (concours = nf >= nombrefrance) And (ne >= nombreetranger) And (nj >= nombrejuges) And (nc >= nombrecertificats) then concours=true else concours=false
    [/Edit]

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre à l'essai
    Homme Profil pro
    Electricien
    Inscrit en
    Mai 2018
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 56
    Points : 22
    Points
    22
    Par défaut
    Bonjour Qwazerty,

    J'ai essayé d'utiliser tes lignes de codes mais je n'obtient toujours pas le résultat escompté, je te met en PJ le fichier de mise en situation de la formule :

    En cellule S3 j'utilise ma formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =concours(D4:D6;1;0;L4:L6;3;Q4:Q6;3)
    Lorsque toute mes conditions sont réunies un VRAI apparaît dans la cellule S3

    Dans la cellule S4 j'utilise cette formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(S3="VRAI";"OK";"NOK")
    Ma question est la suivante : théoriquement si S3 m'affiche VRAI alors S4 devrait me renvoyer OK mais la ce n'est pas le cas pourquoi ?

    Voici le code de ma fonction personnalisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function concours(pays, nombrefrance, nombreetranger, juges, nombrejuges, certificats, nombrecertificats)
        For i = 1 To pays.Count
            If UCase(certificats(i)) = "OBTENU" Then
                nc = nc + 1
                If UCase(pays(i)) = "FRANCE" Then nf = nf + 1 Else ne = ne + 1
                If InStr(jugesstr, juges(i)) = 0 Then nj = nj + 1: jugesstr = jugesstr & juges(i)
            End If
        Next i
        concours = nf >= nombrefrance And ne >= nombreetranger And nj >= nombrejuges And nc >= nombrecertificats
    End Function
    formule personalisé.xlsm

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(S3=VRAI;"OK";"NOK")
    VRAI (booléen =1 sur une feuille) n'est pas pareil que la chaine "VRAI"

    Par ailleurs, tu concatènes inutilement les noms des juges.
    eric

  8. #8
    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 761
    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 761
    Points : 28 619
    Points
    28 619
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Dans la cellule S4 j'utilise cette formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(S3="VRAI";"OK";"NOK")
    Ma question est la suivante : théoriquement si S3 m'affiche VRAI alors S4 devrait me renvoyer OK mais la ce n'est pas le cas pourquoi ?
    VRAI est une valeur booléenne et pas une chaîne de caractères donc pour tester la valeur renvoyée par la fonction personnalisée si celle-ci est booléenne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(S3=VRAI;"OK";"NOK")
    ou encore
    [EDIT]
    Désolé Eriiic mais j'ai été au téléphone entre le début de la rédaction de ma réponse et l'envoi de celle-ci

    J'en profite pour signaler qu'il est possible de se passer d'une cellule intermédiaire et d'imbriquer directement la fonction personnalisée dans la fonction SI comme par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(concours(D4:D6;1;0;L4:L6;3;Q4:Q6;3);"OK";"NOK")
    Je n'ai pas vérifié ni tenté de comprendre la fonction Concours mais j'ajouterai qu'il serait préférable de typer la fonction personnalisée ainsi que ses arguments.

    A lire éventuellement Les fonctions personnelles dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [XL-2013] Etiquettes d'aide et fonctions personnalisées VBA
    Par AurelienG_ dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/01/2018, 10h02
  2. Fonction personnalisée VBA Excel
    Par PM2801 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/05/2014, 20h23
  3. [VBA]Fonction personnalisée avec "If"
    Par FWSMulder dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/08/2008, 23h28
  4. [VBA-E] : Fonction personnalisée moyennes trimestrielles
    Par Geoffray dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/06/2006, 18h25
  5. [VBA-E] Fonction personnalisée moyenne à fin M
    Par Geoffray dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/06/2006, 20h58

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