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

Macros et VBA Excel Discussion :

récupérer le nom d'une feuille d'un classeur excel fermé


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2011
    Messages : 31
    Points : 4
    Points
    4
    Par défaut récupérer le nom d'une feuille d'un classeur excel fermé
    Bonjour,
    J'utilise une connexion ADODB pour récupérer, depuis un fichier excel le contenu de la première feuille d'un classeur Excel.



    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
    Sub RequeteClasseurFerme()
        Dim Cn As ADODB.Connection
        Dim Fichier As String
        Dim NomFeuille As String, texte_SQL As String
        Dim Rst As ADODB.Recordset
     
        'Définit le classeur fermé servant de base de données
        Fichier = "C:\monClasseurBase.xls"
        'Nom de la feuille dans le classeur fermé
        NomFeuille = "Feuil1"
     
        Set Cn = New ADODB.Connection
     
        '--- Connection ---
        With Cn
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Data Source=" & Fichier & _
                ";Extended Properties=Excel 8.0;"
            .Open
        End With
        '-----------------
     
        'Définit la requête.
        '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
        texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
        'Ecrit le résultat de la requête dans la cellule A2
        Range("A2").CopyFromRecordset Rst
     
        '--- Fermeture connexion ---
        Cn.Close
        Set Cn = Nothing
     
    End Sub
    Jusque là tout va bien et tout fonctionne correctement.
    Mon problème vient de la variable NomFeuille, qui pour l'instant est définie en dur dans le code. Mon programme importe des donnée pour différents fichier et à chaque fois il va y avoir un nom différent de la feuil

    D'où ma question : Comment récupérer le nom de la première feuille d'un classeur excel fermé ?

    Merci d'avance pour vos réponses

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, à lire http://silkyroad.developpez.com/VBA/ClasseursFermes/
    On récupére le nom des feuilles mais dans l'ordre alphabétique

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2011
    Messages : 31
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    j'ai déjà vu ce document, et je n'ai pas trouvé comment trouver le nom des feuilles d'un classeur fermé

    cordialement

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Re, dans ce cas c'est vraiment grave, relis ceci http://silkyroad.developpez.com/VBA/ClasseursFermes/#LV
    Extrait
    Si vous travaillez sur des fichiers Excel fermés, vous aurez peut être besoin de récupérer des informations sur leur structure: Lister le nom des feuilles, vérifier si une feuille spécifique existe, contrôler le format d'un champ...etc...Les modèles ADO et ADOX permettent d'obtenir ces données.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2011
    Messages : 31
    Points : 4
    Points
    4
    Par défaut
    Bonjour kiki,

    j'ai modifie le code, par contre j'ai une erreur : '' erreur d’automatisation "

    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
    44
    45
    46
    47
     Sub CommandButton1_Click()
     
     
      Dim Cn As ADODB.Connection
        Dim oCat As ADOX.Catalog
        Dim Fichier As String, Resultat As String
        Dim Feuille As ADOX.Table
        Dim Rst As ADODB.Recordset
     
        Dim texte_SQL As String
     
     
       Fichier = Application.GetOpenFilename("Fichier Excel, *.csv; *.xlsm;*.xls;*.xla")
     
        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
     
     
        texte_SQL = "SELECT * FROM [" & Resultat & "$]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
        'Ecrit le résultat de la requête dans la cellule A2
        Range("A2").CopyFromRecordset Rst
     
        '--- Fermeture connexion ---
     
        Set Feuille = Nothing
        Set oCat = Nothing
        Cn.Close
        Set Cn = Nothing
     
     
    End Sub

    Je voulais savoir, est ce que c juste la ligne : texte_SQL = "SELECT * FROM [" & Resultat & "$]"

    Merci d'avance
    cdt

  6. #6
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, encore un drame du copier/coller ....
    Ne conserve qu'un nom de feuille dans Resultat
    Dans texte_SQL enleve le $ en fin de chaine

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2011
    Messages : 31
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    je suis toujours bloqué sur la récupération du nom de la feuille du mon classeur.
    Merci pour vos aides


    cdt,

  8. #8
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut,
    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
    Option Explicit
     
    Sub Tst()
    Dim Cn As ADODB.Connection
    Dim oCat As ADOX.Catalog
    Dim Fichier As Variant
    Dim Feuille As ADOX.Table
    Dim Rst As ADODB.Recordset
    Dim texte_SQL As String
    Dim Ar() As String, i As Long
     
        Fichier = Application.GetOpenFilename("Fichier Excel, *.csv;*.xls")
        If Fichier = False Then Exit Sub
     
        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
            i = i + 1
            ReDim Preserve Ar(i)
            Ar(i) = Feuille.Name
        Next Feuille
     
        texte_SQL = "SELECT * FROM [" & Ar(1) & "]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
        Range("A2").CopyFromRecordset Rst
     
        Set Feuille = Nothing
        Set oCat = Nothing
        Cn.Close
        Set Cn = Nothing
     
    End Sub

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2011
    Messages : 31
    Points : 4
    Points
    4
    Par défaut
    Bonjour KiKi,

    Merci bcp pour ton aide le code marche très bien, j'ai encore un problème avec l'importation des données. cette fois j'ai un fichier csv, j'ai modifié le code mais ça marche pas (erreur sur la ligne
    << Cn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
    "Dbq=" & Fichier & ";Extensions=asc,csv,tab,txt" >> )



    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Sub Bouton45_Clic()
     
    Feuil3.Range("AN4:AQ15000").ClearContents
     
    'Option Explicit
     
    Dim Cn As ADODB.Connection
    Dim oCat As ADOX.Catalog
    Dim Fichier As Variant
    Dim Feuille As ADOX.Table
    Dim Rst As ADODB.Recordset
    Dim texte_SQL As String
    Dim Ar() As String, i As Long
     
     
     
        Fichier = Application.GetOpenFilename("Fichier Excel, *.csv;*.xls")
        If Fichier = False Then Exit Sub
     
        Set Cn = New ADODB.Connection
        Set oCat = New ADOX.Catalog
     
     
     
    Cn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
            "Dbq=" & Fichier & ";Extensions=asc,csv,tab,txt"
     
     
     
     
    Cn.Open
     
        Set oCat.ActiveConnection = Cn
        For Each Feuille In oCat.Tables
            i = i + 1
            ReDim Preserve Ar(i)
            Ar(i) = Feuille.Name
        Next Feuille
     
     
     
     texte_SQL = "SELECT * FROM [" & Ar(1) & "]"
     
        Set Rst = New ADODB.Recordset
        Set Rst = Cn.Execute(texte_SQL)
     
       Feuil3.Range("AN4").CopyFromRecordset Rst
     
        Set Feuille = Nothing
        Set oCat = Nothing
        Cn.Close
        Set Cn = Nothing
     
     
    End Sub
    Merci d'avance

Discussions similaires

  1. [XL-2010] Récupérer le nom d'une feuille dans une cellule
    Par cag's dans le forum Excel
    Réponses: 1
    Dernier message: 19/06/2015, 13h35
  2. [XL-2007] Récupérer le nom dans une liste d'un classeur Excel
    Par lbroc84 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/12/2011, 11h51
  3. [WD-2007] récupérer le nom d'une feuille d'un classeur excel fermé, depuis word
    Par markelov dans le forum VBA Word
    Réponses: 0
    Dernier message: 24/02/2010, 11h33
  4. Obtenir le nom d'une feuille d'un classeur fermé
    Par maurice_rismo dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 19/08/2009, 15h51
  5. Récupérer le nom d'une feuille excel avec ADO
    Par Kephuro dans le forum Bases de données
    Réponses: 1
    Dernier message: 25/01/2008, 21h11

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