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épérer une colonne dans un classeur fermé


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 73
    Points
    73
    Par défaut Répérer une colonne dans un classeur fermé
    Bonjour
    j'ai un classeur fermé dans lequel j'aimerai extraire des données contenues dans une colonne dont je ne connais pas l'adresse. j'aimerai donc pouvoir localiser cette colonne à partir de son entête et extraire donc les données. voici le code que j'ai écris

    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
    ' Je me connecte au classeur 
    Dim oCon As ADODB.Connection, oRst As ADODB.Recordset, oCmd As ADODB.Command, oCat As ADOX.Catalog, i As Integer
     
    Dim Feuille As ADOX.Table
     
        Set oCon = New ADODB.Connection
        With oCon
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0 ;Data Source=" & ChClasseur & _
                 ";Extended Properties=""Excel 12.0;HDR=YES;"""
            .Open
        End With
        Set oCat = New ADOX.Catalog
        Set oCat.ActiveConnection = oCon
     
    'J'essaie de déterminer de trouver la feuille dans laquelle se trouve mes données 
         For Each Feuille In oCat.Tables
            If Left(Feuille.Name, 6) = "hisinv" Then
                 Set oRst = New ADODB.Recordset
                 Set oRst = oCon.Execute("SELECT * FROM [" & Feuille.Name & "]")
     
    'j'essaie ensuite de repérer la colonne des données à partir de l'entête
        For i = 0 To oRst.Fields.Count - 1
            If Rst.Fields(i).Name = "MONTANT3" Then 
     
                 '#########C'est donc à ce niveau que je suis bloqué parce que je ne sais pas comment récupérer la colonne entière 
                 ' A little help will be great!!!
        Next i
    Merci d'avance

  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

  3. #3
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Essaie de mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = oCon.Execute("SELECT MONTANT FROM [" & Feuille.Name & "]")

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 73
    Points
    73
    Par défaut
    Bonjour #Daniel.C
    quand j'écris le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oRst = oCon.Execute("SELECT MONTANT3 FROM [" & Feuille.Name & "]")
    j'obtient ce message d'erreur

    Nom : Erreur 21.png
Affichages : 190
Taille : 27,4 Ko

    j'ai l'impression que le code SQL ne considère pas MONTANT3 comme une colonne de la table "hisinv"

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Je suis arrivé à la limite de mes connaissances. J'ai fait un test et je récupère bien le champ recherché...

    PS. J'utilise ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Fichier = "C:\Users\Daniel\Documents\Donnees\Daniel\Excel\ADO\Volume.xlsx"
    With Cnn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
                & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        .Open
    End With
    NomFeuille = "Volume"
    texte_SQL = "SELECT Nombres FROM [" & NomFeuille & "$]"
    rst.Open texte_SQL, Cnn, adOpenStatic

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Essaye avec un "$" après le nom de la feuille.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Points : 73
    Points
    73
    Par défaut
    En fait quand j'exécute mon code pas à pas, je constate que le nom de la feuille contient déjà le "$".
    y'en aura deux si je le rajoute

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Effectivement, feuille.Name contient bien le $.
    Donc, ton problème ne vient pas de là.

    Mais, à la lecture de ton message, je ne comprends pas bien où il se situe.

    As-tu compris que le RecordSet te renvoie le premier record trouvé?

    Pour les parcourir tous, il faudra faire une boucle While jusqu'à oRst.EOF et, à la fin du traitement de chaque record , un oRst.MoveNext.

  9. #9
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Points : 10 167
    Points
    10 167
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Personnellement, je me questionne sur ces deux lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
            .Provider = "Microsoft.Jet.OLEDB.4.0"
            .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0 ;Data Source=" & ChClasseur & _
                 ";Extended Properties=""Excel 12.0;HDR=YES;"""
    Tu ne peux pas utiliser en même temps le moteur Jet et le moteur ACE. Tu dois donc prendre l'un ou l'autre.

    Le moteur Jet est incompatible avec tout classeur Excel des versions Office 2007 et suivantes. Cela inclut également les fichiers Access.

    Le moteur ACE a été conçu pour Office 2007 et suivants.

    D'après ce que je sais, le moteur ACE est compatible avec les versions précédant 2007.

Discussions similaires

  1. Ajouter une feuille dans un classeur fermé
    Par SilkyRoad dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2011, 15h38
  2. Insérer une formule dans des classeurs fermés
    Par texas2607 dans le forum Excel
    Réponses: 8
    Dernier message: 19/01/2011, 16h55
  3. Copier une ligne dans un classeur fermé et enregistrer sous
    Par PPN83 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 18/11/2010, 00h54
  4. Réponses: 4
    Dernier message: 02/10/2007, 11h30
  5. [VBA] Transférer une feuille dans un classeur fermé
    Par Dephi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/07/2007, 12h11

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