Tester l'existence dun feuille de calcul avec VB.net

jamsom 247 Messages postés mercredi 8 mai 2013Date d'inscription 4 novembre 2017 Dernière intervention - 22 mai 2016 à 16:20 - Dernière réponse : Whismeril 11785 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 17 juillet 2018 Dernière intervention
- 23 mai 2016 à 07:08
Bonjour,
sur ma Form j'ai un bouton parcourir et DatagridView
le bouton bouton parcourir permet de choisir un fichier Excel sur mon disque dur, si ce classeur contient une feuille de calcul nommée Source, il affiche les information sur DataGridView et tout marche bien,
si la feuille Source n'existe pas il maffiche un message d'erreur

je veux faire un test si la feuille Source existe il affiche les informations sinon il va afficher un message box pour m'informer que le nom Source n'existe pas

aidezoi Svp
Afficher la suite 

Votre réponse

10 réponses

ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 22/05/2016 à 17:15
0
Merci
Bonjour,
Avant de le faire en "pilotage" de Excel depuis VB.Net, il va falloir que tu saches le faire depuis VBA/Excel.
Si tu le sais déjà : montre le code que tu écrirais depuis VBA/Excel directement.
Si tu ne le sais pas : discussion à ouvrir dans le forum VBA (sans même mentionner le fait que tu veux "piloter" depuis VB.Net).
On ne saurait piloter à distance un véhicule que l'on ne saurait conduire directement. Cela va de soi.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
Whismeril 11785 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 17 juillet 2018 Dernière intervention - 22 mai 2016 à 18:35
0
Merci
Bonsoir
Si tu comptes utiliser l'API interop, alors commence par suivre le conseil d'Uc.
L'intérêt principal de cette api est de piloter le logiciel, donc d'en faire tout ce qu'on veut:
  • mise en forme
  • formules
  • graphiques
  • etc....

Le désavantage principal est sa lenteur d'exécution.
Et bien sûr, il faut excel.

Si ton besoin consiste juste à l'extraction de données (et éventuellement l'export), il y'a d'autres méthodes bien plus rapides:

Donc afin de te répondre il faudrait savoir quelle méthode tu utilises ou quel besoin tu as.
Commenter la réponse de Whismeril
jamsom 247 Messages postés mercredi 8 mai 2013Date d'inscription 4 novembre 2017 Dernière intervention - 22 mai 2016 à 19:10
0
Merci
voici mon code:

OpenFileDialog1.Filter = "fichier Excel (*.xlsx)|*.xlsx| fichier Excel (*.xlsm)|*.xlsm"
OpenFileDialog1.ShowDialog()

Try
dim titre as string
Dim lien As String = OpenFileDialog1.FileName
Dim MyConnection As System.Data.OleDb.OleDbConnection
Dim Dataset As System.Data.DataSet
Dim Mycommand As System.Data.OleDb.OleDbDataAdapter
Dim path As String = lien
titre = lien

MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0; Data source=" + path + "; Extended Properties=Excel 12.0;")

Mycommand = New System.Data.OleDb.OleDbDataAdapter(" Select * from [source$]", MyConnection)

Dataset = New System.Data.DataSet
Mycommand.Fill(Dataset)
DataGridView1.DataSource = Dataset.Tables(0)

MyConnection.Close()

Catch ex As Exception
MsgBox(ex.Message.ToString)
End Try
Commenter la réponse de jamsom
Whismeril 11785 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 17 juillet 2018 Dernière intervention - 22 mai 2016 à 20:08
0
Merci
Bon, ole de ça n'est pas mon truc, mais tu as déjà une solution, à savoir le Try catch.
Tu peux même faire plusieurs catch en fonction de l'erreur retournée
Commenter la réponse de Whismeril
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 22/05/2016 à 20:54
0
Merci
 Dim lien As String = OpenFileDialog1.FileName
...
Dim path As String = lien
...
titre = lien

...
Je ne connais vraiment rien de VB.Net, mais aimerais qu'un connaisseur m'explique les lignes de code ci-dessus.
Pour moi, finalement :
Lien = OpenFileDialog1.FileName (pour autant qu'un fichier ait été sélectionné)
Mais également :
Path = OpenFileDialog1.FileName (pour autant qu'un fichier ait été sélectionné)
Mais également :
titre = OpenFileDialog1.FileName (pour autant qu'un fichier ait été sélectionné)
Etrange, pour moi, cette multiplication de variables ayant le même contenu ...
On m'explique ?
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Commenter la réponse de ucfoutu
jamsom 247 Messages postés mercredi 8 mai 2013Date d'inscription 4 novembre 2017 Dernière intervention - 22 mai 2016 à 21:17
0
Merci
les variable Titre et lien
je les déclare comme des variables globales, il sont utilisés dans d'autres boutons
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 22 mai 2016 à 21:20
Oui ? Et alors ?
Bon ... je vais dormir (ce sera mieux).
Whismeril 11785 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 17 juillet 2018 Dernière intervention > ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - 22 mai 2016 à 22:56
Oh je n'avais même pas vu!
Si c'est très utile, ça sert à tripler la mémoire nécessaire!
Commenter la réponse de jamsom
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionModérateurStatut 11 avril 2018 Dernière intervention - Modifié par ucfoutu le 22/05/2016 à 23:53
0
Merci
Salut, Whismeril...
Je te propose maintenant une petite causerie.
Comment qualifierions-nous un personnage qui entrerait dans l'enceinte d'une usine pour y rechercher quelque-chose sur les étagères de l'un des entrepôts, sans même savoir si cet entrepôt-là existe parmi les entrepôts de cette usine ? Sans vraiment tenir à le qualifier avec précision, j'avancerais quand-même que ce personnage est totalement étranger à cette usine. Et s'il entre dans cette enceinte autrement que par la porte normale (l'accès/ouverture), il doit bien avoir ses raisons que je ne connais pas.
Ceci étant dit :
Un classeur Excel est en fait une base de données composée d'une ou de plusieurs tables. Les différentes tables d'un classeur sont ses feuilles de calcul.
Vouloir extraire des données de l'une des tables d'une base sans connaître les noms des tables qui la composent (et donc encore moins si le nom de table que l'on "suppose" existe) est pour le moins surprenant.
Travailler à coups de Try Catch servirait à quoi ? à tenter de trouver une table (laquelle) en essayant plusieurs "clés" (j'ai choisi mon mot) du trousseau de clés que l'on porte à la ceinture ? Quelle serait donc une telle démarche ?
S'il y tient maintenant tant : il lui faut alors commencer par analyser la structure de la base de données concernée (son classeur, donc), afin d'y recenser la/les table(s) (ses feuilles de calculs) présentes. Puis en choisir une (laquelle ?) et y farfouiller ...
Comment le faire ? Réponse dans l'un des messages de cette discussion :
https://social.msdn.microsoft.com/Forums/vstudio/en-US/ce4bbe9c-7d13-44c5-a26c-4b84912a51f3/read-excel-file-without-worksheet-name?forum=vbgeneral
Je sais que cela t'intéressera mais ne suis pas certain de ce que notre ami demandeur y comprenne grand chose
Bonne nuit.

PS : il lui serait bien évidemment plus facile d'entrer sans se cacher par la porte normale (instanciation de Excel, du classeur, des feuilles ...)

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
Whismeril 11785 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 17 juillet 2018 Dernière intervention - 23 mai 2016 à 07:08
Bonjour

Comme je l'ai écrit plus haut (ou ou essayé car mon correcteur d'orthographe est passé par là et je n'ai pas fait attention sur le moment), Ole DB n'est pas dans mon champ de compétence, j'en ai fait un peu il y a bien longtemps et sans doute pas au mieux.
Le try catch est nécessaire car il arrive qu'une connexion ne marche pas.
Donc vu qu'il est là, une solution est de s'en servir.
Bien sûr l'interception d'exemption n'est pas la meilleure façon de programmer et la framework est en général bien faite.
Le lien que tu as trouvé le montre bien, il existe un outils sur Ole BD qui retourne la liste des tables.
Cela me parait parfaitement logique, mais hier j'avais la flemme de chercher ;-).
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.