IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Erreur lors de la fermeture d'un fichier xls


Sujet :

C#

  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Erreur lors de la fermeture d'un fichier xls
    Bonjour tout le monde,

    Nous aimerions créer des relevés de notes par rapport à un fichier excel existant.

    L'idée est donc de prendre toutes les cotes de l'étudiant pour modifier ensuite un autre fichier.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    private void button2_Click(object sender, EventArgs e)
            {
     
     
                switch (comboBox2.SelectedIndex)
                {
                    case 4 : //Creer les Relevés de notes MA2
                        {
                            NomFichier = "MA2.xls";
     
                            _ColonneNom = 2;   //Indique la colonne des noms
                            _ColonneMat = 3;   //Indique la colonne des matricules
                            _ligneDepart = 12; //Initialisation de la ligne de la première Matricule
                            _ColonneDepart = 4;//Initialisation de la colonne de la première cellule excel à lire
                            numFeuille = 3; //Numero de la feuille activée dans le classeur
     
                            //Ce tableau représente les données de l'étudiant à mettre dans son releve
                            string[] _NotesNormaux = new string[12];
                            string[] _LibelleNormaux = new string[12];
     
     
                            Creer_Classeur(numFeuille); //Création de notre classeur excel
                            try
                            {
                                //J'affecte le nom lu dans la variable nomEtudiant 
                                string nomEtudiant = ((Excel.Range)feuille.Cells[_ligneDepart, (_ColonneMat - 1)]).Value2.ToString();
     
                                //J'affecte la matricule lue dans la variable matricule 
                                string matricule = ((Excel.Range)feuille.Cells[_ligneDepart, _ColonneMat]).Value2.ToString();
     
     
                                while (matricule != "")
                                {
     
                                    //
                                    for (int i = 0; i <= _NotesNormaux.Length - 2; i++)
                                    {
                                        if (((Excel.Range)feuille.Cells[(_ligneDepart - 2), (_ColonneDepart + i)]).Value2.ToString() != "TOTAL th")
                                        {
                                            _NotesNormaux[i] = ((Excel.Range)feuille.Cells[_ligneDepart, (_ColonneDepart + i)]).Value2.ToString();
                                            _LibelleNormaux[i] = ((Excel.Range)feuille.Cells[(_ligneDepart - 2), (_ColonneDepart + i)]).Value2.ToString();
                                       }
                                    }
     
                                    //On cree le releve de l'étudiant
                                    NomFichierRN = "ReleveMA2.xls";
     
                                    string FichierBase = "ReleveMA2";
     
                                    Creer_ClasseurRN(2);
                                    //On écrit le titre 
                                    feuilleRN.Cells[1, 1] = "Relevé de notes MA2 (Délibération du 25 juin 2010) Session 1  INSTITUT DE PHARMACIE - ULB ";
                                    feuilleRN.Cells[4, 1] = nomEtudiant + " - Fait à Bruxelles le 25 juin 2010";
     
                                    for (int i = 0; i <= _NotesNormaux.Length - 2; i++)
                                    {
                                        feuilleRN.Cells[5, 1 + i] = _LibelleNormaux[i];
                                        feuilleRN.Cells[6, 1 + i] = _NotesNormaux[i];
                                    }
     
                                    Fermer_ClasseurRN(nomEtudiant);
                                    Fermer_ClasseurRN(FichierBase);
     
                                    _ligneDepart++;
                                    matricule = ((Excel.Range)feuille.Cells[_ligneDepart, _ColonneMat]).Value2.ToString();
                                }
     
     
     
                                //Le message qui signale que traitement s'est terminé avec succes 
                                string caption = "SUCCES ";
                                string message = "Traitemement réussi ! ";
     
                                MessageBox.Show(message, caption);
                            }
     
                            catch (Exception ex) { MessageBox.Show("Erreur est: " + ex.Message); }
     
                            Fermer_Classeur();//Fermeture de notre classeur excel
     
                        } break; //Fin case 3
     
                }
     
            }
    En gros :

    - je mets dans un tableau les cotes des étudiants
    - j'encode dans un autre fichier excel les cotes se trouvant dans le tableau
    - je ferme le fichier xls

    Le premier relevé de notes se génère mais j'obtiens ce message d'erreur lors de la génération du second :

    La référence d'objet n'est pas définie à une instance d'un objet
    Voici comment je ferme le fichier xls :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    finally
                {
                    //Quitter
                    feuille = null;
                    classeur = null;
                    appli.Quit();
                    appli = null;
                }
    J'utilise ceci pour la gestion des fichiers xls :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    using ExcelRN = Microsoft.Office.Interop.Excel;
    Le problème ce passe à cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fermer_ClasseurRN(FichierBase);
    Sauirez-vous me dire comment régler ce problème svp ?

    Merci d'avance.

    beegees

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Que contiennent tes méthodes Fermer_ClasseurRN et Fermer_Classeur ?

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Que contiennent tes méthodes Fermer_ClasseurRN et Fermer_Classeur ?
    Salut,

    Merci pour ta réponse.

    Voici ce que contiens les deux fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    private void Fermer_ClasseurRN(string nomEtudiant)
            {
                try
                {
                    //Auto-Enregistrement 
     
                   // string CheminFichierRN = "c:\\delibes\\" + nomEtudiant;
                    classeurRN.SaveAs(@"c:\delibes\" + nomEtudiant + ".xls",
                ExcelRN.XlFileFormat.xlExcel7, M, M,
                false, false, ExcelRN.XlSaveAsAccessMode.xlNoChange,
                M, M, M, M, M);
     
     
                    classeurRN.Close(true, "c:\\delibes\\" + nomEtudiant + ".xls", M);
     
                    //MessageBox.Show(appliRN.ToString);
     
     
                }
     
                catch (Exception ex) { MessageBox.Show("Erreur est: " + ex.Message); }
     
                finally
                {
                    //Quitter
                    feuilleRN = null;
                    classeurRN = null;
                    appliRN.Quit();
                    appliRN = null;
                }
     
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    private void Fermer_Classeur()
            {
                try
                {
                    //Auto-Enregistrement 
     
     
                    classeur.Close(true, M, M);
     
     
     
                }
                catch (Exception ex) { MessageBox.Show("Erreur est: " + ex.Message); }
     
                finally
                {
                    //Quitter
                    feuille = null;
                    classeur = null;
                    appli.Quit();
                    appli = null;
                }
     
            }
    Je pense que cette boucle est aussi très importante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    while (matricule != "")
                                {
     
                                    //on copie les cotes et les intitulés dans les deux tableaux
                                    for (int i = 0; i <= _NotesNormaux.Length - 2; i++)
                                    {
     
                                        if (((Excel.Range)feuille.Cells[(_ligneDepart - 2), (_ColonneDepart + i)]).Value2.ToString() != "TOTAL th")
                                        {
                                            _NotesNormaux[i] = ((Excel.Range)feuille.Cells[_ligneDepart, (_ColonneDepart + i)]).Value2.ToString();
                                            _LibelleNormaux[i] = ((Excel.Range)feuille.Cells[(_ligneDepart - 2), (_ColonneDepart + i)]).Value2.ToString();
                                       }
                                    }
     
                                    //On cree le releve de l'étudiant
                                    NomFichierRN = "ReleveMA2.xls";
     
                                    string FichierBase = "ReleveMA2";
     
                                    Creer_ClasseurRN(2);
                                    //On écrit le titre 
                                    feuilleRN.Cells[1, 1] = "Relevé de notes MA2 (Délibération du 25 juin 2010) Session 1  INSTITUT DE PHARMACIE - ULB ";
                                    feuilleRN.Cells[4, 1] = nomEtudiant + " - Fait à Bruxelles le 25 juin 2010";
     
                                    for (int i = 0; i <= _NotesNormaux.Length - 2; i++)
                                    {
                                        feuilleRN.Cells[5, 1 + i] = _LibelleNormaux[i];
                                        feuilleRN.Cells[6, 1 + i] = _NotesNormaux[i];
                                    }
     
                                    Fermer_ClasseurRN(nomEtudiant);
     
     
                                    _ligneDepart++;
                                    matricule = ((Excel.Range)feuille.Cells[_ligneDepart, _ColonneMat]).Value2.ToString();
                                }
                                Fermer_Classeur();
    J'ai déplacé Fermer_Classeur(); afin de fermer le classeur que quand tout est terminé mais le problème persiste.

    Encore merci.

    beegees


    Je cherche depuis ce matin mais sans succès.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 310
    Par défaut
    C'est quoi ton "problème" ? Tu as une exception ? Si oui ou et quel message ?

  5. #5
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Dans la méthode Fermer_ClasseurRN, je pense que ta variable classeurRN doit être nulle, ce qui expliquerai l'erreur que tu obtiens.
    Met un point d'arrêt à l'entrée de la méthode et débugge en faisant du pas à pas pour avoir une confirmation.

  6. #6
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Dans la méthode Fermer_ClasseurRN, je pense que ta variable classeurRN doit être nulle, ce qui expliquerai l'erreur que tu obtiens.
    Met un point d'arrêt à l'entrée de la méthode et débugge en faisant du pas à pas pour avoir une confirmation.
    Re,

    Merci pour ta réponse.

    J'ai finalement, après plusieurs heures de débugage, trouvé le problème.

    En fait, il y avait plusieurs problèmes (surtout algorithmiques).

    Il y avait par exemple la fermeture d'un fichier qui était dans un while, un étudiant qui n'était pas incrémenté...

    Après résolution de tous ces problèmes, le programme fonctionne bien (pas encore parfaitement).

    Merci encore pour l'aide.

    beegees

  7. #7
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Citation Envoyé par beegees Voir le message
    Il y avait par exemple la fermeture d'un fichier qui était dans un while, un étudiant qui n'était pas incrémenté...
    Bah, ui !
    Si les étudiants savaient s'incrémenter tous seuls, ça se saurait !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Erreur lors de la fermeture fichier
    Par GuyRo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/12/2013, 14h00
  2. Réponses: 5
    Dernier message: 06/07/2011, 17h14
  3. Réponses: 4
    Dernier message: 08/11/2006, 18h28
  4. Réponses: 3
    Dernier message: 29/10/2006, 23h35
  5. [VB.NET]Erreur lors de la Création d'un fichier XML
    Par ZbergK dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/10/2006, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo