Bonjour à Greg (et aux autres),
merci à Vince et Fred de t'avoir aidé ; effectivement, pour une 5ème catégorie, il suffisait de remplacer 4 par 5.
pour une 6ème catégorie : remplacer 5 par 6 ; pour une 7ème catégorie : remplacer 6 par 7 ; etc...
je te retourne ton fichier Excel (avec plusieurs autres modifs) :
A) sur la 1ère feuille "MENU - PRIX"
1) en colonne A, fusion verticale raccourcie de 4 lignes ➯ rose pour A2:A31 au lieu de A2:A35
2) j'ai supprimé ta colonne J inutile (car elle était vide) ➯ dernière cellule : i39 (au lieu de J39)
B) sur la 2ème feuille "BDC REPAS"
1) j'ai amélioré la présentation du texte de la cellule D58 ; dans une cellule, tu peux passer à la ligne avec Alt Entrée.
2) à droite de la colonne K, tu as 9 autres colonnes (L à T) ; dernière cellule : T61
tu as aussi des données en P47:Q61 ; j'ai tout laissé tel que, mais si tu n'as pas besoin de ces données, pense à supprimer les 9 colonnes L:T ; si au contraire tu veux garder ces données, tu devrais les déplacer sur une 3ème feuille supplémentaire, et éventuellement masquer (= cacher) cette 3ème feuille.
C) modifs de la sub Worksheet_Change()
1) 1ère ligne : au lieu de If Target.Count > 1 ... : If Target.CountLarge > 1
2) 2ème ligne Dim : il manque le type de lgm : lgm& ; mais j'ai supprimé cette variable car je n'utilise plus Rows.Count ;
ça donne donc : Dim celX As Range, dl1&, dl2&, lng As Byte, vx As Byte
3) deux lignes plus loin, c'est là qu'est le changement par rapport à la dernière catégorie (de 4 en 5) :
... : If vx < 1 Or vx > 5 Then Exit Sub
4) dessous, le bloc With qui était ainsi :
With Worksheets("MENU - PRIX")
lgm = Rows.Count
dl1 = .Cells(lgm, 2).End(xlUp).Row
dl2 = .Cells(lgm, 7).End(xlUp).Row
If dl2 > dl1 Then dl1 = dl2
Set celX = .Range("B2:B" & dl1).Offset(, k).Find(Target, , , 1)
End With
est devenu :
With Worksheets("MENU - PRIX")
dl1 = .[B500].End(3).Row: dl2 = .[G500].End(3).Row: If dl2 > dl1 Then dl1 = dl2
Set celX = .Range("B2:B" & dl1).Offset(, k).Find(Target, , -4163, 1, 1)
End With
au lieu du Rows.Count, c'est maintenant .[B500] et .[G500] ; ça simplifie le code, et j'ai fait ça car sur la 1ère feuille, ton menu va jusqu'en ligne 39 ; si tu agrandissais 5× ce menu, ça irait jusqu'en ligne 195 (5*39) ; donc tu vois que jusqu'à 500, ça te fait vraiment une très grosse marge !
note que .End(3) est la même chose que .End(xlUp), en plus court ; j'ai aussi complété le Find() : .Find(Target, , -4163, 1, 1) est la même chose que .Find(Target, , xlValues, xlWhole, xlByRows)
voilà, t'as plus qu'à faire tout ça dans ton fichier réel ! à ton tour de bosser, maint'nant !
courage, camarade ! c'est comme ça qu'tu vas pouvoir progresser !
dhany