VBA fonction personnalisée
bonjour,
Si tu nous montrais ce que tu as essayé de faire et les problèmes que tu rencontres ?
j
oh oui avec plaisir même si ca n'est pas très glorieux ...
J'ai aussi essayé ca:
Option Explicit 'obligation de déclarer les variables
Const DebEtu_Cell = "A2"
Public Sub Calcul_notes()
Dim MC As Range
'se positionner sur le premier étudiant
Set MC = Range(DebEtu_Cell)
'itérer vers le bas tant la cellule est non vide
Do While Not IsEmpty(MC.Value)
'calcul de la moyenne
If MC.Offset(0, 1).Value*4 + MC.Offset(0, 2).Value*2 + MC.Offset(0, 3).Value*3/10>10
And MC.Offset(0, 4).Value<10
Then
MC.Offset(0, 5).Value = "Ajourné à cause du stage"
Else
MC.Offset(0, 5).Value = "Admis"
End If
'Se positionner sur la cellule du dessous
Set MC = MC.Offset(1, 0)
Loop
End Sub
Et plein d'autres que j'ai effacées ...
Bonjour,
une fonction personnalisée s'utilise comme n'importe quelle autre fonction excel.
ici tu as défini une fonction qui s'appelle moyenne (si ta version excel est FR, prends un autre nom car ce nom correspond déjà à une fonction excel existante) et que tu pourras utiliser ainsi.
dans une cellule, tu peux mettre la formule suivante
=moyenne(B2,C2,D2)
et cela te renverra la moyenne dans la cellule dans laquelle tu as mis la formule.
de la même manière tu peux définir une fonction decision qui prendra les paramètres nécessaires à determiner la décision. (faire le calcul de la moyenne et faire les tests pour retourner la décision adéquate).
re,
Merci pour votre retour même si je n'ai pas tout compris, du coup j'ai fait ca ... mais question: est ce une VBA? et je ne parviens pas à mentionner la moyenne quand l'élève est admis. J'ai également modifié la moyenne de simon pour verifier ma formule pour ajourné à cause du stage
Effectivement, il est possible d'arriver au même résultat en n'utilisant que des fonctions standard d'Excel.
essaie ta fonction personnalisée que tu as appelée moyenne, mais change son nom en decision par exemple (Mettre ce code dans un nouveau module)
Function decision(pg, pj, ps)
decision = (pg * 4 + pj * 2 + ps * 3) / 9 'moyenne pondérée
End Functionet utilise-la comme une fonction normale excel
=decision(B2,C2,D2)
Si tu as compris comment ceci fonctionne, tu peux adapter le code de la fonction pour renvoyer la décision au lieu de la moyenne pondérée.
re,
retourne dans ta feuille excel et mets en F2 la formule suivante :
=decision(B2,C2,D2)
pour utiliser la fonction personnalisée que tu as définie.
une video à ce sujet.
re,
en effet tu y es presque,
voici comment faire
Function decision(pg, pj, ps, s)
'pg pole gestion, pj, pole juridique, ps, pole sciences, s, stage
Dim mp
mp = (pg * 4 + pj * 2 + ps * 3) / 9 'moyenne pondérée
If mp >= 10 And s >= 10 Then
decision = "admis avec " & Format(mp, "0.00") & " de moyenne" ' renvoie le texte admis avec moyenne avec 2 chiffres décimaux
ElseIf mp >= 10 And s < 10 Then
decision = "ajourné à cause du stage" 'renvoie le texte ajourné à cause du stage
Else
decision = "ajourné" 'renvoie le texte ajourné
End If
End Functionil te reste à renommer cette fonction pour lui donner le nom RES, comme demandé dans l'énoncé.
j'ai également posé la question à chatGPT (de openAI.org), voici la réponse que j'ai reçue :
Er Des
peux-tu me faire une fonction personnalisée VBA excel qui calcule une moyenne pondérée sur 3 arguments, le premier fois 4, le deuxième fois 2 et le dernier fois 3 et affiche la décision suivante :
Bien sûr, voici comment cela pourrait être réalisé en utilisant une fonction personnalisée VBA dans Excel :Function MoyennePonderee(arg1 As Double, arg2 As Double, arg3 As Double) As String Dim result As Double r esult = (arg1 * 4 + arg2 * 2 + arg3 * 3) / 9 If result >= 7 Then MoyennePonderee = "Admis" Else MoyennePonderee = "Refusé" End If End FunctionPour utiliser cette fonction dans une cellule de votre feuille de calcul, vous pouvez simplement l'appeler comme ceci :
=MoyennePonderee(A1, B1, C1)Ceci calcule la moyenne pondérée en utilisant les valeurs dans les cellules A1, B1 et C1 et affiche "Admis" ou "Refusé" en fonction du résultat obtenu.
Er Des
la décision devrait être la suivante : si moyenne pondérée est >=10 et résultat du stage >=10 renvoyer "admis avec x de moyenne", sinon si moyenne pondérée >=10 et stage <10 renvoyer "ajournée à cause du stage", sinon retourner "ajourné"Pour prendre en compte ces nouvelles conditions dans votre fonction, voici comment cela pourrait être réalisé :
Function MoyennePonderee(arg1 As Double, arg2 As Double, arg3 As Double, stage As Double) As String Dim result As Double result = (arg1 * 4 + arg2 * 2 + arg3 * 3) / 9 If result >= 10 And stage >= 10 Then MoyennePonderee = "Admis avec " & result & " de moyenne" ElseIf result >= 10 And stage < 10 Then MoyennePonderee = "Ajourné à cause du stage" Else MoyennePonderee = "Ajourné" End If End FunctionPour utiliser cette fonction dans une cellule de votre feuille de calcul, vous pouvez simplement l'appeler comme ceci :
=MoyennePonderee(A1, B1, C1, D1)Ceci calcule la moyenne pondérée en utilisant les valeurs dans les cellules A1, B1 et C1, et utilise la valeur dans la cellule D1 pour le stage. La fonction affiche la décision appropriée en fonction des résultats obtenus.
Er Des
la fonction personnalisée devrait s'appeler RESPour renommer votre fonction personnalisée en RES, voici comment cela pourrait être réalisé :
Function RES(arg1 As Double, arg2 As Double, arg3 As Double, stage As Double) As String Dim result As Double result = (arg1 * 4 + arg2 * 2 + arg3 * 3) / 9 If result >= 10 And stage >= 10 Then RES = "Admis avec " & result & " de moyenne" ElseIf result >= 10 And stage < 10 Then RES = "Ajourné à cause du stage" Else RES = "Ajourné" End If End FunctionPour utiliser cette fonction dans une cellule de votre feuille de calcul, vous pouvez simplement l'appeler comme ceci :
=RES(A1, B1, C1, D1)Ceci calcule la moyenne pondérée en utilisant les valeurs dans les cellules A1, B1 et C1, et utilise la valeur dans la cellule D1 pour le stage. La fonction affiche la décision appropriée en fonction des résultats obtenus.
a nouveau bluffé par la manière dont l'Intelligence Artificielle ChatGPT a compris la question et par le résultat obtenu.
Personnellement, bluffée par vous deux, merci pour votre patience et votre pédagogie.
Je vous souhaite d'excellentes fêtes de fin d'année
Bonjour et Meilleurs Voeux 2023 Hyunahyoo, H2so4,
j'ai également posé la question à chatGPT (de openAI.org), voici la réponse que j'ai reçue :
Peut être lors d'un prochain défi, ce serait l'occasion d'avoir ce matou comme participant...
Mais il me semble faire des codes plus longs, à moins qu'il y ait une option Reduce
Sinon, par une double condition IIF, en deux lignes:
Function RES$(pg, pj, ps, rs As Double)
Note = (pg * 4 + pj * 2 + ps * 3) / 9
RES = IIf(Note < 10, "ajourné", IIf(Note >= 10 And rs >= 10, "admis avec " & Format(Note, "0.00") & " de moyenne", " ajourné à cause du stage"))
End FunctionA +
bonsoir X Cellus,
voici la réponse de chatGPT à une demande de raccourcir le code
moi : peux-tu réduire le code suivant au maximum ?
Function RES(arg1 As Double, arg2 As Double, arg3 As Double, stage As Double) As String
Dim result As Double result = (arg1 * 4 + arg2 * 2 + arg3 * 3) / 9
If result >= 10 And stage >= 10 Then
RES = "Admis avec " & result & " de moyenne"
ElseIf result >= 10 And stage < 10 Then
RES = "Ajourné à cause du stage"
Else
RES = "Ajourné"
End If
End FunctionVoici comment on peut réduire le code de la fonction RES :
Function RES(arg1 As Double, arg2 As Double, arg3 As Double, stage As Double) As String
Dim result As Double
result = (arg1 * 4 + arg2 * 2 + arg3 * 3) / 9
If result >= 10 And stage >= 10 Then
RES = "Admis avec " & result & " de moyenne"
ElseIf result >= 10 And stage < 10 Then
RES = "Ajourné à cause du stage"
Else
RES = "Ajourné"
End If
End Functionmoi : peux-tu utiliser l'instruction IIF ?
Oui, voici comment on peut utiliser l'instruction IIF pour réduire encore plus le code de la fonction RES :
Function RES(arg1 As Double, arg2 As Double, arg3 As Double, stage As Double) As String
Dim result As Double
result = (arg1 * 4 + arg2 * 2 + arg3 * 3) / 9
RES = IIF(result >= 10, IIF(stage >= 10, "Admis avec " & result & " de moyenne", "Ajourné à cause du stage"), "Ajourné")
End FunctionL'instruction IIF (si...alors...sinon) permet de simplifier la syntaxe des conditions en évitant l'utilisation de la structure If...Then...Else.
Regenerate response



