Une question sur excel et vba

Fermé
antic80 - 8 nov. 2004 à 10:18
 Le Pingou - 25 déc. 2007 à 22:13
bonjour a tous

voila j'aimerai savoir comment faire pour qu'un code VBA s'execute a chaque fois que j'entre une nouvelle valeur.

je dois calculer les moyennes d'eleves mais le probleme c que je ne peut utiliser la fonction moyenne d'excel car je dois prendre en compte les coefficients de chaque note et aussi le fais que lorsque qu'un eleve est abs le programme gere ce cas de figure

merci a vous
A voir également:

21 réponses

Utilisateur anonyme
8 nov. 2004 à 12:53
Bonjour,

Function test()
Application.Volatile
'suite du code
'...
'...
End Function

Lupin

~L'essentiel est invisible pour les yeux~
~On ne voit bien qu'avec le coeur~
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
8 nov. 2004 à 16:59
Bonjour antic80,
Juste en passant, pouvez-vous donner un peu plus de détail..
Le coefficient se rapporte au branche (math > 3, français >1, hydraulique > 5).
Que se passe-t-il si l'étudiant est absent....

Salutations
Jean-Pierre
0
dans mon cas a chaque controle l'eleve a une note et un coefficient (1 ou 0,5) donc la moyenne de l'eleve sera chaque note multiplié par le coeff le tout divisé par le total des coeff mais dans le cas ou l'eleve est absent dans la cellule de la note on met "abs" il faut donc que le programme ne fasse pas l'operation. le programme ne dois prendre en compte que les notes.

si quelqu'un a une idée elle est la bien venue
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
9 nov. 2004 à 16:23
Bonjour antic80,
Juste en passant, pouvez-vous donner un peu plus de détail..
Le coefficient se rapporte au branche (math > 3, français >1, hydraulique > 5).
Que se passe-t-il si l'étudiant est absent....

Bonjour antic80,
Selon votre message je comprends ceci :
-contrôle >> contrôle de math, contrôle de français,… contrôle de mécanique
-coefficient >> 1x pour math, mécanique et 0.5x pour français
-il y a un nombre différent de contrôle par branche
-une moyenne par branche en tenant compte de « absent »
-moyenne générale en tenant compte du coefficient

Merci de m’avertir si ce n’est pas correct.
Je vous prépare la solution.


Salutations
Jean-Pierre
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
9 nov. 2004 à 16:32
Bonjour antic80,
J'ai encore, juste une petite question:
La structure de votre classeur, je pense comme cela:

1 feuille par élève pour toutes les branches
ou
1 feuille par branche pour tous les élèves?
Merci pour la précision.

Salutations
Jean-Pierre
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
9 nov. 2004 à 21:56
Bonjour antic80,
Voici ma proposition :
-1 feuille par branche (branche1, branche2,…..)
--col A > nom élève, Col B > Moyenne, Col C >nombre absence (abs), Col D et suivante selon date du contrôle.
Avec >> nom élève = « =Général!A3 », « =Général!A4 », ………
Avec>> Moyenne = « =MOYENNE(D3:M3) » la formule tiens compte de l’absence si la cellule correspondante est vide ou contient du texte.
Avec >> Nb absence = « =NB.SI(D3:M3;"abs") »

-1 feuille pour résultat général
-note : les colonnes B et C pour la moyenne générale et le nombre des absence
--Lig1 > les titres, col DE > Branche 1, col FG > Branche 2, …….
--Lig2 > coefficient, col D > 1, col F > 0.5, …
--Lig3 > sous titre, col A--DEFG…. >Elève, Note, Nb abs, Note, Nb abs, …..
--Dès Lig4 :
--Col A > nom élève
--Col B > Moyenne = ‘=((D4*$D$2)+(F4*$F$2)+(H4*$H$2)+(J4*$J$2))/SOMME($D$2:$J$2)’
--Col C > Nb abs Tot = ‘=SOMME(E4;G4;I4;K4)’
--Col D > note br1 = ’=Branche1!$B$3’, Col E >nb abs br2 = ’=Branche1!$C$3’, …
--Col ………….
J’ai construis un classeur sur cette base et le tout fonctionne parfaitement, si vous le désirez comme exemple je vous l’envoie volontiers.
Bonne semaine.


Salutations
Jean-Pierre
0
merci jean pierre pour m'avoir repondu mais je ne pense pas que cette solution s'adapte a mon probleme mais je la garde au cas ou ?

en fait c une feuille par matière dans une matière tu as une colonne nom et prénom ensuite tu as plusieurs colonnes pour les notes avec une cellule en haut ou on saisie le coeff et une cellule en dessous du coeff ou on saisie la note, et enfin une colonne pour la moyenne.

donc le programme prend chaque note pour l'eleve la multipli par le coeff et il additionne le tout puis divise par le nombre total de coeff.

la fonction moyenne ne marche pas si tu met a la place d'une note la valeur abs car tu obtient dans la formule 1*abs et ca il aime pas.

merci pour t future reponse
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
10 nov. 2004 à 11:59
Bonjour antic80,
C'est étrange, en lisant votre texte je constate que c'est exactement ce que j'ai fait, avec en plus 1 feuille pour le résultat d'ensemble. Ou alors je n'ai pas compris vos explications.
Par contre la fonction moyenne fonctionne parfaitement si une des cellules de note contient "abs" à la place.
Vous pouvez si vous le désirez, pingou_ccm@bluewin.ch,en toute confidentialité m'envoyer une copie du classeur, je suis en mesure de vous aider efficacement.
Bonne journée


Salutations
Jean-Pierre
0
oui mais vous ne tenez pas compte du coefficient appliquer a chaque note (1 ou 0.5)

en fait la moyenne sera note1 * coeff1 + note2*coeff2 + ..... le tout divisé par le total des coeff
si l'eleve est absent ca note sera abesent et le programme ne devra pas excuter note*coeff il devra passer a la note suivante


je n'ai pas de colonne pour le nombre d'absence non plus
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
10 nov. 2004 à 13:12
Bonjour antic80,
En relisant votre message il y a encore ceci qui n’est par clair :
1.- Chaque branche a 1 seul coefficient >>> oui, non
2.- Le coefficient intervient lors du calcul de la moyenne de toute les branches >>> oui, non
3.- Vous dite : le programme prend … Donc c’est une macro VBA >> oui, non
4.- Vous dite : la fonction moyenne ne marche pas …. Faite une copie et coller la..
Merci des réponses.


Salutations
Jean-Pierre
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
10 nov. 2004 à 13:15
Bonjour antic80,
Si je vous comprends bien, c'est la note qui a un coefficient et non la branche, c'est bien cela!!!

Salutations
Jean-Pierre
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
10 nov. 2004 à 13:32
Bonjour antic80,
Dans mon exemple, la colonne d’absence est uniquement comme contrôle du nombre d’absence lors du contrôle, c’est tout.
Pour moi la moyenne se calcul par branche >> Branche X : Moyenne(Note1,Note2,….NoteX) ; si une cellule contiens le texte « abs », la fonction en tiens compte (elle ne sera pas compté).
C’est dans la moyenne générale que je prends en compte le coefficient de chaque branche :
Moyenne Générale : (Branche X* coef 1 + Branche Y* coef 0.5 + Branche Z* coef 1)/ Somme(coef)
Vous pouvez si vous le désirez, pingou_ccm@bluewin.ch,en toute confidentialité m'envoyer une copie du classeur, je suis en mesure de vous aider efficacement.


Salutations
Jean-Pierre
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
10 nov. 2004 à 13:47
Bonjour antic80,
Veuillez m'excusez de revenir.
Dans le cas ou c'est un programme VBA qui fait les opérations, il faut faire une modification du code pour tenir compte des "abs".
Faites donc une copie et coller le sur votre prochain message!
Bonne semaine.

Salutations
Jean-Pierre
0
pour faire plus simple on va présenter le probleme en colonnes

la matière c les maths

colonne A on met toutes les notes de l'eleve en math
colonne B on met pour chaque note un coefficient (1 ou 0,5)

exemple en chiffre

colonne A | Colonne B
10 1
12 1
14 0,5

en dessous de ce tableau dans une unique cellule je dois obtenir la moyenne de l'eleve

cette moyenne sera calculer comme suit

((10*1)+(12*1)+(14*0,5))/(1+1+0.5)

le probleme c que si par exemple je met abs a la place de 12 la moyenne sera alors de ((10*1)+(14*0,5))/(1+0,5)

etant donnée que par une formule directement dans excel je peut ne peut avoir le resultat (dans le cas ou il y a abs a la place d'une d'une note) je pense que je dois travailler en VBA
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
10 nov. 2004 à 15:15
Bonjour antic80,
Eh oui, merci, maintenant c'est parfaitement clair.
C'est donc bien le contrôle qui a un cefficient, c'est parfait.
La solution va suivre, 1 par formule directement et 1 par VBA.
Bonne fin de journée.

Salutations
Jean-Pierre
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
10 nov. 2004 à 17:52
Bonjour antic80,
Voici la première solution possible.
Base : ligne 4 pour les coefficients, dès col C
Ligne 5 pour 1 élève et première note dès col C

Inconvénient mineur, il faut 3 lignes par élève :
-la 1 avec les notes des contrôles
-la 2 avec le coefficient sous conditions: =SI(C5="abs";"abs";C$4),=SI(D5="abs";"abs";D$4),…
-la 3 avec la note sous conditions: =SI(C5="abs";"abs";C5*C$4),=SI(D5="abs";"abs";D5*D$4)
Dès que tout fonctionne les lignes(2 et 3) de calcul sous condition peuvent être masqué pour une meilleure lisibilité.
Vous calculez la moyenne de l’élève dans la cellule qui suit la dernière note (ou ce qui est mieux, dans la cellule juste avant la première note). Vous utilisez cette formule :
=SOMME(C7:H7)/SOMME(C6:H6),
pour le prochain élève se sera : =SOMME(C10:H10)/SOMME(C9:H9)
Je l’ai testée cela fonctionne très bien. La seule petite gêne s’est les 2 lignes qu’il faut intercaler pour chaque élèves, ensuite elles seront masquées, donc bien lisible.

La solution par macro en cde VBA c’est pour demain.


Salutations
Jean-Pierre
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
10 nov. 2004 à 22:46
Bonjour antic80,
Voici la solution par macro, je l’ai testé c’est parfait.
Elle est basée sur un tableau Excel comme suit:
-Nom des élèves > Col A, dès Li 5 et suivantes
-Moyenne > Col C, dès Li 5 et suivantes
-Coefficient > Li 4, dès Col D et suivantes
-Note > dès Li 5, dès Col D et suivantes
-En cas d’absence le sigle « abs » à la place de la note
Le programme :
Sub antic80_Moyenne()
' Macro enregistrée le 10.11.2004 par Jean-Pierre Purro
    Dim vaNote, vaCoeff, vaPlaEle, vaPlage As Range
    Dim vaLiEl, vaLiCoe, vaSoNo, vaSocoe As Variant
'Récupérer les élèves(Col A début Li 5 , fin à chercher)
 Set vaPlaEle = Range("A5:A" & Range("A5").End(xlDown).Row)
'Récupérer les coeficients(début col D li 4, fin à chercher)
 vaDeCo = Range("D4").End(xlToRight).Column
 Set vaPlage = Range(Cells(4, 4), Cells(4, vaDeCo))
'Début de la boucle sur les élèves
    Let vaLiEl = 5
    Let vaLiCoe = 4
 For Each vaEleve In vaPlaEle
    Let vaCoCoe = 4
    Let vaSoNo = 0
    Let vaSocoe = 0
'Début de la boucle sur les coefficients(même nb que notes)
    For Each vaCoeff In vaPlage
'Si absence pas de prise en compte
        If IsNumeric(Cells(vaLiEl, vaCoCoe)) Then
'Note * coefficient
            vaNoCoe = Cells(vaLiEl, vaCoCoe) * Cells(vaLiCoe, vaCoCoe)
'Somme des notes et des cefficients
            vaSoNo = vaSoNo + vaNoCoe
            vaSocoe = vaSocoe + Cells(vaLiCoe, vaCoCoe)
        End If
'Incrémente le compteur de colonne
        Let vaCoCoe = vaCoCoe + 1
    Next vaCoeff
'Calculer la moyenne et l'inscrire dans la cellule Cx
    Cells(vaLiEl, 3) = vaSoNo / vaSocoe
'Incrémente le compteur des élèves
    Let vaLiEl = vaLiEl + 1
 Next vaEleve
End Sub


Et voilà sa marche.
Bonne semaine.


Salutations
Jean-Pierre
0
merci Jean-pierre pour ta reponse

j'aimerai avoir une derniere info

ou dois je placer la macro pour qu'a chaque fois que je met une nouvelle note a un eleve la moyenne se mette a jour automatiquement
0
purrofixe Messages postés 490 Date d'inscription dimanche 14 mars 2004 Statut Membre Dernière intervention 12 septembre 2007 94
15 nov. 2004 à 16:25
Bonjour antic80,
Merci pour le message.
Voici l’extra.

1.- ou dois-je placer la macro :
>> Ouvrez le classeur.
>> Puis sur Outils, pointez sur Macro, puis cliquez sur Visual Basic Editor.
>>Puis sur Insertion, pointez sur Module.
>>Coller la macro ou le curseur clignote (rectangle blanc sur la partie droite).

2.-
>>Cette procédure suppose que les notes d’un contrôle soient mise pour chaque élève et pour terminer vous activer la mise à jour des moyennes et non pas élève par élève.
>>Vous devez placer un bouton de commande sur votre feuille. Faite comme suit :
---Sur Affichage, pointez sur Barre d’outils, puis sur Formulaires, choisir Bouton.
--- Cliquez dans la feuille de calcul à l'emplacement où vous souhaitez placer le contrôle.
---Faites glisser le contrôle pour obtenir la dimension souhaitée.
--- Dans la zone Nom de la macro, sélectionnez la macro qui sera exécutée par le bouton(expl : antic80_Moyenne).
¬¬---Donnez le texte de votre choix au bouton.
-- Enregistrer le tout

3.- une nouvelle note a un élève la moyenne se mette a jour automatiquement :
>>Dans ce cas la macro doit être partiellement modifiée pour pouvoir démarrer automatiquement.
A vous de prendre position en tenant compte que je ne connais pas la structure de votre classeur.
Bonne semaine.


Salutations
Jean-Pierre
0
g la meme question mais je dois faire un programme VBexcel g comme donnée un tableau ou il ya le montant des produits la question c d'etablir la moyenne mais en VBExcel si vous pouvez aider :s
et merci d'avance
0