Salut,
Sans être un très grand spécialiste, je te montre deux manières de simplifier ton code. Je pense que l'on peut bien entendu encore faire mieux.
Sur les deux variantes du fichier, j'en montre une ici.
Private Sub CBSexe_Change()
If CBSexe = "Homme" Then
With Sheets("BD Homme")
TBTaille = .Cells(.Range("A" & Rows.Count).End(xlUp).Row, 2)
TBAge = .Cells(.Range("A" & Rows.Count).End(xlUp).Row, 4)
End With
Else
With Sheets("BD Femme")
TBTaille = .Cells(.Range("A" & Rows.Count).End(xlUp).Row, 2)
TBAge = .Cells(.Range("A" & Rows.Count).End(xlUp).Row, 4)
End With
End If
End Sub
Entre autres commentaires possibles :
- Set WsH : je préfère personnellement l'instruction With / End with, mais je pense que ça ne change pas grand chose.
- ThisWorkbook : cette instruction est inutile ici puisque ThisWorkbook est, en ce cas, la valeur par défaut.
- Range("A65000").End(xlUp).Row : cette instruction est correcte, mais peut être améliorée - comme te la indiqué LouReeD - en utilisant rows.count qui a les avantages 1) de tenir compte absolument de toutes les lignes de ta feuille et 2) de s'adapter à toutes les versions Excel.
- Value : je n'ai encore jamais rencontré de situations où cette instruction apporte quelque chose. La valeur Value est également prise en compte pas défaut. Tu pourrais pousser l'inutilité plus loin et écrire par exemple TBTaille.Value = Cells(3, 2).Value au lieu de TBTaille = Cells(3, 2)
Je n'ai pas poussé plus loin mes investigations. Il faudrait des heures afin de contrôler ce qui est déjà possible d'améliorer dans tes autres codes.
Amicales salutations.