Macro qui plante... pour extraire des données d'un classeur fermé...

Christian0258

XLDnaute Accro
Bonsoir à tout le forum,

J'ai trouvé sur ce forum une macro (de michel_m).
Pourriez-vous me dire ce qu'il faut modifier sur son code, pour que ça fonctionne (ça plante sous Set Source).

Sub extraire() ' de michel_M
Dim Source As Object, Requete As Object
Dim Onglet As String, Plage As String, fichier As String
Dim Texte_SQL As String

'détermination de la plage à extraire
fichier = "C:\Users\christian\Desktop\Plannings 2016\tablserv1+.xlsm"
Onglet = "Janv"
Plage = "I97:AN111"

'connexion ADO
Set Source = CreateObject("ADODB.Connection")
Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"data source=" & fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"

'exerce la requete ADO sur les donnée à recopier
Texte_SQL = "SELECT * FROM [" & Onglet & "$" & Plage & "]"
Set Requete = CreateObject("ADODB.Recordset")
Set Requete = Source.Execute(Texte_SQL)

'restitue sur ton classeur
Range("I11").CopyFromRecordset Requete

'libère les pointeurs
Set Requete = Nothing
Set Source = Nothing

End Sub

Je précise que je travaille sous Excel 2007.

Merci pour votre aide si précieuse.
Bien amicalement.
Christian
 

Roland_M

XLDnaute Barbatruc
Re : Macro qui plante... pour extraire des données d'un classeur fermé...

re

j'ai déjà détecté un problème !
mais là j'ai plus trop le temps !
si possible j'y regarde cet après midi !
même si j'ai pas le temps de suite je suis ... à bientôt
 

Roland_M

XLDnaute Barbatruc
Re : Macro qui plante... pour extraire des données d'un classeur fermé...

re

@Christian,
voir ce classeur avec une macro différente qui utilise ExecuteExcel4Macro
un peu plus long mais tu ne tires pas non plus beaucoup de données et puis vu tes problèmes de compatibilité ...
"faute de grive on se contente de merle"
et le principal pour l'instant c'est que ça fonctionne pour toi !

en tous les cas à essayer en attendant de solutionner autre chose
j'avais réussi mais problème entre numérique et alphanumérique, et là je commence à fatiguer ...
 

Pièces jointes

  • _plannings 2016_Rol_Excel4Macro.xlsm
    29.1 KB · Affichages: 24
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Macro qui plante... pour extraire des données d'un classeur fermé...

re

merci à toi Tatiak pour tes conseils, je suis toujours preneur car c'est le seul moyen d'évoluer !

tu as tout à fait raison et je pense pareil, mais comme tu dis c'est le moins pire
et malheureusement ici je m'en étais rendu compte on n'a pas les alphanumériques, comme tu l'expliques !

alors il devra se contenter de la procédure avec Excel4...

ce qui est le plus incompréhensible c'est qu'avec (feuille)
TextSQL$ = "SELECT * FROM [" & FeuilSource & RangDeSource & "];"
j'ai num et alphanum mais une extraction décalée impossible à corriger

et qu'avec TextSQL$ = "SELECT * FROM [" & RangSource & "];"
j'ai plus de décalage mais plus l'alphanum non plus !


EDIT: je dois rectifier mon message ci-dessus suite à une découverte qui explique l'erreur d'avec ou sans feuille !

regardez bien la ligne ci-dessus TextSQL$ = "SELECT * FROM [" & FeuilSource & RangDeSource & "];"
ce n'est pas> RangDeSource < cette variable n'existe pas c'était> RangSource <
de ce fait il n'y avait pas de range et ça chargé toutes les données de la feuille !
par-contre cette erreur permet de voir que l'on peut charger une feuille complète de données
et cette fois numérique et alphanumérique !

à ce sujet explications ici: Lire et écrire dans les classeurs Excel fermés
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Macro qui plante... pour extraire des données d'un classeur fermé...

re bonjour à tous,

@Tatiak, j'avais oublié cette propriété pour coller les données d'un bloc avec .CopyFromRecordset Rst
ce qui raccourci le code et qui est très rapide ! mais comme dis plus haut, toujours num ou alphanum mais pas les deux !?

Code:
Sub TestTatiak2()
Dim Cnx As Object, Rst As Object, Ndf As String
    
Ndf = ThisWorkbook.Path & "\ADODB(RolEssai)SourceDonneesPourEssai.xlsm"
    
    Set Cnx = CreateObject("ADODB.Connection")
    Cnx.Provider = "MSDASQL"
    Cnx.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" & _
             "DBQ=" & Ndf & "; ReadOnly=true; "
    
    Set Rst = CreateObject("ADODB.Recordset")
    Rst.Open "SELECT * FROM [Janv$I96:AN111]", Cnx, 3
    
    If Not Rst.RecordCount = 0 Then Sheets(1).Range("I11").CopyFromRecordset Rst
    
    Cnx.Close
    Set Rst = Nothing: Set Cnx = Nothing
End Sub

en même temps voir mon EDIT au post#40 ici:
https://www.excel-downloads.com/thr...aire-des-donnees-dun-classeur-ferme.20006771/


j'ai vu ton explication concernant num et alphanum ici:
Lire et écrire dans les classeurs Excel fermés
 
Dernière édition:

Christian0258

XLDnaute Accro
Re : Macro qui plante... pour extraire des données d'un classeur fermé...

Boujour à tout le forum, Roland, Tatiak,

Je reviens vers vous pour ce fil, j'ai en effet réussi avec ce code, grâce au gros boulot de Roland et à des recherches, à récupérer toutes les valeurs (alpha et numér)...

Je joins le fichier avec la macro pour les personnes intéressées.

J'ai juste une question ; je n'arrive pas à intégrer (, Password:="toto") dans le cas d'un fichier protégé, au bout de cette ligne de code ;

Fichier = "C:\Users\christian\Desktop\Plannings 2016\tablserv1+.xlsm"

Merci pour votre aide.
Bien amicalement,
Christian
 

Pièces jointes

  • Plannings classeur fermé.xlsm
    27 KB · Affichages: 23

Roland_M

XLDnaute Barbatruc
Re : Macro qui plante... pour extraire des données d'un classeur fermé...

bonsoir,

je crois fort qu'il n'est pas possible de travailler de cette manière sur un classeur protégé !
toutefois, attendons que qq ne vienne nous prouver le contraire en nous apportant la solution !?
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 078
Membres
103 455
dernier inscrit
saramachado