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 :

Ouverture Excel depuis vb.net


Sujet :

VB.NET

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 887
    Par défaut Ouverture Excel depuis vb.net
    Bonjour à tous,
    J'ai un petit problème que je n'arrive pas à régler quand depuis vb.net j'ouvre un classeur Excell pour la 1ère fois j'ai deux classeurs qui s'ouvrent dont le premier est "Classeur1" et le second celui que je désire :

    Voiçi comment j'ai créé mon application :
    Variables globales :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Imports Microsoft.Office.Interop
    Imports Microsoft.Office.Interop.Excel
    Module Module1
            Public oApp As New Excel.Application
            Public oWkb = oApp.Workbooks.Add
            Public oWSht As New Excel.Worksheet 'feuille de calcul
            Public chemin As String = "C:\Users\Documents\Excel\Pass.xlsx"
            Public onglet As String = "Utilisés"
            Public lRow As Long 
        End Module
    et l'ouverture du classeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub Ouvrir(Visible As Boolean)
        If oApp Is Nothing Then
            oApp = New Excel.Application
       End If
       If Visible Then 
          oApp.Visible = True 
       End If
     
       oWkb = oApp.Workbooks.Open(chemin)
    end sub
    Dans ce cas Visible est tjrs égal à true.
    Quand je ferme les deux classeurs et que je demande la réouverture je n'ai plus ce problème, si quelqu'un a une idée...

  2. #2
    Membre éprouvé Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 317
    Par défaut
    Bonjour,

    J'utilise plutôt cette façon il te faut transformer la demande form1 en module bien sur :
    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
     
    Imports Microsoft.Office.Interop.Excel
     
    Public Class Form1
        Private Sub OpenExFile(filePath As String)
     
            'nouvelle instance de l'application Excel
            Dim excelApp As New Application()
     
            ' Rend Excel visible (facultatif)
            excelApp.Visible = True
     
            ' Ouvre le classeur Excel
            Dim workbook As Workbook = excelApp.Workbooks.Open(filePath)
     
            ' Accéde à la première feuille de calcul (facultatif)
            Dim worksheet As Worksheet = CType(workbook.Sheets(1), Worksheet)
     
            ' Affiche le nom de la feuille de calcul dans une MessageBox (facultatif)
            MessageBox.Show("La feuille de calcul active est : " & worksheet.Name)
     
     
        End Sub
     
        Private Sub ButtonOpenEx_Click(sender As Object, e As EventArgs) Handles ButtonOpenEx.Click
     
             Dim filePath As String = "C:\Truc\MAchin.xlsx"
     
            OpenExFile(filePath)
        End Sub
    End Class
    On peut maintenant lire ou écrire des données dans les cellules du classeur Excel

    Si cela peut t'aider.

  3. #3
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 560
    Par défaut
    Bonsoir,
    On ne test pas un boolean pour mettre la même valeur à un autre boolean.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'If Visible Then 
         ' oApp.Visible = True 
      ' End If
    oApp.Visible=Visible
    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
    Imports System.Runtime.InteropServices
    Imports Microsoft.Office.Interop
    Module Module1
        Sub Main()
            Dim xls As Excel.Application = ExcelApp(True)
            '  Dim Wb As Workbook = xls.Workbooks.Open("C:\Users\Documents\Excel\Pass.xlsx")
            xls.Quit() : Dispose(xls)
        End Sub
        Function ExcelApp(Visible As Boolean) As Excel.Application
            Dim app As New Excel.Application
            app.Visible = Visible
            Return app
        End Function
        Sub Dispose(ByRef obj As Object)
            If obj IsNot Nothing Then
                Try
                    ' Vérifie si l'objet implémente IDisposable
                    Dim disposable = TryCast(obj, IDisposable)
                    If disposable IsNot Nothing Then
                        disposable.Dispose()
                    End If
                    ' Libère les objets COM (Excel, Word, etc.)
                    Marshal.ReleaseComObject(obj)
                Catch ex As Exception
                    ' Ignorer les erreurs si l'objet ne peut pas être libéré
                Finally
                    obj = Nothing
                    GC.Collect()
                    GC.WaitForPendingFinalizers()
                End Try
            End If
        End Sub
    End Module

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 887
    Par défaut
    bjr et merci à vous deux, ça fonctionne maintenant correctement.
    A+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 887
    Par défaut
    Finalement je reviens sur le problème car j'aimerais aussi savoir si mon classeur excel est déjà ouvert, j'ai beau lire les documentations sur ça je ne trouve pas si quelqu'un a une info...MERCI

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 560
    Par défaut
    Bonsoir,
    Tu veux savoir si ton fichier est ouvert sur ta machine ou si il est ouvert d'une manière générale ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 887
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonsoir,
    Tu veux savoir si ton fichier est ouvert sur ta machine ou si il est ouvert d'une manière générale ?
    ***********************
    bjr et merci, je voudrais savoir si le classeur excel est ouvert sur ma machine quand je demande son ouverture pour éviter qu'il m'ouvre deux classeurs.

  8. #8
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 560
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 560
    Par défaut
    Bonjour,
    Voici un exemple d'utilisation de la fonction IsOuvert en VB.NET pour vérifier si un classeur Excel spécifique est déjà ouvert :
    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
     
    Imports Microsoft.Office.Interop.Excel
     
    Module Module1
        Sub Main()
            ' Chemin complet du fichier Excel à vérifier
            Dim cheminFichier As String = "C:\Chemin\Vers\VotreFichier.xlsx"
     
            ' Créer une instance de l'application Excel
            Dim excelApp As New Application
            excelApp.Visible = True ' L'application Excel visible
     
            ' Vérifier si le classeur est déjà ouvert
            If IsOuvert(cheminFichier, excelApp) Then
                Console.WriteLine("Le classeur est déjà ouvert.")
            Else
                Console.WriteLine("Le classeur n'est pas ouvert.")
                ' Vous pouvez ouvrir le classeur ici si nécessaire
                ' Dim classeur As Workbook = excelApp.Workbooks.Open(cheminFichier)
            End If
     
            ' Fermer l'application Excel si elle n'est plus nécessaire
            excelApp.Quit()
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp)
            excelApp = Nothing
        End Sub
     
        Public Function IsOuvert(fichier As String, ByRef excelApp As Application) As Boolean
            Dim classeurOuvert As Boolean = False
     
            Try
                ' Parcourir les classeurs ouverts dans l'instance Excel fournie
                For Each classeur As Workbook In excelApp.Workbooks
                    If String.Equals(classeur.FullName, fichier, StringComparison.OrdinalIgnoreCase) Then Return True
                Next
            Catch ex As Exception
                ' Gérer les exceptions si nécessaire
                Console.WriteLine("Erreur : " & ex.Message)
            End Try
     
            Return False
        End Function
    End Module

    Explications :

    • Chemin du fichier : Assure-toi de remplacer "C:\Chemin\Vers\VotreFichier.xlsx" par le chemin réel de ton fichier Excel.
    • Instance Excel : Une nouvelle instance de l'application Excel est créée. Si tu souhaites utiliser une instance Excel déjà existante, adapte le code en conséquence.
    • Vérification : La fonction IsOuvert parcourt tous les classeurs ouverts dans l'instance Excel pour vérifier si le fichier spécifié est déjà ouvert.
    • Ouverture du classeur : Si le classeur n'est pas ouvert, tu peux le charger en décommentant la ligne correspondante.
    • Fermeture de l'application Excel : Après les opérations, l'application Excel est fermée et les ressources sont libérées.

    Cet exemple te montre comment utiliser la fonction IsOuvert pour déterminer si un classeur spécifique est déjà ouvert dans une instance d'Excel.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 887
    Par défaut
    bjr et merci, ça fonctionne correctement.

    A+

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

Discussions similaires

  1. Couper/Coller Cellule/Colonne Excel depuis VB.NET
    Par Florian54 dans le forum VB.NET
    Réponses: 3
    Dernier message: 08/03/2011, 20h47
  2. Proteger fichier excel depuis VB.NET
    Par Florian54 dans le forum VB.NET
    Réponses: 1
    Dernier message: 23/02/2011, 16h35
  3. [AC-2003] Ouverture Excel depuis un formulaire
    Par denisw95 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/08/2009, 13h20
  4. Piloter Excel depuis vb.net
    Par l_achraf dans le forum VB.NET
    Réponses: 7
    Dernier message: 02/04/2009, 20h05
  5. [VB.Net] - Acces à Excel depuis VB.Net
    Par toninonino dans le forum Windows Forms
    Réponses: 14
    Dernier message: 30/09/2005, 11h12

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