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