Bonjour,
 
Il est normal que celà se produise car tu lance deux instructions opposées. Il y a deux façons que je vois pour régler ton problème
 
La première consiste à te créer une fonction public que tu appelle juste après la création et qui te retourne le nombre d'éléments dans ton checkboxlist et tu lance ou non le modal selon le nombre retourné
 
Ex :  
 
MaFenetreModale := TMaFenetreModale.create; // création de ton modal
if MaFenetreModale.PossedeElement then // vérifie si des éléments sont présents
  MaFenetreModale.ShowModal // si oui, ouvre si éléments
else
  MessageDlg('Pas d''éléments, fenêtre fermée',mtError,[mbOk],0); // si non, affiche un message d'erreur
 
La deuxième solution (que j'aime moins) s'applique si tu veux absolument voir qu'il y ai eu une fenêtre s'afficher et se fermer. Il te suffit de mettre un timer qui est activé au show de ta fiche et qui ferme la fenêtre s'il n'y a pas d'éléments. Bien sûr, il faut désactiver le timer après la première vérification si tu ne veux pas pomper du cpu pour rien. Ce n'est pas une belle solution, je te conseille l'autre mais elle peut te dépanner si tu doit voir la fenêtre
 
J'espère t'avoir aider