Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/09/2011, 15h18   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 10
Points : 10
Par défaut Extraction de donnée classeur fermé.

Bonjour à tous,

Je me suis renseigné sur comment faire un copier coller de données depuis un classeur fermé. Voici le code que j'ai trouvé :

Code :
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:\Documents and Settings\blanka\Bureau\Exo\Base.xls"
    'Nom de la feuille dans le classeur fermé
    NomFeuille = "conti"
 
    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 [" & conti & "$]"
 
    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
Alors le problème de mon code c'est qu'il m'affiche un messsage d'erreur.

"Le moteur de base de données Microsoft Jet n'a pas pu trouver l'objet "conti$"

Voila ca me bloque un peu :s

Merci à vous.
blanka347 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 15h26   #2
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Parce que 'conti' n'existe pas pour VBA. Il faut justement utiliser le nom de la variable qui contient la chaîne de caractères "conti". Soit dans ton code:

Code :
texte_SQL = "SELECT * FROM [" & nomFeuille & "$]"
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 15h33   #3
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 10
Points : 10
Oui pardon j'ai oublié de modifier le code avant de poster, dans mon code actuel j'ai bien :

Code :
texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"
Mais l'erreur reste.

Une solution ?

Merci
blanka347 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 15h53   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 10
Points : 10
Bon finalement j'ai trouvé à quoi c'est due... , en fait c'est un fichier ;xlsx et non .xls...

Mais bon la nouvelle erreure c'est : La table externe n'est pas dans le format attendu...
blanka347 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 16h16   #5
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 704
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

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

Informations forums :
Inscription : juin 2006
Messages : 1 704
Points : 3 625
Points : 3 625
Salut, voir http://silkyroad.developpez.com/VBA/...Fermes/#LIII-C
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 16h38   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 10
Points : 10
Oui je me suis un peu renseigné avant, le code vient de ce site
blanka347 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 23/09/2011, 16h45   #7
Membre actif
 
Inscription : novembre 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 188
Points : 194
Points : 194
Citation:
Envoyé par blanka347 Voir le message
Bon finalement j'ai trouvé à quoi c'est due... , en fait c'est un fichier ;xlsx et non .xls...

Mais bon la nouvelle erreure c'est : La table externe n'est pas dans le format attendu...
En effet le 'xlsx' n'existait pas du "temps" de Jet 4.0. Essaie:

Code :
.Provider = "Microsoft.ACE.OLEDB.14.0"
Et si ça ne marche pas tu peux essayer celui d'Excel 2007:

Code :
.Provider = "Microsoft.ACE.OLEDB.12.0"
Sclarckone est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/09/2011, 20h44   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2010
Messages : 33
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 33
Points : 10
Points : 10
Merci beaucoup, ça marche nickel ! En espérant une MAJ du tuto http://silkyroad.developpez.com/VBA/...Fermes/#LIII-C

Bonne soirée
blanka347 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h31.


 
 
 
 
Partenaires

Hébergement Web