Organisation des procédures liées à des multipages

Salut,

Mon projet contient des multipages imbriqués les uns dans les autres dans un seul UserForm (1 multipage chapeau avec 7 onglets et un multipage secondaire dans chaque onglet). C'est une refonte de mon précédent projet qui contenait 91 UserForms, ce qui fait qu'à terme je devrais avoir au minimum 70 onglets au total, vu que je vais en profiter pour rationaliser certains points).

Du coup les procédures associées se retrouvent toutes dans le même UserForm et ça devient touchy de s'y retrouver.

Est ce qu'il y a un moyen de " classer " les procédures, du style quand un onglet est sélectionné renvoyer vers les procédures d'un module, pour que les procédures de chaque onglet soient séparées de celles des autres onglets ?

Dans l'absolu je ne suis pas contre l'idée de remplacer chaque onglet par un UserForm qui viendrait s'afficher par dessus le principal, c'est d'ailleurs comme ça que j'avais commencé. Mais comme la fenêtre secondaire qui s'affiche au premier plan ne couvre pas la totalité de l'écran, elle disparait si on clique sur la partie visible de la fenêtre principale au second plan. Est ce qu'il y a un moyen d'empêcher ça ?

Merci d'avance.

Bonjour Manu31,

Dans l'absolu, oui, tu peux renvoyer des procédures dans un module.

Mais faut-il savoir quelles sont ces procédures

Par exemple :

Private Sub AvionsListeAvionsSuivis_Click()

'Fermeture du dossier avion ouvert le cas échéant
If Dossier_avion <> "" Then Workbooks(Dossier_avion).Close False

Immatriculation = AvionsListeAvionsSuivis

'Ouverture du dossier de l'avion sélectionné
Workbooks.Open Filename:=Dossier_agrément_G & Immatriculation & "\" & Immatriculation & " - Dossier avion.xlsm"
Dossier_avion = ActiveWorkbook.Name

'Report des informations
'Cadre avion
With Workbooks(Dossier_avion).Sheets("Fiche avion")
    AvionsConstructeur = .Cells(Ligne_constructeur, Colonne_constructeur)
    AvionsTypeAvion = .Cells(Ligne_type_avion, Colonne_type_avion)
    AvionsTCDS = .Cells(Ligne_ref_TCDS, Colonne_ref_TCDS)
    AvionsModèle = .Cells(Ligne_modèle, Colonne_modèle)
    AvionsNoSérie = .Cells(Ligne_no_série, Colonne_no_série)
    AvionsPremierVol = Format(.Cells(Ligne_premier_vol, Colonne_premier_vol), "dd mmmm yyyy")
    AvionsProprio = .Cells(Ligne_propriétaire, Colonne_propriétaire)
    'Chargement de la photo de l'avion
    AvionsPhotoAvion.Picture = LoadPicture(Dossier_agrément_G & Immatriculation & "\Photo " & Immatriculation & ".jpg")

    'Cadre Heures de vol
    AvionsDateStatut = Format(.Cells(Ligne_date_statut, Colonne_date_statut), "dd mmmm yyyy")
    AvionsHTCellule = Format(.Cells(Ligne_heures_de_vol, Colonne_heures_de_vol), "# ###.00")
    AvionsCTCellule = Format(.Cells(Ligne_cycles, Colonne_cycles), "# ###.00")
    If AvionsCTCellule = "N/A" Then AvionsCGVcellule = "N/A"
    AvionsHTMoteur = Format(.Cells(Ligne_HT_moteur, Colonne_données_moteur), "# ###.00")
    AvionsHRGMoteur = Format(.Cells(Ligne_HRG_moteur, Colonne_données_moteur), "# ###.00")
    If AvionsCTCellule = "N/A" Then AvionsCTmoteur = "N/A"
    If AvionsCTCellule = "N/A" Then AvionsCRGmoteur = "N/A"
    AvionsHTHélice = Format(.Cells(Ligne_HT_hélice, Colonne_données_hélice), "# ###.00")
    AvionsHRGHélice = Format(.Cells(Ligne_HRG_hélice, Colonne_données_hélice), "# ###.00")
    If AvionsCTCellule = "N/A" Then AvionsCThélice = "N/A"
    If AvionsCTCellule = "N/A" Then AvionsCRGhélice = "N/A"
End With

End Sub

Cette procédure ouvre un fichier Excel (Dossier avion) et récupère certaines infos de ce dossier pour les afficher dans l'onglet du multipage.

AvionsListeAvionsSuivis est un listbox, tout ce qui commence par Avions est un Label sauf AvionsPhotoAvion qui est une image.

Aujourd'hui, elle est dans le UserForm. L'idéal, ce serait que quand l'onglet concerné est sélectionné, Excel aille directement chercher cette procédure dans un module spécifique, et que je n'ai plus rien dans le UserForm.

Je vais ouvrir un autre sujet pour ma deuxième question, ça évitera le mélange des genres

Manu

Re,

Bon sans fichier j'y vais à taton, mais voici un exemple de ce que tu peux faire

Dans ton Userform, au changement de multipage

Private Sub MultiPage1_Change()
  If Me.MultiPage1.Value = 1 Then
    Call ListeAvionsSuivis(Me, Me.MultiPage1.Value)
  End If
End Sub

Dans un module que tu nommes comme tu veux

Sub ListeAvionsSuivis(UsF As MSForms.UserForm, MultiPge As Integer)
  'Fermeture du dossier avion ouvert le cas échéant
  If Dossier_avion <> "" Then Workbooks(Dossier_avion).Close False

  Immatriculation = UsF.AvionsListeAvionsSuivis

  'Ouverture du dossier de l'avion sélectionné
  Workbooks.Open Filename:=Dossier_agrément_G & Immatriculation & "\" & Immatriculation & " - Dossier avion.xlsm"
  Dossier_avion = ActiveWorkbook.Name

  'Report des informations
  'Cadre avion
  With Workbooks(Dossier_avion).Sheets("Fiche avion")
    UsF.AvionsConstructeur = .Cells(Ligne_constructeur, Colonne_constructeur)
    UsF.AvionsTypeAvion = .Cells(Ligne_type_avion, Colonne_type_avion)
    UsF.AvionsTCDS = .Cells(Ligne_ref_TCDS, Colonne_ref_TCDS)
    UsF.AvionsModèle = .Cells(Ligne_modèle, Colonne_modèle)
    UsF.AvionsNoSérie = .Cells(Ligne_no_série, Colonne_no_série)
    UsF.AvionsPremierVol = Format(.Cells(Ligne_premier_vol, Colonne_premier_vol), "dd mmmm yyyy")
    UsF.AvionsProprio = .Cells(Ligne_propriétaire, Colonne_propriétaire)
    'Chargement de la photo de l'avion
    UsF.AvionsPhotoAvion.Picture = LoadPicture(Dossier_agrément_G & Immatriculation & "\Photo " & Immatriculation & ".jpg")

    'Cadre Heures de vol
    UsF.AvionsDateStatut = Format(.Cells(Ligne_date_statut, Colonne_date_statut), "dd mmmm yyyy")
    UsF.AvionsHTCellule = Format(.Cells(Ligne_heures_de_vol, Colonne_heures_de_vol), "# ###.00")
    UsF.AvionsCTCellule = Format(.Cells(Ligne_cycles, Colonne_cycles), "# ###.00")
    If UsF.AvionsCTCellule = "N/A" Then UsF.AvionsCGVcellule = "N/A"
    UsF.AvionsHTMoteur = Format(.Cells(Ligne_HT_moteur, Colonne_données_moteur), "# ###.00")
    UsF.AvionsHRGMoteur = Format(.Cells(Ligne_HRG_moteur, Colonne_données_moteur), "# ###.00")
    If UsF.AvionsCTCellule = "N/A" Then UsF.AvionsCTmoteur = "N/A"
    If UsF.AvionsCTCellule = "N/A" Then UsF.AvionsCRGmoteur = "N/A"
    UsF.AvionsHTHélice = Format(.Cells(Ligne_HT_hélice, Colonne_données_hélice), "# ###.00")
    UsF.AvionsHRGHélice = Format(.Cells(Ligne_HRG_hélice, Colonne_données_hélice), "# ###.00")
    If UsF.AvionsCTCellule = "N/A" Then UsF.AvionsCThélice = "N/A"
    If UsF.AvionsCTCellule = "N/A" Then UsF.AvionsCRGhélice = "N/A"
  End With
End Sub

Voilà

Ca veut dire que dans le UserForm il faut qu'il y ait une fonction qui appelle la procédure dans le module pour chaque contrôle ?

Manu

Heu non

J'ai loupé un truc alors.

Je prends le temps de regarder ça en détail pour comprendre.

Manu

Rechercher des sujets similaires à "organisation procedures liees multipages"