Import d'un fichier

steph71

XLDnaute Occasionnel
Bonjour

j'ai mis en place une macro dans un classeur me permettant d'importer le contenu d'une feuille de calcul d'un classeur fermé
(seules les données sont importées, pas les mises en forme)

Mon pb est le suivant : l'import se passe correctement sauf qu'il ne m'importe pas les entêtes de colonnes contenant des données numériques.

Pourquoi ? Quelqu'un a t'il une idée ?
Voici le code place sur lévénement clic d'un bouton

Sub TestQuery()
fich$ = 'C:\\Masque_AG.xls' nom du fichier fermé
Feuille$ = 'BASE' feuille à importer
QueryWorksheet fich, Feuille
End Sub

Public Sub QueryWorksheet(NomFichier$, Feuille$)
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = 'Provider=Microsoft.Jet.OLEDB.4.0;' & _
'Data Source=' & NomFichier & ';' & _
'Extended Properties=Excel 8.0;'

szSQL = 'SELECT * FROM [' & Feuille & '$];'

Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText

If Not rsData.EOF Then
Sheets('BASE').Range('A1').CopyFromRecordset rsData
Else
MsgBox 'Aucun enregistrement renvoyé.', vbCritical
End If

rsData.Close
Set rsData = Nothing

End Sub
 
B

bebere

Guest
bonjour Steph

'une1ère méthode,d'abord les entêtes,puis les données

' You can 't get headers using the CopyFromRecordset method. The only way
'to get them is to loop the Fields collection and place the headers on the
'worksheet prior to calling CopyFromRecordset, e.g.

Sub AddHeaders()
'--
'Rob Bovey, MCSE, MCSD, Excel MVP
Dim rsData As ADODB.Recordset
Dim lCount As Long

Set rsData = New ADODB.Recordset
rsData.Open 'SQL String', 'Connection String', _
adOpenForwardOnly, adLockReadOnly, adCmdText

If Not rsData.EOF Then
''' Add the Recordset headers.
For lCount = 1 To rsData.Fields.Count
With Sheet1.Range('A1').Offset(0, lCount - 1)
.Value = rsData.Fields(lCount).Name
End With
''' Dump the recordset
Sheet1.Range('A2').CopyFromRecordset rsData
End If

rsData.Close
Set rsData = Nothing

End Sub


'une2ème méthode
'obtenir des données d'un classeur fermé

'Héctor Miguel, mpep
'Sub Get_Test()
' HowTo = MsgBox('Select a way to get data from...' & vbCr & _
' 'Yes = Form 1.- Use Sheet & Cell range' & vbCr & _
' ' No = Form 2.- Use Named ranges', _
' vbYesNo + vbQuestion, 'Query form')
' If HowTo = vbYes _
' Then GetExternalData 'D:\\OLE_Test.xls', 'Feuil1', 'a1:a5', False _
' Else GetExternalData 'D:\\OLE_Test.xls', '', 'Values', False
'End Sub

Sub LitDatas()
Dim Fich$, Arr

Fich = 'd:\\TestDataToRead.xls''à adapter
'récup des données à partir de l'adresse d'une plage de cellules
GetExternalData Fich, 'Feuil1', 'A1:G20', False, Arr
'si tu employes,plage nommée,la ligne çi-dessus en commentaires,enlever ' à getexternaldata plus bas
'récup des données à partir du nom d'une plage de cellules nommée,false sans entêtes,true avec entêtes
' GetExternalData Fich, '', 'plagenommée', False, Arr
With ThisWorkbook.Sheets('Feuil1')
.Range('A1', .Cells(UBound(Arr, 1), UBound(Arr, 2))).Value = Arr
End With

End Sub

bonne continuation
à bientôt
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise