XL 2013 erreur de compilation au niveau de la macro

ATHE RIOVELI

XLDnaute Occasionnel
BONSOIR LE FORUM,
Grace au forum, j'ai pu avoir beaucoup de mes projets réalisés.
J'ai cru donc pouvoir adapter une macro des projets réalisés dans ce nouveau classeur.
Apparemment, j'ai mal fait mon copier coller.
Je viens donc vers vous pour m'aider à résoudre ce problème.
Il s'agit de me mettre les mentions en H13, H14, H15, .... en fonction des notes G13, G14, G15, .....

voici donc l'une des macros de l'excellent Job75 que je croyais bien adapter à ma feuille;

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [D2,F2]) Is Nothing Then Worksheet_Activate
Application.EnableEvents = False
With [H13].Resize(100)
.FormulaR1C1 = "=IF(ISNUMBER([G13]),IF([G13]<5,""Très faible"",IF([G13]<8,""Faible"",IF([G13]<10,""Insuffisant"",IF([@Colonne7]<12,""Passable"",IF([@Colonne7]<14,""Assez-bien"",IF([@Colonne7]<16,""Bien"",IF([G13]<18,""Très bien"",""Excellent""))))))),"""")"
Application.EnableEvents = True
End Sub

Voici ici joint le fichier modèle.
MERCI A VOUS.
A+
 

Pièces jointes

  • GERER LA MENTION.xlsm
    19.8 KB · Affichages: 49

job75

XLDnaute Barbatruc
Bonsoir ATHE RIOVELI,

L'excellent job75 n'a pas fait ça mais c'est bien d'essayer de vous y mettre :)

Voyez mes commentaires et la formule corrigée :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'If Not Intersect(Target, [D2,F2]) Is Nothing Then Worksheet_Activate 'le code de Worksheet_Activate n'existe pas !!!
Application.EnableEvents = False
With [H13].Resize(100)
  .FormulaR1C1 = "=IF(ISNUMBER(RC7),IF(RC7<5,""Très faible"",IF(RC7<8,""Faible"",IF(RC7<10,""Insuffisant"",IF(RC7<12,""Passable"",IF(RC7<14,""Assez-bien"",IF(RC7<16,""Bien"",IF(RC7<18,""Très bien"",""Excellent""))))))),"""")"
  .Value = .Value 'supprime les formules
End With 'à ne pas oublier...
Application.EnableEvents = True
End Sub
Dans le fil précédent cette macro contrôlait les colonnes E et G, il faudra mettre leur code avant le contrôle de la colonne H.

Bonne nuit.
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
On peut aussi faire :
VB:
.FormulaR1C1 = "=IF(ISNUMBER(RC7),CHOOSE(IF(RC7<5,1,MIN(MAX(2,INT(RC7/2)-1),8)),""Très faible"",""Faible"",""Insuffisant"",""Passable"",""Assez-bien"",""Bien"",""Très bien"",""Excellent""),"""")"
Ce qui donne pour H13 :
Code:
=SI(ESTNUM($G13);CHOISIR(SI($G13<5;1;MIN(MAX(2;ENT($G13/2)-1);8));"Très faible";"Faible";"Insuffisant";"Passable";"Assez-bien";"Bien";"Très bien";"Excellent");"")
 

job75

XLDnaute Barbatruc
Bonjour ATHE RIOVELI, Bernard,

Le mieux est de mettre dans un module standard (Module1) cette fonction :
Code:
Function MENTION(note) As String
If Not IsEmpty(note) Then MENTION = Application.Lookup(note, _
[{-9999,"Très faible";5,"Faible";8,"Insuffisant";10,"Passable";12,"Assez-bien";14,"Bien";16,"Très bien";18,"Excellent"}])
End Function
Elle servira dans toutes les feuilles.

J'ai complété le code de la feuille avec ce que nous avons fait précédemment :
Code:
Private Sub Worksheet_Activate()
Dim i%
[Date_debut] = [D2]: [Date_fin] = [F2] 'pour le calcul des heures d'absence
If Application.CountA([D13].Resize(100), [F13].Resize(100)) Then
  For i = 1 To 100
  If Feuil1.Cells(i + 14, 2) <> Cells(i + 12, 2) Or [Date_debut].Offset(i + 3) <> Cells(i + 12, 3) Then _
  If MsgBox("Attention la feuille source a été modifiée, faut-il vraiment mettre à jour le trimestre ?", 4) = 6 _
  Then Exit For Else Exit Sub
  Next
End If
[A13:B13].Resize(100) = Feuil1.[A15:B15].Resize(100).Value
[C13].Resize(100) = [Date_debut].Offset(4).Resize(100).Value
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [D2,F2]) Is Nothing Then Worksheet_Activate 'lance la macro
Application.EnableEvents = False
With [E13].Resize(100)
  .FormulaR1C1 = "=IF(ISTEXT(RC2)*ISNUMBER(1/MAX(RC3-N(RC4),)),MAX(RC3-N(RC4),),"""")"
  .Value = .Value 'supprime les formules
End With
With [G13].Resize(100)
  .FormulaR1C1 = "=IF(ISTEXT(RC2),R10C7+RC6-QUOTIENT(RC5,3),"""")"
  .Value = .Value 'supprime les formules
End With
With [H13].Resize(100)
  .FormulaR1C1 = "=MENTION(RC7)"
  .Value = .Value 'supprime les formules
End With
Application.EnableEvents = True
End Sub
Notez cette modification dans la macro Worksheet_Activate :
Code:
If Application.CountA([D13].Resize(100), [F13].Resize(100)) Then
Fichier joint.

Bonne journée.
 

Pièces jointes

  • GERER LA MENTION(1).xlsm
    30.6 KB · Affichages: 49

ATHE RIOVELI

XLDnaute Occasionnel
BONSOIR Job75, BONSOIR Dranreb, BONSOIR le Forum.
Je suis vraiment dépassé par la vitesse avec laquelle vous apporter des solutions à mes préoccupations.
Je ne trouve pas de mots pour vous traduire tout le bonheur que vous me procurez.
Quel mot serait à la hauteur pour vous qualifiez?
Chez nous en Côte d'ivoire, on dit tout simplement d'un grand homme: TU ES UN WOODY.
Alors, Job75, Dranreb, je ne peux que vous dire: VOUS ETES DES WOODY.

infiniment Merci à vous.
A+
 

ATHE RIOVELI

XLDnaute Occasionnel
Bonsoir job75n bonsoir Dranreb.
juste une préocupation : Le bout de macro With [H13].Resize(100)
signifie qu'on va de H13 jusqu'a H100 ?
si c'est le cas, dans une classe où nous avons un effectif de 135 élèves, on peut donc changer tous les Resize(100) par Resize(150) par exemple?
MERCI
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 324
Membres
103 179
dernier inscrit
BERSEB50