Bonjour!
Je suis (assez) débutant en VB.net et, bien que je me sorte plutôt bien des choses les plus simples, j'avais une question à poser et espère que vous pourrez m'aidez!
Déjà, j'espère avoir posté ma question au bon endroit et espère ne pas faire redite avec de multiples sujets! Voila:
Je suis en train de programmer une petite appli pour gérer les oublis de matériel de mes élèves (je suis enseignant). Celle-ci s'appuie sur un document excel: une première feuille récapitule les classes et les élèves les composant, puis il y a une feuille par classe où le nom de chaque élève se trouve en tête de colonne.
Pour faire simple: lorsque l'utilisateur clique un bouton, l'application inscrit une remarque concernant un oubli pour l'élève en question. Bref, ce que je veux dire, c'est que mon appli gère un classeur excel de manière automatique
J'ai bien compris la base:
- je déclare la référence à Excel
- En tête de code je déclare
Le blabla habituel dans mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 'IMPORTS EXCEL Imports System.Data.OleDb Imports Excel = Microsoft.Office.Interop.Excel
J'ouvre mon classeur et en fais ce que je veux (ici, il récupère l'adresse du fichier dans un fichier texte)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim MyExcel As New Excel.Application Dim wbExcel As Excel.Workbook 'Classeur Excel Dim wsExcel As Excel.Worksheet 'Feuille Excel
Etc, etc... Tout ça, ça va. Ma question c'est: quel est le meilleur moment pour le fermer??? Cela me mystifie. Cela me mystifie car en général, je ferme avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 'Ouverture du fichier excel wbExcel = MyExcel.Workbooks.Open(lines(1)) 'compte les colonnes de la feuille 1 Dim NbColonnes = MyExcel.Sheets(1).UsedRange.Columns.count() MyExcel.Visible = False If NbColonnes <> 0 And MyExcel.Application.Sheets(1).Cells(1, 1).value <> "" Then CheckBox5.Checked = True ClasseCréée = 1
Cela marche, mais comme mon appli est constituée de plusieurs Form, elle switche de l'une à l'autre et je me retrouve souvent avec des erreurs. Exemple: l'utilisateur rentre sur une form (ex: la form "gestion de classe" - qui ouvre le classeur excel pour vérifier le nombre de classes), ressors sans rien changer( et se retrouve sur la "form principale" après fermeture d'excel) et finalement retourne sur la forme "Gestion de classe")...Et la BIM. Une erreur du type wbExcel non déclaré ou ne revoie à rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 MyExcel.Quit() MyExcel = Nothing wbExcel = Nothing wsExcel = Nothing
D'où ma question: quelle est la meilleur façon de fermer? Où demander la fermeture du classeur? Et surtout quoi garder? Je me suis apperçu que lorsque je ne garde que MyExcel.Quit(), cela va souvent mieux. Quelle différence alors avec "MyExcel.Workbooks.close()"? Et quand utiliser MyExcel = Nothing/wbExcel = Nothing/wsExcel = Nothing??? Souvent, je me disais que je pouvais bien utiliser ces lignes là en me disant que si je repassais derrière un peu plus loin où en relançant un évènement dans lequel ma routine repassait par
maie en fait, cela génère plus d'erreurs qu'autre chose...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Dim MyExcel As New Excel.Application Dim wbExcel As Excel.Workbook 'Classeur Excel Dim wsExcel As Excel.Worksheet 'Feuille Excel
Voila donc ma question... Quoi utiliser exactement, et quand??? Mon code fait si souvent appel à mon classeur excel dans de si nombreuses forms qu'au final je m'étais demandé s'il ne serait pas plus judicieux de l'ouvrir en début de code (genre avec une routine dans un module) pour au final ne le fermer définitivement que quand l'utilisateur ferme l'appli. je n'ai pas essayé, je ne sais même pas si cela marcherait ou non. Ce qui est sûr c'est que cette histoire d'ouverture/fermeture me pose bien des soucis. J'apprends en autodidacte et, bien qu'arrivant toujours à mes fin, je me demandais si quelqu'un pouvait m'expliquer une fois pour toutes comment m'y prendre pour faire les choses proprement. Que dois-je utiliser... Et où
Désolé pour la longueur de mon post... J'ai essayé d'être le plus clair possible. Merci par avance de votre aide!!
Partager