VBA fonction personnalisée

Bonjour à Tous

ça fait 2 jours que je bloque sur un exercice... si l'un d'entre vous aurait la gentillesse te la capacité de m'aider...

un grand merci d'avance

vba

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 ...

image

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).

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

image

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 Function

et 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.

Bon... j'ai changé "décision" mais maintenant a chaque fois ca me demande le nom de la macro

image

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.

j'avais déjà regardé les vidéo, comme plein d autres

Bon je me rapproche mais elle ne fonctionne toujours pas et je ne sais pas comment mettre la moyenne à la place du XX.XX

image

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 Function

il 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 Function

Pour 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 Function

Pour 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 RES

Pour 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 Function

Pour 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 Function

A +

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 Function

Voici 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 Function

moi : 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 Function

L'instruction IIF (si...alors...sinon) permet de simplifier la syntaxe des conditions en évitant l'utilisation de la structure If...Then...Else.

Regenerate response

Rechercher des sujets similaires à "vba fonction personnalisee"