Probleme avec les feuilles (excel)

gaara91300 - 21 juin 2013 à 16:49
 gaara91300 - 24 juin 2013 à 20:07
Bonjour à tous !
Voilà je débute dans le domaine du VB !
Je fais en ce moment un programme qui va me permettre de ranger du text dans des cellules/colonnes.
Petit hic que j'ai rencontré est que j'aimerai que lorsque je clique sur mon bouton qui va lancer excel , il se lance en étant sur la feuille que je désire. ( Selon ce que je choisi dans ma comboBox , cela sera tel ou tel feuille) Voici mon code :

Private Sub createButton_Click() Handles createButton.Click

        'Déclaration des variables
        Dim appExcel As Excel.Application
        Dim wbExcel As Excel.Workbook
        Dim wsExcel As Excel.Worksheet

        'Ouverture d'Excel
        appExcel = CreateObject("Excel.Application")
        'Ouverture de mon fichier Excel
        wbExcel = appExcel.Workbooks.Open("Rapports.xls")
        'Affichage de la feuille voulue
        If ComboBox1.SelectedItem = "Rapports" Then Sheets("Rapports 2013").Select()
        If ComboBox1.SelectedItem = "Notes d'Atelier" Then Sheets("Notes d'Atelier 2013").Select()
        If ComboBox1.SelectedItem = "Mémos" Then Sheets("Mémos 2013").Select()
        If ComboBox1.SelectedItem = "Comptes rendus" Then Sheets("Comptes rendus 2013").Select()
        If ComboBox1.SelectedItem = "Notes environnement" Then Sheets("Notes environnement").Select()
        If ComboBox1.SelectedItem = "Notes sécurité" Then Sheets("Notes sécurité").Select()
        If ComboBox1.SelectedItem = "Notes d'Infos" Then Sheets("Notes d'Info 2013").Select()
        If ComboBox1.SelectedItem = "Notes d'équipes" Then Sheets("Notes d'équipes 2013").Select()

        appExcel.Visible = True


J'ai bien regarder sur excel comment il s'y prenait pour changer de feuille en regardant une maccro et il met : Sheets("MaFeuille").Select
J'ai bien m'y cela mais l'érreur pour chaque ligne est :'Sheets' est ambigu, importé des espaces de noms ou des types 'Microsoft.Office.Interop.Excel, Excel"
Je ne sais quoi faire :/

Merci d’avance.

17 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 juin 2013 à 16:54
Bonjour,
Sheets n'est en effet pas connu de VB.Net, puisqu'il s'agit d'une collection de VBA/Excel ===>> wbExcel.Sheets



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
21 juin 2013 à 18:06
Bonjour,

Il faut en premier lieu importer les références: Microsoft Excel 12.0 Object Library et Microsoft Office 12.0 Object Library
J'espère que tu l'as fait. Voici le code pour sélectionner la feuil2, tu l'adapteras ,selon tes besoins:

Imports Microsoft.Office.Interop

Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        'Déclaration des variables
        Dim PptApp As New Excel.Application
        Dim wbExcel As Excel.Workbook

        'Ouverture d'Excel
        PptApp.Visible = True
        'Ouverture de mon fichier Excel
        wbExcel = PptApp.Workbooks.Open("C:\chemin du Classeur.xlsx")

        'Affichage de la feuille voulue
        PptApp.ActiveWorkbook.Worksheets("Feuil2").Select()

        PptApp.Visible = False
        PptApp.Quit()
    End Sub
End Class



@+ Le Pivert
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 juin 2013 à 18:21
Bonjour, le Pivert,
Pourquoi :
PptApp.ActiveWorkbook.Worksheets("Feuil2").Select()

alors que wbExcel est déjà défini comme étant le classeur ouvert ?
wbExcel.WorkSheets("Feuil2").select devrait suffire.

A gaara91300 :
Pourquoi ce "select". On travaille directement sur les objets Excel, sans les sélectionner !
Et à ce propos : j'aurais personnellement créé dans VB.Net un objet genre :
Dim toto As Excel.Worksheet
toto = wbExcel.worksheets("Feuil2")
et aurait travaillé sur l'objet toto.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 juin 2013 à 18:27
et c'est en fonction (les ifs ou select case) du choix dans la combo que j'aurais défini toto, bien évidemment.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
22 juin 2013 à 08:53
Bonjour UCFOUTU,

bien vu, c'est exact autant pour moi.

Si cela intéresse le demandeur, voici une classe en VB.NET assez récente avec démo sur le pilotage d'Excel depuis VB.NET. Il y trouveras toutes les manipulations pouvant être faites.

http://www.vbfrance.com/codes/CLASSE-PILOTER-EXCEL-SIMPLEMENT_52448.aspx

@+ Le Pivert
0
Je vous remercie beaucoup de tout vos précieux conseils ! Je vais essayer tout cela de suite et vous tiendrai au courant.

A Le Pivert : Ouais bien sur que cela m’intéresse merci beaucoup :)
0
Voila j'ai de nouveau un soucis :/

ucfoutu j'ai fais comme tu me l'avais conseillé :

 'Déclaration des variables
        Dim appExcel As Excel.Application
        Dim wbExcel As Excel.Workbook
        Dim wsExcel As Excel.Worksheet

        'Ouverture d'Excel
        appExcel = CreateObject("Excel.Application")
        'Ouverture de mon fichier Excel
        wbExcel = appExcel.Workbooks.Open("Rapports.xls")
        'Affichage de la feuille voulue
        wsExcel = wbExcel.Worksheets("Rapport 2013")

        If ComboBox1.SelectedItem = "Rapports" Then wbExcel.Worksheets("Rapports 2013")
        If ComboBox1.SelectedItem = "Notes d'Atelier" Then wbExcel.Worksheets("Notes d'Atelier 2013")
        If ComboBox1.SelectedItem = "Mémos" Then wbExcel.Worksheets("Mémos 2013")
        If ComboBox1.SelectedItem = "Comptes rendus" Then wbExcel.Worksheets("Comptes rendus 2013")
        If ComboBox1.SelectedItem = "Notes environnement" Then wbExcel.Worksheets("Notes environnement")
        If ComboBox1.SelectedItem = "Notes sécurité" Then wbExcel.Worksheets("Notes sécurité")
        If ComboBox1.SelectedItem = "Notes d'Infos" Then wbExcel.Worksheets("Notes d'Info 2013")
        If ComboBox1.SelectedItem = "Notes d'équipes" Then wbExcel.Worksheets("Notes d'équipes 2013")

        appExcel.Visible = True


Nouvelle Erreur : "Des wrappers personnalisés mis à jour sont disponibles pour les composants référencés suivants : Excel."

Pourtant dans les références il y a bien Microsoft Excel 12.0 Objet Librairy et Microsoft Office 12.0 Objetc librairy ( et aussi Microsoft Excel 5.0 Objet Librairy)

Que faire ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 juin 2013 à 13:36
Que faire ?

Comme moi : de la liaison tardive ("late binding") plutôt que de dépendre de références cochées.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Comment fait on cela ? Car je ne connais pas :/
Aurais tu un lien ou autres pouvant me montrer la marche à suivre ? ( cela m'évitera de te déranger a m'expliquer ^^')
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
22 juin 2013 à 13:55
Voilà ceci fonctionne très bien chez moi en VB10 et sous Excel 2007:

Imports Microsoft.Office.Interop
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        'Déclaration des variables
        Dim appExcel As New Excel.Application
        Dim wbExcel As Excel.Workbook
        'Ouverture d'Excel
        appExcel.Visible = True
        'Ouverture de mon fichier Excel
        wbExcel = appExcel.Workbooks.Open("C:\Users\Daniel\Documents\Classeur1.xlsx")

        'Affichage de la feuille voulue
        '  wbExcel.wsExcel("Feuil2").select()
        If ComboBox1.SelectedItem = "Feuil1" Then wbExcel.Worksheets("Feuil1").select()
        If ComboBox1.SelectedItem = "Feuil2" Then wbExcel.Worksheets("Feuil2").select()
        If ComboBox1.SelectedItem = "Feuil3" Then wbExcel.Worksheets("Feuil3").select()

        '' appExcel.Visible = False
        ' appExcel.Quit()

    End Sub
End Class



@+ Le Pivert
0
Sa ne fonctionne pas , cela ne veux plus m'ouvrir mon fichier excel et je n'ai rien changé a ce niveau ;/
0
L'exception COMexception n'a pas été gérée
Membre introuvable. (Exception de HRESULT : 0x80020003 (DISP_E_MEMBERNOTFOUND))

Alors qu'avant il s'ouvrait très bien ..
Et j'ai toujours le msg sur les wrappers.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
23 juin 2013 à 18:05
J'aimerais voir ta ligne de code pour ouvrir ton classeur. Car dans ce que tu nous as donné:

'Ouverture de mon fichier Excel
wbExcel = appExcel.Workbooks.Open("Rapports.xls")


je ne vois pas le chemin de ton classeur!!!!!!!!!!

@+ Le Pivert
0
Au début lorsque j'ai fais mon programme au début cela marchait très bien comme ça et cela s'ouvrait. Justement au début je comprenais pas pourquoi cela ne marchait pas en mettant entièrement le chemin d'accès et en mettant uniquement le nom de fichier sa marchait.

Je viens d’essayer en mettant entièrement le chemin :
wbExcel = appExcel.Workbooks.Open("C:\Users\Patricia\Desktop\Rapports.xls")


Même erreur :/
0
scn68100 Messages postés 153 Date d'inscription dimanche 27 août 2006 Statut Membre Dernière intervention 26 décembre 2019
24 juin 2013 à 07:14
Bonjour,
J'avoue ne pas avoir pris le temps de d'étudier les demandes et réponse, mais je communique le code que j'emploie
En espérant que cela solutionne le problème ...
Contrôler si EXCEL est installé sur le poste
 Private Sub ControleExcel()
        Dim Resultat As String
        On Error Resume Next
        appExcel = CreateObject("Excel.Application")
        If appExcel Is Nothing Then
            wAigDoc = 0
        Else
            wAigDoc = 1
            wOK = True
            Resultat = "Excel est installé" & vbLf & _
            "Version: " & appExcel.Version & vbLf & _
            "Build: " & appExcel.Build & vbLf & "Code produit: " & _
            appExcel.ProductCode()
            '  MsgBox(Resultat) '   ****************************
            appExcel.close()
            appExcel.Quit()
            appExcel.dispose()
            appExcel = Nothing
        End If
    End Sub

Ouverture du classeur (gstrNomClasseurStat contient le chemin complet du classeur)
Private Sub OuvreClasseur()
        wOK = False
        Try

            ' List all the running Excel processes
            ' Liste tous les procesus Excel en cours
            intFirstIDs = ListID()

            appExcel = CreateObject("Excel.Application")
            xlWorkbooks = appExcel.Workbooks
            'xlBook = xlWorkbooks.Open(gstrNomClasseurStat, Password:=123456, WriteResPassword:=123456)
            xlBook = xlWorkbooks.Open(gstrNomClasseurStat)
            ' Liste de nouveau tous les procesus Excel en cours, pour pouvoir comparer avec la première liste
            intLastIDs = ListID()
            ' Get the ID
            ' Extraction de l'ID grâce à la comparaison des 2 listes
            intID = ExtractID(intFirstIDs, intLastIDs)

            FlagClasseur = True
            wOK = True
        Catch ex As Exception
            FlagClasseur = False
            wOK = False
            MsgBox("ERREUR à l'ouverture " & gstrNomClasseurStat & " erreur " & ex.Message)
            Exit Sub
        End Try
    End Sub

Ouverture de la feuille (gstrFeuilleAct contient le nom de la feuille)
Try
            For wIndFeuille = 1 To xlBook.Sheets.Count
                If xlBook.Sheets(wIndFeuille).Name = gstrFeuilleAct Then Exit For
            Next
            MaFeuille = xlBook.Sheets
            FeuilleActivite = xlBook.Sheets
            xlSheet = MaFeuille.Item(wIndFeuille)  '   Sélectionner la feuille 1 
            MaFeuille.Select()             '   La rendre active à l'écran
            If xlSheet Is Nothing Then
                MsgBox("ERROR: la feuille n'est pas trouvée")
                Exit Sub
            End If
        Catch erreur As Exception
            MsgErreur = "EcritActivite " & vbCrLf & " Erreur pendant la sélection de la feuille " & gstrFeuilleAct & " " & erreur.Message
            wOK = False
            Anomalie.ShowDialog()
            Exit Sub
        End Try

Il faut définir les variables
'   EXCEL
    Public appExcel As Object
    Public xlBook As Microsoft.Office.Interop.Excel.Workbook
    Public xlSheet As Microsoft.Office.Interop.Excel.Worksheet
    Public xlWorkbooks As Microsoft.Office.Interop.Excel.Workbooks
    Dim MaFeuille As Microsoft.Office.Interop.Excel.Sheets
    Dim FeuilleActivite As Microsoft.Office.Interop.Excel.Sheets

    Dim range As Object 'Range 
    Dim FlagClasseur As Boolean = False '   True si ouverture classeur faite
    Dim FlagApplication As Boolean = False '   True si Excel lancé

    Private gstrNomClasseurStat As String
    Private Const gstrFeuilleAct As String = "Activite"
    Private Const gstrFeuilleFac As String = "NbFacture"
    Private Const gstrFeuilleCli As String = "NbClient"
    Private Const gstrFeuilleSnc As String = "NbSeance"
    Private Const gstrFeuilleRec As String = "Recette"
    Private Const gstrFeuilleInf As String = "Information"
    ' ****************************************

Et ajouter les IMPORTS
Imports System.Reflection ' For Missing.Value and BindingFlags
Imports System.Runtime.InteropServices ' For COMException
Imports System.Drawing.Printing
Imports System.IO

Et dans les références ajouter dans .NET Microsoft.Office.Interop.Excel
En espérant aider
SC
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
24 juin 2013 à 08:03
En vue de ton chemin, j'en déduit que c'est un raccourci bureau. Donc le chemin que tu indiques n'est pas le bon. Essaie avec celui-ci:

wbExcel = appExcel.Workbooks.Open("C:\Users\Patricia\Desktop\Rapports - Raccourci.lnk")


C'est pour cela que ça ne fonctionnait pas. Mais il vaut mieux à mon avis mettre le chemin réel de ton classeur. Ensuite supprime la référence Microsoft Excel 5.0 puisque tu as la plus récente 12.0
Si tes ennuis persistent fait un nouveau projet comme je te l'ai indiqué avec un classeur test. Cela prends 5 minutes et tu verras de quoi il retourne.


@+ Le Pivert
0
En fait c'est bon ! Pour le peu de code que j'avais , j'ai repris a zéro ( en le gardant bien sûr) et maintenant tout marche comme sur des roulettes. Je vous remercie beaucoup de votre soutien et vos connaissances :)

A bientôt peut être !
0
Rejoignez-nous