Cas d'école - donner ses classes à un professeur

  • Initiateur de la discussion Initiateur de la discussion jbdumaine
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

J

jbdumaine

Guest
Bonjour à tous

Je suis principal-adjoint et, dans un tableau qui recense mes équipes pédagogiques par niveau, j'aimerais mettre chaque professeur en face de ses classes.
Soit donc un tableau ayant la structure suivante :
Matière | 6e1 | 6e2 | 6e3 |
maths |M. X |MmeY|M. X|
français|M. A |M. A |MelleB|
HG |M. C| MmeD|MmeD|

Quelle formule pourrais-je utiliser pour avoir, en bas de ce tableau, les classes de chaque professeur sous la forme suivante :
M. X | 6e1 ; 6e3 |
etc.

J'espère avoir été assez clair. Je vous remercie à l'avance de vos réponses.
Bien à vous

JB DUMAINE
 
Re : Cas d'école - donner ses classes à un professeur

Bonjour jbdumaine, bienvenue sur XLD,

Joli problème monsieur le Principal.

Par formule Excel ça paraît bien compliqué...

Alors cette fonction macro VBA dans Module1 (Alt+F11) :

Code:
Function CLASSE(plage As Range, prof As String, numero As Byte) As String
Dim i As Byte, j As Byte, n As Byte
prof = LCase(Application.Trim(prof)) 'fonctions MINUSCULE et SUPPRESPACE
With plage
For i = 1 To .Rows.Count
  For j = 1 To .Columns.Count
    If LCase(Application.Trim(.Cells(i, j))) = prof Then
      n = n + 1
      If n = numero Then CLASSE = .Cells(1, j): Exit Function
    End If
  Next
Next
End With
End Function
Elle est utilisée dans la formule en B8 :

Code:
=CLASSE($B$1:$D$4;$A8;COLONNES($B8:B8))
A tirer à droite et vers le bas.

Fichier joint.

A+
 

Pièces jointes

Re : Cas d'école - donner ses classes à un professeur

Bonsoir, salut Job🙂,
une solution par formule matricielle à valider par Ctrl, Maj et entrée (testée sur le fichier de Job après avoir enlevé les espaces présents après les noms) :
Code:
=SI(COLONNES($A:A)<=NB.SI(profs;$A8);INDIRECT(ADRESSE(LIGNE(classes);MOD(PETITE.VALEUR(SI(profs=$A8;LIGNE(profs)*10^5+COLONNE(profs));COLONNES($A:A));10^5)));"")
A+
 

Pièces jointes

Dernière édition:
Re : Cas d'école - donner ses classes à un professeur

Bonjour jbdumaine, salut David 🙂

Je n'avais pas bien lu : vous voulez les classes dans une seule cellule.

Alors la fonction VBA :

Code:
Function CLASSE(plage As Range, prof As String) As String
Dim i As Byte, j As Byte
prof = LCase(Application.Trim(prof)) 'fonctions MINUSCULE et SUPPRESPACE
With plage
For i = 1 To .Rows.Count
  For j = 1 To .Columns.Count
    If LCase(Application.Trim(.Cells(i, j))) = prof Then _
      CLASSE = CLASSE & IIf(CLASSE = "", "", " ; ") & .Cells(1, j)
  Next
Next
End With
End Function
Fichier (2).

A+
 

Pièces jointes

Re : Cas d'école - donner ses classes à un professeur

Re,

Et pour éviter de se fatiguer, cette macro lancée par un bouton :

Code:
Sub Liste()
Dim ref As Range, derlig&, dercol%, plage1 As Range, plage2 As Range
Dim d As Object, cel As Range, txt$
Set ref = [A1] 'à adapter, 1ère cellule du tableau
derlig = ref.End(xlDown).Row
dercol = ref.End(xlToRight).Column
Set plage1 = ref.Offset(, 1).Resize(derlig - ref.Row + 1, dercol - ref.Column)
Set plage2 = plage1.Offset(1)
'---liste des professeurs---
Set d = CreateObject("Scripting.Dictionary") 'pour liste sans doublons
For Each cel In plage2
  txt = Application.Trim(cel)
  If txt <> "" Then d(txt) = txt
Next
Rows(derlig + 3 & ":65536").ClearContents 'effacement préalable
If d.Count = 0 Then Exit Sub
With Cells(derlig + 3, ref.Column).Resize(d.Count) '3 lignes après la dernière
  .Value = Application.Transpose(d.Keys)
  .Sort ref, xlAscending, Header:=xlNo 'tri alphabétique
'---liste des classes avec fonction CLASSE---
  With .Offset(, 1)
    .FormulaR1C1 = "=CLASSE(" & plage1.Address(, , xlR1C1) & "," & "RC[-1])"
    .Value = .Value 'suppression des formules (facultatif)
  End With
End With
End Sub
Elle crée une liste des professeurs triée sans doublons et entre la formule.

Pour l'adapter à n'importe quel tableau il sufit de modifier cette ligne :

Code:
Set ref = [A1] 'à adapter, 1ère cellule du tableau
Fichier (3).

A+
 

Pièces jointes

Dernière édition:
Re : Cas d'école - donner ses classes à un professeur

Bonjour JONEY76,

C'est bien d'avoir des idées mais il faut en donner un exemple.

Perso je vois mal comment une ListBox répondrait au problème posé.

Je reviens sur ma version (3).

Pour la liste des professeurs, les doublons ne sont pas supprimés si la casse n'est pas respectée.

Alors utiliser cette version (4) avec Application.Proper, c'est la fonction NOMPROPRE :

Code:
txt = Application.Proper(Application.Trim(cel))
A+
 

Pièces jointes

Re : Cas d'école - donner ses classes à un professeur

Chers Tout le monde
Merci beaucoup de vos contributions. La macro associée au bouton, j'aime beaucoup.
Ça donne envie de bosser pour arriver à maîtriser l'outil...
Je vous salue bien tous et vous remercie bien encore une fois, vous les samaritains du Net.
Au plaisir

Bien à vous et très cordialement

JB DUMAINE
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour