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
    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é
    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
    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
    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
    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
    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<img src="images/smilies/icon_biggrin.gif" border="0" alt="" title=":D" class="inlineimg" />6;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



  7. #7
    Membre expert
    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

    Ce message n'a pas pu être affiché car il comporte des erreurs.
    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