Sub cherche()
'on commence par effacer les matières
Range(Cells(5, 2), Cells(5, 2).End(xlDown)).Clear
'récupère le nom de l'élève concerné
NomEleve = Sheets("Onglet 3").Range("B2")
'rercherche de cet élève dans l'onglet 1 et on récupère la ligne ou il est situé
Set c = Sheets("Onglet 1").Range("TabOng1").Find(NomEleve)
If Not c Is Nothing Then
LigneEleve = c.Row
End If
'on compte le nombre d'écoles dans la zone nommée ListEcoles
'Note: il faudra définir cette zone dynamiquement avec decaler....
'voir le gestionaire de noms
'ListeEcoles=DECALER('Onglet 1'!$C$3;0;0;1;NBVAL('Onglet 1'!$3:$3)-4)
'permettra ansi de rajouter autant d'écoles que souhaitées, la macro fonctionnera toujours
NbEcoles = Sheets("Onglet 1").Range("ListEcoles").Columns.Count
'pour chaque école, on regarde si l'élève est concerné: présence d'une croix
For j = 3 To 2 + NbEcoles
If Sheets("onglet 1").Cells(LigneEleve, j) = "X" Then
'si concerné, alors on note cette école pour ensuite aller voir les matières dans l'onglet2
EcoleEnCours = Sheets("onglet 1").Cells(3, j)
'recherche de la position de l'école dans l'onglet 2
Set d = Sheets("Onglet 2").Range("tabOng2").Columns(1).Find(EcoleEnCours)
If Not d Is Nothing Then
'forcément, le .find va trouver la PREMIERE occurence de cette école
LigneEcole = d.Row - 1
For k = 1 To 3 '3=Nb Matières
'on récupère la matière k à coté de l'école
MatEnCours = Sheets("Onglet 2").Cells(LigneEcole + k - 1, 2)
If IsEmpty(Sheets("Onglet 2").Cells(LigneEcole + k - 1, 3)) Then
MatValidée = "N"
Else: MatValidée = "Y"
End If
'on cherche la position de la matière dans l'onglet 3
Set e = Sheets("Onglet 3").Range("A1:A10").Find(MatEnCours)
If Not e Is Nothing Then
LigToCol = e.Row
'condition OU: si il y a déjà un OUI, on ne fait rien
If (Sheets("Onglet 3").Cells(LigToCol, 2) = "N") Or IsEmpty((Sheets("Onglet 3").Cells(LigToCol, 2))) Then
Sheets("Onglet 3").Cells(LigToCol, 2) = MatValidée
End If
End If
Next k
End If
End If
Next j
End Sub