none
Comment récupérer le chemin des feuilles d'un classeur Excel ? RRS feed

  • Question

  • Bonjour,

    J'ai un petit problème, quand j'imprime un document xls avec vbNet il ne m'imprime que la dernière feuille du classeur, alors j'aurais besoin de récupérer toutes les feuilles du classeur, mais je ne sais comment ?

    Mon classeur est ainsi :

    Dim pathFile As String = "C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls"

    'Chômage

    'Déficit

    'Croissance

    'Inflation

    'Electricité

    En plus je ne sais comment se présente le chemin d'un classeur avec une de ses feuilles, est par exemple (sur la base de ce qui suit) :

    Si le chemin de mon classeur est :

    C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls

    Est-ce que le chemin avec une feuille nommée "croissance", ça donnera :

    C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls.Croissance

    ???

    Avec la méthode

    Dim Prt_Proc As New Process ' pour imprimer

    Je voudrais imprimer tout le classeur, toutes ses feuilles, alors j'aurais besoin de l'information qui suit en vbA afin de la mettre dans vbNet :

    Mettre dans listbox1 touts les chemin+classeur+feuille ???

    Qu'ensuite je n'ai plus qu'à lire la liste et passer chaque ligne à l'impression :

    for i = 0 to fin liste

    Prt_Proc.StartInfo.FileName = chemin+classeur+feuilleX

    Prt_Proc.StartInfo.Verb = "PrintTo"

    next i

    Quelqu'un peut-il avoir l'amabilité de me faire ce petit bout de code ?

    Merci.



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    dimanche 23 octobre 2011 10:29

Réponses

  • bonjour Joseph Attila PUSZTAY,
     
    Sub Liste_Feuilles__ClasseurFermer()
        'Nécéssite d'activer la référence Microsoft ADO ext x.x for DLL and Security
        'Nécéssite d'activer la référence Microsoft ActiveX Data Objects x.x Library
         Dim Cn As ADODB.Connection
        Dim oCat As ADOX.Catalog
        Dim Fichier As String, Resultat As String
        Dim Feuille As ADOX.Table
         Fichier = "C:\TestB.xls"
         Set Cn = New ADODB.Connection
        Set oCat = New ADOX.Catalog
         Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
         Set oCat.ActiveConnection = Cn
         For Each Feuille In oCat.Tables
            Resultat = Resultat & Feuille.Name & vbCrLf
        Next
         MsgBox Resultat
         Set Feuille = Nothing
        Set oCat = Nothing
        Cn.Close
        Set Cn = Nothing
    End Sub
     --
    isabelle
     
     
    • Marqué comme réponse EhJoe lundi 24 octobre 2011 19:41
    dimanche 23 octobre 2011 21:23
  • Bonjour à vous deux et à Joe plus particulièrement,

    La voie empruntée par Isabelle me semble en effet particulière, avec tout le respect pour ses compétences remarquables.
    Mais comme mon mini code, elle ne fait que lister les feuilles du classeur.

    Tout d’abord, j’utilise peu VB.NET parce qu’au boulot je dois me contenter de VBA depuis 2008.  Déjà qu’au début j’avais certains réflexes VB6 qui se révélaient une voie sans issue en VBA...  Comme j’ai peur de mélanger les pinceaux, je me contente du minimum en .NET
    Ensuite tu as posté dans un forum VBA et demandé du code VBA ! (je cite : « Je voudrais imprimer tout le classeur, toutes ses feuilles, alors j'aurais besoin de l'information qui suit en vbA afin de la mettre dans vbNet »)

    À ma connaissance, il faut ouvrir le classeur pour pouvoir imprimer les feuilles, sinon, c’est bien la dernière feuille active qui est imprimée.

    Mais il faut référencer Excel dans VB.NET pour pouvoir l’utiliser comme objet.  Après la déclaration de l’objet, c’est un peu comme si tu passais en VBA automation.

    Pour référencer, recherche dans l’Internet.  Pour les méthodes et propriétés des objets Excel, enregistre des macros et inspire-toi d’elles pour ton code en .NET.
    Attention, cela nécessite qu'Excel soit installé sur le PC d'exécution !


    Si tu le désires, je peux te montrer un code en VBA Automation (le temps de le fabriquer ;-)

    Cdt, Blaise


    • Modifié blaise032 lundi 24 octobre 2011 17:00 ajout citation
    • Marqué comme réponse EhJoe lundi 24 octobre 2011 19:41
    lundi 24 octobre 2011 16:57

Toutes les réponses

  • Bonjour Joe,

    Voici de quoi te mettre sur la piste (code dans le classeur)

    Sub Enumere()
        Dim I As Integer
        For I = 1 To ThisWorkbook.Sheets.Count
            Debug.Print ThisWorkbook.Sheets(I).Name
        Next
    End Sub

    Cdt,
    Blaise

    <EhJoe> a écrit dans le message de news: cccfe3be-83ce-4af2-a1dd-05face568b00@communitybridge.codeplex.com...

    Bonjour,

    J'ai un petit problème, quand j'imprime un document xls avec vbNet il ne m'imprime que la dernière feuille du classeur, alors j'aurais besoin de récupérer toutes les feuilles du classeur, mais je ne sais comment ?

    Mon classeur est ainsi :

    Dim pathFile As String = "C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls"

    'Chômage

    'Déficit

    'Croissance

    'Inflation

    'Electricité

    En plus je ne sais comment se présente le chemin d'un classeur avec une de ses feuilles, est par exemple (sur la base de ce qui suit) :

    Si le chemin de mon classeur est :

    C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls

    Est-ce que le chemin avec une feuille nommée "croissance", ça donnera :

    C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls.Croissance

    ???

    Avec la méthode

    Dim Prt_Proc As New Process ' pour imprimer

    Je voudrais imprimer tout le classeur, toutes ses feuilles, alors j'aurais besoin de l'information qui suit en vbA afin de la mettre dans vbNet :

    Mettre dans listbox1 touts les chemin+classeur+feuille ???

    Qu'ensuite je n'ai plus qu'à lire la liste et passer chaque ligne à l'impression :

    for i = 0 to fin liste

    Prt_Proc.StartInfo.FileName = chemin+classeur+feuilleX

    Prt_Proc.StartInfo.Verb = "PrintTo"

    next i

    Quelqu'un peut-il avoir l'amabilité de me faire ce petit bout de code ?

    Merci.



    --

    Joseph Attila PUSZTAY
    EhJoe  <http://irolog.free.fr/joe/index.htm> Logiciels <http://irolog.free.fr> Romans <http://irolog.free.fr/_gratuit/10romansGratuits/index.htm> Ecrire <mailto:montmartre75018@free.fr>

    --

    dimanche 23 octobre 2011 10:51
  • Bonjour l'ami Blaise,

    Merci mais ça ne marche pas car vbNet ne reconnaît pas le code :

     For i = 1 To ThisWorkbook.Sheets.Count
       msgbox(ThisWorkbook.Sheets(i).Name)
    Next i

    En plus il lui faudrait un fichier à lire, or dans ton exemple il n'y a rien, là je ne comprends pas ce q'uil peut lire ?

    Sauf si ThisWorkbook ce soit le classeur en cours, alors le seul problème et que je ne suis pas dans le classeur mais bien ailleurs dans mon code vbNet, ah ?

    Voici mon chemin+fichier

    "C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls"

    Il faudrait peut être lui dire que c'est ce fichier qu'il faut lire, mais comment ?

     

     



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    dimanche 23 octobre 2011 16:27
  • bonjour Joseph Attila PUSZTAY,
     
    Sub Liste_Feuilles__ClasseurFermer()
        'Nécéssite d'activer la référence Microsoft ADO ext x.x for DLL and Security
        'Nécéssite d'activer la référence Microsoft ActiveX Data Objects x.x Library
         Dim Cn As ADODB.Connection
        Dim oCat As ADOX.Catalog
        Dim Fichier As String, Resultat As String
        Dim Feuille As ADOX.Table
         Fichier = "C:\TestB.xls"
         Set Cn = New ADODB.Connection
        Set oCat = New ADOX.Catalog
         Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
         Set oCat.ActiveConnection = Cn
         For Each Feuille In oCat.Tables
            Resultat = Resultat & Feuille.Name & vbCrLf
        Next
         MsgBox Resultat
         Set Feuille = Nothing
        Set oCat = Nothing
        Cn.Close
        Set Cn = Nothing
    End Sub
     --
    isabelle
     
     
    • Marqué comme réponse EhJoe lundi 24 octobre 2011 19:41
    dimanche 23 octobre 2011 21:23
  • Bonjour Isabelle V,

    Merci, mais je ne sais pas comment rajouter les références dont tu parles en vbNet, en plus il me semble que tu fais appel à une base de données (Jet) ? Or je ne comprends pas...

    Exemple fictif

    fichier (classeur) = "C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls"

    Onglets (feuilles) =

    un

    deux

    trois

    Sortie (en liste ou variable pour impression différée) =

    C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls_feuille=un

    C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls_feuille=deux

    C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls_feuille=trois

    Question (en lecture seulement) :

    La syntaxe d'un classeur est :

    "C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls"

    Quelle serait la syntaxe du même classeur avec sa feuille (onglet) nommé "deux"

    Serait le nom de la feuille, un index(1) si on part de 0

    ???

    Pour ensuite pouvoir dire :

    Imprime >> chemin_classeur + feuille x

    Imprime >> chemin_classeur + feuille y

    Ton code

    Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim Cn As ADODB.Connection
        Dim oCat As ADOX.Catalog
        Dim Fichier As String, Resultat As String
        Dim Feuille As ADOX.Table
        Fichier = "C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls"
        Cn = New ADODB.Connection
        oCat = New ADOX.Catalog
        Cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & ";Extended Properties=Excel 8.0;")
        oCat.ActiveConnection = Cn
        For Each Feuille In oCat.Tables
          Resultat = Resultat & Feuille.Name & vbCrLf
        Next
        MsgBox(Resultat)
        Feuille = Nothing
        oCat = Nothing
        Cn.Close()
        Cn = Nothing
      End Sub
    
    



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    lundi 24 octobre 2011 06:24
  • Bonjour à vous deux et à Joe plus particulièrement,

    La voie empruntée par Isabelle me semble en effet particulière, avec tout le respect pour ses compétences remarquables.
    Mais comme mon mini code, elle ne fait que lister les feuilles du classeur.

    Tout d’abord, j’utilise peu VB.NET parce qu’au boulot je dois me contenter de VBA depuis 2008.  Déjà qu’au début j’avais certains réflexes VB6 qui se révélaient une voie sans issue en VBA...  Comme j’ai peur de mélanger les pinceaux, je me contente du minimum en .NET
    Ensuite tu as posté dans un forum VBA et demandé du code VBA ! (je cite : « Je voudrais imprimer tout le classeur, toutes ses feuilles, alors j'aurais besoin de l'information qui suit en vbA afin de la mettre dans vbNet »)

    À ma connaissance, il faut ouvrir le classeur pour pouvoir imprimer les feuilles, sinon, c’est bien la dernière feuille active qui est imprimée.

    Mais il faut référencer Excel dans VB.NET pour pouvoir l’utiliser comme objet.  Après la déclaration de l’objet, c’est un peu comme si tu passais en VBA automation.

    Pour référencer, recherche dans l’Internet.  Pour les méthodes et propriétés des objets Excel, enregistre des macros et inspire-toi d’elles pour ton code en .NET.
    Attention, cela nécessite qu'Excel soit installé sur le PC d'exécution !


    Si tu le désires, je peux te montrer un code en VBA Automation (le temps de le fabriquer ;-)

    Cdt, Blaise


    • Modifié blaise032 lundi 24 octobre 2011 17:00 ajout citation
    • Marqué comme réponse EhJoe lundi 24 octobre 2011 19:41
    lundi 24 octobre 2011 16:57
  • Merci à vous deux :o)

    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire
    lundi 24 octobre 2011 19:41
  • bonjour à vous deux,
     
    je débute mon apprentissage à vbexpress, je ne sais pas si c'est la même chose que vb.net ??
    ps je trouve que cela ressemble à vba mais en beaucoup mieux,
    il y a plus de bibliothèques, plus de méthodes, et plus de propriétés
    pour l'ajout de référence c'est aussi simple que vba.
     
    --
    isabelle
     
    Le 2011-10-24 15:41, EhJoe a écrit :
    > Merci à vous deux :o)
    > --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    >
    > Joseph Attila PUSZTAY
    > --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    lundi 24 octobre 2011 23:40
  • Bonjour Isabelle

    Oui, j'aime bien aussi, même si c'est beaucoup plus verbeux.
    Vb Express est la version gratuite de VB.NET  Et il parait que c'est encore mieux dans la version payante
    Faut poser la question sur news:Msdn.fr-FR.netdevelopmentfr dans le communitybridge.codeplex.com

    Cdt,
    Blaise

    <isabelleV> a écrit dans le message de news: e2f119a6-3576-4188-8df5-c8e59f3a5f4f@communitybridge.codeplex.com...


    bonjour à vous deux,

    je débute mon apprentissage à vbexpress, je ne sais pas si c'est la même chose que vb.net ??
    ps je trouve que cela ressemble à vba mais en beaucoup mieux,
    il y a plus de bibliothèques, plus de méthodes, et plus de propriétés
    pour l'ajout de référence c'est aussi simple que vba.


    isabelle

    Le 2011-10-24 15:41, EhJoe a écrit :

    Merci à vous deux :o)
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Joseph Attila PUSZTAY
    EhJoe <http://irolog.free.fr/joe/index.htm> Logiciels <http://irolog.free.fr> Romans <http://irolog.free.fr/_gratuit/10romansGratuits/index.htm> Ecrire <mailto:montmartre75018@free.fr>
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    mardi 25 octobre 2011 15:48
  •  
    good! je ne savais pas qu'il y avait un forum net en francais
    un gros merci! Blaise,
     
    --
    isabelle
    ps/ pour Joseph, c'est là Msdn.fr-FR.netdevelopmentfr qu'il faut poser ta question.
    celui en anglais est ici: Msdn.en-US.isvvba
     
    Le 2011-10-25 11:48, blaise032 a écrit :
    > Bonjour Isabelle
    >
    > Oui, j'aime bien aussi, même si c'est beaucoup plus verbeux.
    > Vb Express est la version gratuite de VB.NET Et il parait que c'est encore mieux dans la version payante
    > Faut poser la question sur news:Msdn.fr-FR.netdevelopmentfr dans le communitybridge.codeplex.com
     
    mardi 25 octobre 2011 16:05