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