The problem is that you declare the Frame as TFrame, but you created it as a descendant, TCelluleFrame. Therefore, Frame does not know the controls that you added to TCelluleFrame.
To fix this you have two options:
/1/ The simpler one is to declare Frame as TCelluleFrame, rather than TFrame:
type
TMainForm = class(TForm)
...
public
Frame: TCelluleFrame; // <--- was: TFrame
end;
This is probably fine for the current state of your project. But maybe later, you have other frame types which you want to insert dynamically instead of the TCelluleFrame; this would have the consequence that you cannot talk to these frames because the frame type known to the form is still TCelluleFrame. Therefore, I propose another option.
/2/ Keep the declaration of Frame as TFrame. But then, whenever you access the frame, check whether it is a TCelluleFrame ("if Frame is TCelluleFrame then...") and them make a type-cast to TCelluleFrame. This is a standard trick in object-oriented programming to handle polymorphism. After the type-cast the compiler knows that it should consider the Frame variable as a TCelluleFrame and you have access to the the components of TCelluleFrame. Here is one example:
procedure TMainForm.Cellule_OnClick(Sender: TObject);
begin
if Frame is TCelluleFrame then
with TCelluleFrame(Frame) do
Cellule_PageControl.ActivePage:= Equipe_TabSheet;
end;
The "with" is used here to shorten the code. Many people don't like "with" (because it can result in code which is difficult to read) - here is the version without "with":
procedure TMainForm.Cellule_OnClick(Sender: TObject);
begin
if Frame is TCelluleFrame then
TCelluleFrame(Frame).Cellule_PageControl.ActivePage:= TCelluleFrame(Frame).Equipe_TabSheet;
end;
P.S.
Ah, Howard was faster with option 1.