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

VB.NET Discussion :

VB NET VS2019 erreur avec Excel


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraite

    Informations forums :
    Inscription : mai 2016
    Messages : 13
    Points : 7
    Points
    7
    Par défaut VB NET VS2019 erreur avec Excel
    Bonjour à tous(toutes),

    J'ai deux petits programmes en apparence identiques, l'un fonctionne bien, l'autre envoie une erreur (voir image plus bas)

    Le but est de renvoyer le nom de la dernière feuille d'un classeur xlsx (office 365)

    Premier programme : qui fonctionne

    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
     
    Public Class Form1
       Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Dim fic As String = "d:\fichiertest.xlsx"
            Dim phase As String
     
            Dim xlApp = New Microsoft.Office.Interop.Excel.Application
            Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
            Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet
     
            xlBook = xlApp.Workbooks.Open(fic)
            xlSheet = xlApp.Sheets(xlBook.Sheets.Count)
            phase = xlSheet.Name
            xlBook.Close()
     
            MsgBox(phase)
     
        End Sub
    End Class
    Deuxième programme : qui renvoie l'erreur

    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
     
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Dim fic As String = "d:\fichiertest.xlsx"
            Dim phase As String
     
            Dim xlApp = New Microsoft.Office.Interop.Excel.Application
            Dim xlBook As Microsoft.Office.Interop.Excel.Workbook
            Dim xlSheet As Microsoft.Office.Interop.Excel.Worksheet
     
            xlBook = xlApp.Workbooks.Open(fic)
            'xlSheet = xlApp.Sheets(xlBook.Sheets.Count)
            phase = (xlApp.Sheets(xlBook.Sheets.Count)).name 'ligne en erreur, l'intellisense ne met d'ailleurs pas le N majuscule à "name"
            xlBook.Close()
     
            MsgBox(phase)
     
        End Sub
    End Class
    l'erreur est la suivante :
    Nom : Capture.JPG
Affichages : 59
Taille : 38,0 Ko

    Si quelqu'un pouvait m'expliquer je lui en serais très reconnaissant parce que là je ne vois pas bien la différence entre ces deux programmes si ce n'est que le premier utilise une variable de plus (xlSheet)

    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 625
    Points : 959
    Points
    959
    Par défaut
    Bonsoir,
    phase = xlApp.Sheets(xlBook.Sheets.Count).name

  3. #3
    Futur Membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraite

    Informations forums :
    Inscription : mai 2016
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,

    Merci pour la réponse mais ceci était mon premier jet et il renvoie aussi l'erreur. J'avais carrément cour-circuité le xlSheet qui ne me semblait servir à rien dans ce cas...

    J'ai une autre interrogation : J'ai toujours pensé que la définition de xlSheet devrait être : xlSheet=xlBook.sheets(...) (tout comme la définition de xlBook est xlBook=xlApp.workbook)
    Une sorte de "logique descendante" app -> book -> sheet

  4. #4
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 625
    Points : 959
    Points
    959
    Par défaut
    Bonjour,
    Il y a effectivement une logique descente, mais dans le code que tu présentes ou est la logique ?
    (Xxx).name!
    Voilà la logique descente :
    App.workbooks(1).sheets(1).name

    Tu noteras que tu n'as pas besoin de décliner à partir d'xlApp vu que tu as xlbook!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'phase = (xlApp.Sheets(xlBook.Sheets.Count)).name
    phase = xlApp.workbooks(1).Sheets(xlBook.Sheets.Count).name
    Dans mon précédent poste j'ai effectivement comis une erreur !

  5. #5
    Futur Membre du Club
    Homme Profil pro
    retraite
    Inscrit en
    mai 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : retraite

    Informations forums :
    Inscription : mai 2016
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Bonjour,

    Donc si j'ai bien tout compris :
    phase=xlApp.workbook(...).sheets(...).name ou phase=xlBook.sheets(...).name (puisque xlBook=xlApp.workbook(...)) devraient fonctionner
    mais pas phase=xlApp.sheets(...).

    Or c'est l'inverse qui se passe : le 2e cas fonctionne mais pas les deux autres!?
    sauf si j'introduis un xlSheet=xlApp.sheets(...) et que je fais phase=xlSheet.name.

    Pourquoi est-il nécessaire d'introduire une variable supplémentaire xlSheet ???

    Autre question :
    quelle différence y'a t-il entre worksheets(1).name="toto" et sheets(1).name="toto" ?

    Désolé de t'ennuyer mais j'aimerais comprendre et c'est tellement confus pour moi que je ne sais même pas si je m'exprime clairement...

Discussions similaires

  1. [XL-2010] message d'erreur avec excel 2010
    Par zergo dans le forum Excel
    Réponses: 9
    Dernier message: 03/12/2015, 11h50
  2. erreurs avec asp.net affichage web
    Par dorian2031 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 14/02/2007, 11h09
  3. erreur de conexion a une base de donneés access avec excel(vba)
    Par leo13 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/11/2006, 09h09
  4. [VB.NET] Pourquoi ai-je une erreur avec GetResponse ?
    Par Arnaud_B dans le forum Services Web
    Réponses: 1
    Dernier message: 25/07/2006, 17h13
  5. [VB.NET] font.colorindex pour excel avec .NET
    Par beegees dans le forum Windows Forms
    Réponses: 2
    Dernier message: 23/07/2006, 16h17

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