Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 " 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:
G

Guest

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

Bonjour Capri_456,

L'idée d'ADO catalog n'est pas de moi mais de l'ami Bruno M45 (continue Bruno, je récolte)

En ce qui concerne ta question, sur +-200 fichiers, je ne sais pas du tout lequel sera le plus rapide, j'ai un penchant pour dire ADO. Faut voir.

Précise la question: Je cherche donc un fil qui traite de cela
ADO en général ou la méthode pour sommer des champs?

A+
 

CAPRI_456

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

Le Forum, HASCO, BRUNO M45, les autres,

BRUNO M45, sorry , autant pour moi....

Je continue à chercher et à tester la méthode la plus efficace,
disons que je sèche, mais c'est cela le Forum Excel Downloads

CAPRI_456
 

CAPRI_456

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

Bonne fin d'après midi le Forum,

Je cherche donc un fil qui traite de cela


Eh bien oui , tant que j'y suis, il va falloir prouver que mon choix est le bon et donc, tant qu'à faire, j'amerais bien pouvoir boucler sur un fichier fermé par la méthode ADO pour pouvoir y réaliser des totaux de valeurs (NOMBRE de données, SOMME,)



CAPRI_456
 
G

Guest

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

Bonjour,

Les termes employés sont très ambigüs.

1 - Boucler
Avec ADO tu n'as pas besoin de 'boucler' ce sont les requêtes qui s'en charge.

Exemple: "SELECT SUM(Champ1) FROM [Feuil1$] WHERE Champ2 = 3 AND Champ3 = 'machin bidule' GROUP BY Champ1, Champ2;"

Devrait (si j'ai pas fait d'erreur) Totaliser Champ1 si Champ2 = 3 et Champ3 = 'machin bidule'

SELECT COUNT(Champ1)...... te donneras le nombre.

2 - pour pouvoir y réaliser des totaux de valeurs (NOMBRE de données, SOMME,)

Faire des formules de total dans le classeur férmé n'est pas possible avec ADO. Il te faudrait faire comme pour le point 1 et renvoyé avec une requête UpDate le résultat dans le classeur et au bon endroit.

Dans ces conditions je doute que cela soit plus rapide

A+



A+
 

CAPRI_456

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

Bonjour, le Forum, HASCO,

Merci pour la piste destinée à réaliser des totaux par ADO
MAis bien avant cela j'ai un autre souci.... Hi hi


-- Je lis en effet dans un fichier fermé "AAAA.xls" d'un répSOURCE
-- les données d'une plage de la feuil1
-- je les copie sans problèmes dans un fichier modèle ouvert "BBBB.xls" (ici
pas par ADO
-- je renomme ce fichier modèle sous le nom AAAA.xls dans rép DESTIN

Parfait

-- ensuite, je voudrais supprimer le fichier AAAA.xls du répSOURCE : il ne sert plus à rien. Et Bien là surprise" je ne puis pas y accéder !!! :
VBA m'affiche "erreur exécution 1004 impossible d'acceder à AAAA.xls"

Pour vérifier :
durant la procédure vba j'ai tenté de l'ouvrir directement par l'explorateur de fichiers : j'obtiens le même message ( il reste ouvert je suppose, et donc n'est pas accessible ).

Pour vérifier :
dans ADO j'ai bien vérifié que :
'Aprés avoir utilisé une requete, il faut la fermer... :
Requete.Close
'Et de meme pour la connexion :
Source.Close
'Et pour plus de sécurité, c'est à dire pour être sur que la connexion est bien fermée:
Set Source = Nothing
Set Requete = Nothing


Comment puis je libérer entièrement ce classeur pour pouvoir y accéder, donc le "killer" ?

J'ai vu qu'il étaiT possible d'utiliser
'POUR LIBERER LE CLASSEUR
XlApp.RunAutoMacros xlAutoClose
XlApp.Close
XlApp.Quit
Set XlApp = Nothing

Qu'en pensez vous?
Comment Paramétre ce code ?

Merci pour votre avis éclairé
Je pense ici que YANN-56 doit sourrire

CAPRI_456
 
G

Guest

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

Re,

Il faudrait voir ta macro complète, il doit y avoir quelque chose qui empêche la fermeture de la connexion au classeur.

Vérifie dans le gestionnaire de tâche(CTLR-ALT-SUPPR) que ton classeur n'est pas ouvert dans une instance cachée d'excel.

Les lignes que tu proposent ne sont utilisablees que sur un classeur ouvert. et XLApp doit être une variable objet Application issue d'un module de classe.

A+
 

CAPRI_456

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

Bonjour le Forum, HASCO,

Voici le code


A. Quand je n'exécute pas l'instruction kill, tout fonctionne à merveille
Lors de l'exécution de Kill : VBA m'affiche
"Erreur d'exécution 70, permission refusée

B. Si je n'exécute pas Kill mais que je continue d'autres opérations, par exemple appeler à nouveau ce fichier AAAA.xls dans le rép source pour d'autres opérations ultérieures VBA m'affiche
"erreur exécution 1004 impossible d'acceder à AAAA.xls"


C'est donc bien la preuve que l'instance provoquée par ADO n'a pas libéré le fichier AAAA.XLS, je pense
Pour vérifier :
durant la procédure vba j'ai tenté de l'ouvrir directement par l'explorateur de fichiers : j'obtiens le même message ( ce fichier reste donc ouvert je suppose, et donc n'est pas accessible ).


Voilà,



Merci pour votre aide

CAPRI_456
 

Pierrot93

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

Bonjour Capri, Hasco

il semble que "XlConnect" et "XlCatalog" soient encore ouverts et utilisent le fichier... mais bon, comprends pas tout de ton code, avec 2 connections et des déclarations de variable un peu partout......

bonne journée
@+
 
G

Guest

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

Bonjour Capri,
Bonjour Pierrot

tout comme Pierrot plus la propriété de la connexion .CursorLocation = 3 (cela évite, sur du local, pas mal d'erreur potentielle)
Une connexion pour le catalogue et pour les requêtes suffit.
Ouvre ta connexion
Ouvre ton catalogue sur la même connexion
Set XlCatalog.ActiveConnection = Source (ou XlConnect)
Interroge tes tables
Ferme le recordset Explicitement: Requete.close
Détruit le Set Requete = nothing
Ferme la connection Source.Close
Détruit là Set Source = Nothing

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

CAPRI_456

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

Le Forum, HASCO, Pierrot93,


Great ! génial !

En effet, mon XlCOnnect n'a pas été fermé , ni détruit,
C'était là le Bug

Merci Pierrot93

J'ai donc adapté mon Code comme proposé par HASCO, et donc ainsi je n'ouvre plus qu'une seule fois ma connexion.


Merci HASCO, le Forum

Bon appétit à tous

CAPRI_456
 

CAPRI_456

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

Bonsoir le Forum, Pierrtot93, Hasco,

Suis prudent, j'en met au début , à la fin,
Pas de soucis, d'habitude je dis merci à tous, sauf erreur,
hi hi

Vais continuer maintenant sur les totaux dans mes nombreux fichiers avec ADO.....

Bon week end

CAPRI_456
 

alaaepes

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

Bonjour le Forum, j'ai un petot soucis aussi concernant la boucle sur les feuilles d'un fichier fermé. Je voudrais savoir s'il n y a vait pas de moyen de le faire sans ADO.. surtout que mon traitement qui suit s'appuie sur la macro "Macro4excel".

Un autre soucis: en testant avac ADO, le nom de feuille qui n'existe pas me resorte :s du type "xlnx....". De plus la méthode range(cellule).copyfromRecordset " ne me donne aucun résultat!!

Merci d'avance pour votre aide!
 

Discussions similaires

Réponses
2
Affichages
236
Réponses
2
Affichages
117
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…