ADO - problème accès "Feuil1" sur fichier fermé

CAPRI_456

XLDnaute Occasionnel
Bonjour le Forum,

Dans une procédure ADO qui exécute la récupération de données sur une feuille ("Feuil1") d'un classeur fermé, j'ai un souci.

Mes feuilles identiques des classeurs fermés ne se nomment pas "Feuil1" mais ont le nom de fichier par exemple "10-LG1830"

Lorsque j'utilise la procédure ci dessous avec le véritable nom de la feuille , soit "10-LG1830" tout se déroule à merveille.
Mais comme les noms de fichiers peuvent changer et par conséquent le nom de la feuille1 , cette procédure par l'appel de "Feuil1" ne fonctionne pas.

Comment trouver solution à ce problème :

Dim CheminXLS As String
Dim NomFichierDepart As String
'A1.------ Adresse du fichier à lire (ici un listview)
CheminXLS = .ListItems(.SelectedItem.Index).ListSubItems(6)
NomFichierDepart = UserForm1.ListView1.SelectedItem.Text

'A2.------Adresse de la feuille 'n'oubliez pas d'ajouter $ au nom de la feuille.
Feuille = "10-LG1830" = parfait :) (nB j(insère le $ plus bas dans le code)
Feuille = "Feuil1" = pas d'accès possible :rolleyes:" Moteur jet ne peut accéder à feuille
'A3.------Adresse de la plage contenant la donnée à récupérer
Plage = ("A2:AV100")
'A3 ----- 'prépare les commandes ADO
'++ OUVRE UNE CONNECTION ADO VERS le CLASSEUR excel FERME
Set Source = New ADODB.Connection
Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & CheminXLS & "\" & NomFichierDepart & _
";Extended Properties=""Excel 8.0;HDR=No;"";"


'++++++++++ exerce la requete ADO sur la donnée à recopier
texte_SQL = "SELECT * FROM " & " [" & Feuille & Plage & "$]"
Set Requete = CreateObject("ADODB.Recordset")

Requete.Open texte_SQL, Source, adOpenStatic



Application.DisplayAlerts = False
Workbooks(NomFichierDepart).Close SaveChanges:=False


'***********************'OUVERTUE DU FICHIER "MODELE" *******************************************************

Dim Workbook
Dim CheminModèle As String
CheminModèle = "D:\Serveur\modèle-lecture-22-11.xls"
'=répertoire destination
Workbooks.Open CheminModèle
'puis nettoyage du contenu en partant de la dernière ligne complétée
Sheets("Feuil1").Range(Cells(2, 2), Cells(Cells(65536, 2).End(xlUp)(2).Row, 48)).ClearContents

Range("B2").CopyFromRecordset Requete

Requete.Close
Source.Close
Set Source = Nothing
Set Requete = Nothing
Set Cd = Nothing

' End With

Application.CutCopyMode = True 'Vide le presse papier


Merci pour votre aide

CAPRI_456
 
Dernière modification par un modérateur:
D

Denis

Guest
Re : ADO - problème accès "Feuil1" sur fichier fermé

Bonjour CAPRI_456 et le Forum
une feuille ne s'apelle pas par Feuil1 si elle a un nom, essais avec 1 seulement ou (1)
Désolé, je ne peux pas faire d'essai.
>Bon courage et à +
Denis
 

mécano41

XLDnaute Accro
Re : ADO - problème accès "Feuil1" sur fichier fermé

Bonjour,

En VBA, si tu veux que cela continue à fonctionner même si n'importe qui change le nom de feuille, tu peux aussi utiliser le codename de la feuille ; c'est le nom qui est indiqué dans la fenêtre PROJETS (dans l'environnement VBE), avant le nom de feuille qui, lui, est entre parenthèses. Par défaut, ce nom reste feuil1, feuil2 même si tu as modifié le nom dans l'onglet... tu peux modifier, si tu le souhaites en cliquant sur l'icône Propriétés puis en changeant le nom à ta guise, par ex. : CapriCalculs, CapriBaseDonnées1...

Ensuite, pour désigner la feuille, il faut utiliser non pas le nom de l'onglet, mais le codename en faisant : Worksheets(CapriCalculs.name)

Cordialement
 
C

Compte Supprimé 979

Guest
Re : ADO - problème accès "Feuil1" sur fichier fermé

Salut CAPRI 456,

Une idée, tu peux utiliser la connexion ADOX pour connaitre le nom des feuilles dans un classeur
Code:
Set Cat = CreateObject("ADOX.Catalog")
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & CheminXLS & "\" & NomFichierDepart & _
          ";Extended Properties=""Excel 8.0;HDR=No;"";"
  ' Ouvrir le catalog d'objets
  Set Cat.ActiveConnection = Cn
  For Each Sht In Cat.tables
    ' Récupère le nom des feuilles du classeur
    Feuille = Sht.Name
    msgbox Feuille
  Next Sht
Gros problème, les feuilles sont triées dans l'ordre alphabétique et non dans l'ordre de présentation dans le classeur

A+
 

ChTi160

XLDnaute Barbatruc
Re : ADO - problème accès "Feuil1" sur fichier fermé

Salut CAPRI_456
Bonjour le Fil
Bonjour le Forum

peut être en mettant ceux ci
[" & Feuille & "$" & Plage & "]" plutôt que [" & Feuille & Plage & "$]"

Ou "SELECT * from `" & Feuille & "$" & Plage & "`"
non testé car pas de fichier
*en bleu apostrophe
Bonne fin de journée
 
Dernière édition:

skoobi

XLDnaute Barbatruc
Re : ADO - problème accès "Feuil1" sur fichier fermé

Bonjour Capri456, le fil,

si les solutions proposées ne marche pas et que tu ne fais que lire (récupérer des données dans ce fichier, je peux te proposer d'utiliser "GetObject", plus simple que la méthode ADO.

Bon week-end à tous :)
 

YANN-56

XLDnaute Barbatruc
Re : ADO - problème accès "Feuil1" sur fichier fermé

Bonsoir à tous,

Pour avoir navigué et ramé avec "ADO" trop longtemps: :(

Je me suis rendu compte qu'il était bien plus simple d'ouvrir,
pomper, et fermer le Classeur Source. :)

A moins d'avoir une bécane des années Wind 95,
au rafraichissement douteux.

(J'ai viré cette méthode depuis longtemps!)

Amicalement, et si quelqu'un pense autrement; je suis à nouveau preneur.

Yann
 

ChTi160

XLDnaute Barbatruc
Re : ADO - problème accès "Feuil1" sur fichier fermé

Salut CAPRI_456
Bonsoir le fil
Bonsoir Le Forum

Bon moi , je n'ai jamais utilisé l'une des différentes méthodes qui existent pour récupérer une ou des données d'un Classeur Fermé lol

mais j'ai souvent proposé des façons comme
Code:
Sub test()
GetValuesFromAClosedWorkbook "D:", "TestADO.xls", "Feuil1", "A1:H25"
End Sub

Sub GetValuesFromAClosedWorkbook(fPath As String, _
fName As String, sName, cellRange As String)
'Ron De Bruin, mpep
'le paramètre 'cellRange' doit désigner
'*une* plage de cellules *contigües*
With ActiveSheet.Range(cellRange)
       .Formula = "='" & fPath & "\[" & fName & "]" _
           & sName & "'!" & cellRange
                    .Value = .Value
End With
End Sub
Ou

Code:
MsgBox ExecuteExcel4Macro("'C:\Documents and Settings\mimi\dossier\excel\[ClasseurBase.xls]Feuil1'!R1C1")

Etc ,Etc .......

Bonne fin de Soirée
 

YANN-56

XLDnaute Barbatruc
Re : ADO - problème accès "Feuil1" sur fichier fermé

Re skoobi, et à tous,

Je vois que nous avons la même optique.

J'ai un peu provoqué pour voir si l'on pouvait me prouver le contraire...
Usine à gaz contre six à sept lignes. Bon! Peut-être quelques unes de plus, mais pas trop. :)

Qui sait?

Amicalement.

Yann
 

kiki29

XLDnaute Barbatruc
Re : ADO - problème accès "Feuil1" sur fichier fermé

Salut,dans le cas de qqs fichiers le gain de temps avec ADO reste minime
par contre si l'on a un plugin anti virus style Norton,AVG ce dernier s'activera à
chaque ouverture de fichier, à part çà ...
 
Dernière édition:
G

Guest

Guest
Re : ADO - problème accès "Feuil1" sur fichier fermé

Bonjour,

Capri, si j'ai bien compris le nom de la feuille source des données est le même que le nom du fichier sans ".xls"

Alors peut-être cela te sera utile:

Code:
[COLOR=blue]Function[/COLOR] Nomfichier(Chemin [COLOR=blue]As[/COLOR] [COLOR=blue]String[/COLOR]) [COLOR=blue]As[/COLOR] [COLOR=blue]String[/COLOR]
    [COLOR=blue]Dim[/COLOR] t: t = Split(Chemin, Application.PathSeparator)
    Nomfichier = Split(t([COLOR=blue]UBound[/COLOR](t)), [I]"."[/I])(0)
[COLOR=blue]End[/COLOR] [COLOR=blue]Function[/COLOR]

Utilisation:
Code:
Feuille=Nomfichier(CheminXLS)


Opération de sauvetage ADO:

ADO est souvent très utile pour dans de nombreux cas de requêtes plus ou moins complexes, pour Filtre, Trier, Grouper, Retourner des valeurs uniques, etc.

Mais bien sûr il ne faut pas s'attendre à ce qu'il transforme Excel en système de gestion de base de données.

Sa mauvaise utilisation n'enlève rien à ses qualités.

A+
 
Dernière modification par un modérateur:

CAPRI_456

XLDnaute Occasionnel
Re : ADO - problème accès "Feuil1" sur fichier fermé

Bonjour le Forum, skoobi, yann-56-CHti160,Hasco,kiki29,BrunoM45,

Je fais un petit saut sur le Fil, il fait si beau dehors, et je constate de multiples réponses....
Je vais tester vos propostions et reviens à vous pour vous dire quoi.

Il est vrai que avant j'ouvrais le classeur source, copier, fermer le classeur source, ouvrir le classeur destination , copier dans celui ci , le fermer.
Soit six opérations.

Je me suis dit que supprimer tout cela en utilisant ADO, serait plus aisé,
car je copie dans un fermé pour coller dans un fermé.
J'ai constaté que le procédure était plus rapide sachant, (et là je ne vous l'avait pas dit) :
que ces opérations se font lors du passage du fichier d'un listview1 vers un autre listview2 (représentant chacun un répertoire différent.

J'examine et reviens à vous

CAPRI_456
 

CAPRI_456

XLDnaute Occasionnel
Re : ADO - problème accès "Feuil1" sur fichier fermé

Bonjour le Forum, skoobi, yann-56-CHti160,Hasco,kiki29,BrunoM45,DENIS

Voici , pour l'heure j'ai testé la proposition de HASCO en insérant le code "ADOX.Catalog" juste avant "ADO" qui permet d'identifier sans problème le nom de la feuil1 du fichier fermé :

C'est parfait :)

'A2.------Adresse de la feuille 'n'oubliez pas d'ajouter $ au nom de la feuille.
Dim XlConnect As Object, XlCatalog As Object
Dim Sht
Dim Sheet

Set XlConnect = CreateObject("ADODB.Connection")
Set XlCatalog = CreateObject("ADOX.Catalog")


XlConnect.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & CheminXLS & "\" & NomFichierDepart & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
' Ouvrir le catalog d'objets
Set XlCatalog.ActiveConnection = XlConnect
For Each Sht In XlCatalog.Tables

' Récupère le nom des feuilles du classeur
Sheet = Sht.Name
MsgBox Sheet
Next Sht



Beaucoup d'entre vous rejettent l'idée de ADO, mais je dois aussi vous dire que je voudrais faire réaliser par ADO des totaux sur le contenu de mes fichiers (+-200) et là cela serait normalement plus rapide qu'une boucle classique qui ouvre et ferme à chaque fois le fichier ! ou pas.

Je cherche donc un fil qui traite de cela


Je garde les autres propositions en mémoire car si ADO me cause tant de soucis , alors je les utiliserai..

Un grand merci pour la rapidité et le nombre de soutien sur ce Forum.

CAPRI_456
 

Discussions similaires

Réponses
2
Affichages
110
Réponses
2
Affichages
140

Statistiques des forums

Discussions
312 081
Messages
2 085 157
Membres
102 798
dernier inscrit
Choky13