def ConversionLocalReseau(parent, nomFichier=""):
    # Demande le nom du nouveau fichier réseau
    from Dlg import DLG_Nouveau_fichier
    dlg = DLG_Nouveau_fichier.MyDialog(parent)
    dlg.SetTitle(_(u"Conversion d'un fichier local en fichier réseau"))
    dlg.radio_reseau.SetValue(True)
    dlg.OnRadioReseau(None)
    dlg.radio_local.Enable(False)
    dlg.radio_reseau.Enable(False)
    dlg.radio_internet.Enable(False)
    dlg.checkbox_details.Show(False)
    dlg.hyperlink_details.Show(False)
    dlg.DesactiveIdentite() 
    dlg.CentreOnScreen()
    if dlg.ShowModal() == wx.ID_OK:
        nouveauFichier = dlg.GetNomFichier()
        dlg.Destroy()
    else:
        dlg.Destroy()
        return False
    
    # Vérifie la validité du nouveau nom
    dictResultats = GestionDB.TestConnexionMySQL(typeTest="fichier", nomFichier="%s_DATA" % nouveauFichier)
    
    # Vérifie la connexion au réseau
    if dictResultats["connexion"][0] == False :
        erreur = dictResultats["connexion"][1]
        dlg = wx.MessageDialog(parent, _(u"La connexion au réseau MySQL est impossible. \n\nErreur : %s") % erreur, _(u"Erreur de connexion"), wx.OK | wx.ICON_ERROR)
        dlg.ShowModal()
        dlg.Destroy()
        return False
    
    # Vérifie que le fichier n'est pas déjà utilisé
    if dictResultats["fichier"][0] == True :
        dlg = wx.MessageDialog(parent, _(u"Le fichier existe déjà."), _(u"Erreur de création de fichier"), wx.OK | wx.ICON_ERROR)
        dlg.ShowModal()
        dlg.Destroy()
        return False
    
    # Récupère le nom du fichier local actuellement ouvert
    nouveauNom = nouveauFichier[nouveauFichier.index("[RESEAU]"):].replace("[RESEAU]", "")
    
    # Demande une confirmation pour la conversion
    message = _(u"Confirmez-vous la conversion du fichier local '%s' en fichier réseau portant le nom '%s' ? \n\nCette opération va durer quelques instants...\n\n(Notez que le fichier original sera toujours conservé)") % (nomFichier, nouveauNom)
    dlg = wx.MessageDialog(parent, message, _(u"Confirmation de la conversion"), wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION)
    if dlg.ShowModal() == wx.ID_YES :
        dlg.Destroy()
    else:
        dlg.Destroy()
        return False
    
    # Lance la conversion
    parent.SetStatusText(_(u"Conversion du fichier en cours... Veuillez patienter..."))
    conversion = GestionDB.ConversionLocalReseau(nomFichier, nouveauFichier, parent)
    parent.SetStatusText(_(u"La conversion s'est terminée avec succès."))
    dlg = wx.MessageDialog(None, _(u"La conversion s'est terminée avec succès. Le nouveau fichier a été créé."), "Information", wx.OK | wx.ICON_INFORMATION)
    dlg.ShowModal()
    dlg.Destroy()
    return True
    def OnBoutonOk(self, event):
        """ Validation des données saisies """

        # Validation du nom saisi
        nomFichier = self.text_nomFichier.GetValue()
        if nomFichier == "":
            dlg = wx.MessageDialog(
                self, _(u"Vous devez saisir un nom de fichier valide."),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            self.text_nomFichier.SetFocus()
            return

        if (self.radio_reseau.GetValue() == True or
                self.radio_internet.GetValue() == True) and " " in nomFichier:
            dlg = wx.MessageDialog(
                self,
                _(u"Il est interdit d'utiliser des espaces dans les noms des fichiers réseau !"
                  ), _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            self.text_nomFichier.SetFocus()
            return

        for caract in nomFichier:
            if caract in u"éèëäâïîùûüàôç'&%*,;!:?./§@¤":
                dlg = wx.MessageDialog(
                    self,
                    _(u"Il est interdit d'utiliser des accents ou autres caractères spéciaux dans le nom de fichier !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                self.text_nomFichier.SetFocus()
                return

        # Traitement du checkbox
        if self.checkbox_details.GetValue() == False:

            # Demande de confirmation pour le refus d'importer les données par défaut
            dlg = wx.MessageDialog(
                self,
                _(u"Etes-vous sûr de ne pas vouloir importer les données par défaut ?"
                  ), _(u"Importation des données"),
                wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION)
            if dlg.ShowModal() == wx.ID_YES:
                dlg.Destroy()
            else:
                dlg.Destroy()
                return

            # Désactivation des données importées par défaut
            index = 0
            for categorie in self.listeTablesImportation:
                self.listeTablesImportation[index][2] = False
                index += 1

        # Identité administrateur
        if self.ctrl_nom.IsEnabled():

            if len(self.ctrl_nom.GetValue()) == 0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir un nom d'administrateur !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_nom.SetFocus()
                return

            if len(self.ctrl_mdp.GetValue()) == 0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir un mot de passe pour l'administrateur !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_mdp.SetFocus()
                return

            if len(self.ctrl_confirmation.GetValue()) == 0:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez obligatoirement saisir la confirmation du mot de passe pour l'administrateur !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_confirmation.SetFocus()
                return

            if self.ctrl_mdp.GetValue() != self.ctrl_confirmation.GetValue():
                dlg = wx.MessageDialog(
                    self,
                    _(u"La confirmation du mot de passe ne correspond pas au mot de passe saisi !"
                      ), _(u"Erreur de saisie"), wx.OK | wx.ICON_EXCLAMATION)
                dlg.ShowModal()
                dlg.Destroy()
                self.ctrl_confirmation.SetFocus()
                return

        # Version RESEAU
        if self.radio_reseau.GetValue(
        ) == True or self.radio_internet.GetValue() == True:
            port = self.panelReseau.ctrl_port.GetValue()
            hote = self.panelReseau.ctrl_hote.GetValue()
            user = self.panelReseau.ctrl_user.GetValue()
            mdp = self.panelReseau.ctrl_mdp.GetValue()

            try:
                port = int(port)
            except Exception, err:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Le numéro de port n'est pas valide. \n\nErreur : %s")
                    % err, _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                self.panelReseau.ctrl_port.SetFocus()
                return

            if hote == "":
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez saisir un nom pour le serveur hôte."),
                    _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                self.panelReseau.ctrl_hote.SetFocus()
                return

            if user == "":
                dlg = wx.MessageDialog(
                    self, _(u"Vous devez saisir un nom d'utilisateur."),
                    _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                self.panelReseau.ctrl_user.SetFocus()
                return

            if mdp == "":
                dlg = wx.MessageDialog(
                    self, _(u"Vous devez saisir un mot de passe."),
                    _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                self.panelReseau.ctrl_mdp.SetFocus()
                return

            # Teste la connexion Réseau
            dictResultats = GestionDB.TestConnexionMySQL(
                typeTest="connexion", nomFichier=self.GetNomFichier())
            if dictResultats["connexion"][0] == False:
                erreur = dictResultats["connexion"][1]
                dlg = wx.MessageDialog(
                    self,
                    _(u"La connexion au réseau MySQL est impossible. \n\nErreur : %s"
                      ) % erreur, "Erreur de connexion", wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                return False
    def OnBoutonOk(self, event):
        """ Validation des données saisies """

        # Validation du nom saisi
        if self.text_nom.GetValue() == "":
            dlg = wx.MessageDialog(
                self, _(u"Vous devez saisir un nom de fichier valide."),
                _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
            dlg.ShowModal()
            dlg.Destroy()
            self.text_nom.SetFocus()
            return

        # Traitement du checkbox
        if self.checkbox_details.GetValue() == False:

            # Demande de confirmation pour le refus d'importer les données par défaut
            dlg = wx.MessageDialog(
                self,
                _(u"Etes-vous sûr de ne pas vouloir importer les données par défaut ?"
                  ), _(u"Importation des données"),
                wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION)
            if dlg.ShowModal() == wx.ID_YES:
                dlg.Destroy()
            else:
                dlg.Destroy()
                return

            # Désactivation des données importées par défaut
            index = 0
            for categorie in self.listeTablesImportation:
                self.listeTablesImportation[index][2] = False
                index += 1

        # Version RESEAU
        if self.radio_reseau.GetValue() == True:
            port = self.panelReseau.ctrl_port.GetValue()
            hote = self.panelReseau.ctrl_hote.GetValue()
            user = self.panelReseau.ctrl_user.GetValue()
            mdp = self.panelReseau.ctrl_mdp.GetValue()

            try:
                port = int(port)
            except Exception as err:
                dlg = wx.MessageDialog(
                    self,
                    _(u"Le numéro de port n'est pas valide. \n\nErreur : %s")
                    % err, _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                self.panelReseau.ctrl_port.SetFocus()
                return

            if hote == "":
                dlg = wx.MessageDialog(
                    self,
                    _(u"Vous devez saisir un nom pour le serveur hôte."),
                    _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                self.panelReseau.ctrl_hote.SetFocus()
                return

            if user == "":
                dlg = wx.MessageDialog(
                    self, _(u"Vous devez saisir un nom d'utilisateur."),
                    _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                self.panelReseau.ctrl_user.SetFocus()
                return

            if mdp == "":
                dlg = wx.MessageDialog(
                    self, _(u"Vous devez saisir un mot de passe."),
                    _(u"Erreur de saisie"), wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                self.panelReseau.ctrl_mdp.SetFocus()
                return

            # Teste la connexion Réseau
            dictResultats = GestionDB.TestConnexionMySQL(
                typeTest="connexion", nomFichier=self.GetNomFichier())
            if dictResultats["connexion"][0] == False:
                erreur = dictResultats["connexion"][1]
                dlg = wx.MessageDialog(
                    self,
                    _(u"La connexion au réseau MySQL est impossible. \n\nErreur : %s"
                      ) % erreur, "Erreur de connexion", wx.OK | wx.ICON_ERROR)
                dlg.ShowModal()
                dlg.Destroy()
                return False

        # Fermeture
        self.EndModal(wx.ID_OK)