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
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2018
    Messages : 55
    Points : 21
    Points
    21
    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 éprouvé
    Inscrit en
    septembre 2007
    Messages
    617
    Détails du profil
    Informations forums :
    Inscription : septembre 2007
    Messages : 617
    Points : 1 007
    Points
    1 007
    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
    6 331
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : février 2010
    Messages : 6 331
    Points : 11 777
    Points
    11 777
    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

    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
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Electricien
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2018
    Messages : 55
    Points : 21
    Points
    21
    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 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : avril 2002
    Messages : 3 397
    Points : 7 646
    Points
    7 646
    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
    L'utilisation de l’éditeur de message

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

    Informations professionnelles :
    Activité : Electricien
    Secteur : Industrie

    Informations forums :
    Inscription : mai 2018
    Messages : 55
    Points : 21
    Points
    21
    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 260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2007
    Messages : 2 260
    Points : 3 773
    Points
    3 773
    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

    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    janvier 2010
    Messages
    9 024
    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 : 9 024
    Points : 21 397
    Points
    21 397
    Billets dans le blog
    9
    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
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

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, 11h02
  2. Fonction personnalisée VBA Excel
    Par PM2801 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/05/2014, 21h23
  3. [VBA]Fonction personnalisée avec "If"
    Par FWSMulder dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/08/2008, 00h28
  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, 19h25
  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, 21h58

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