[RESOLU] Importation de données d'un autre classeur

Ternoise

XLDnaute Occasionnel
Bonjour le Forum

Le sujet à déjà était traité plusieurs fois mais pas moyen de mettre en œuvre.

J'aimerais importer des données de

Provenance :

Classeur : Essais.xls
Feuille : Feuil2
Zone : B9 jusqu'a la colonne R

Vers :

Classeur : Essais.xls
Feuille : Feuil5
Zone : à partir de B9

Est-il possible de copier ces données que le classeur soit ouvert ou fermer ?

Merci de votre aide
David
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Importation de données d'un autre classeur

Bonjour Ternoise,

Les noms des fichiers sont les mêmes...

Mais qu'il s'agisse du même fichier ou de fichiers différents, il suffit de mettre une formule de liaison dans les cellules de destination.

Le format de ces cellules ou la formule peuvent être adaptés pour masquer les valeurs zéros.

A+
 

Ternoise

XLDnaute Occasionnel
Re : Importation de données d'un autre classeur

Bonjour Job

Je me suis trompé. Le classeur de destination à un autre nom.

Par contre , je ne vais pas mettre une formule de liaison dans chaque cellule ! ?

J'aimerais récupérer ces données en cliquant sur un bouton

Merci de votre aide
 

Ternoise

XLDnaute Occasionnel
Re : Importation de données d'un autre classeur

Ok Merci je vais voir comment je vais faire.
J'ai nommé la zone de provenance car elle varie en nombre de ligne.
Je vais chercher davantage car j'aimerais ne pas ouvrir le fichier source et en plus détecter si le fichier source est déjà ouvert ou pas.
 
Dernière édition:

Ternoise

XLDnaute Occasionnel
Re : Importation de données d'un autre classeur

Re à tous...

C'est bon, j'ai trouvé ceci.
Si cela peux servir à quelqu'un !
Facile à adapter mais attention, renvoie les valeurs d'une plage de cellules contigües

Sub Import()

'Pour lire et écrire dans un classeur fermé en utilisant ADO,
'la bibliothèque
'Microsoft ActiveX Data Objects 2.x Library
'doit être cochée dans Outils\Références du VBAProject.

' 1 - Obtenir des données d'un classeur fermé


Dim Fich$, Arr

Fich = "C:\Fichtemp\NomduFichierSource.xls" '====> à adapter


'récup des données à partir du nom d'une plage de cellules ()
GetExternalData Fich, "", "T", False, Arr '======> à adapter, dans l'exemple la plage nommée est "T"

With ThisWorkbook.Sheets("FeuilleDestination") '======>à adapter
.Range("B9", .Cells(UBound(Arr, 1), UBound(Arr, 2))).Value = Arr '====> à adapter, dans l'exemple, Coller à partir de B9
End With

End Sub

'renvoie les valeurs d'une plage de cellules contigües (srcRange)
'd'une feuille (srcSheet) d'un fichier (srcFile) fermé
'dans un tableau (outArr)
'le paramètre TTL indique si la plage a ou non une ligne d'entêtes

Sub GetExternalData(srcFile As String, _
srcSheet As String, _
srcRange As String, _
TTL As Boolean, _
outArr As Variant)
'd'après Héctor Miguel, mpep
Dim myConn As ADODB.Connection, myCmd As ADODB.Command
Dim HDR As String, myRS As ADODB.Recordset, RS_n As Integer, RS_f As Integer
Dim Arr

Set myConn = New ADODB.Connection
If TTL = True Then HDR = "Yes" Else HDR = "No"
myConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & srcFile & ";" & _
"Extended Properties=""Excel 8.0;" & _
"HDR=" & HDR & ";IMEX=1;"""
Set myCmd = New ADODB.Command
myCmd.ActiveConnection = myConn
If srcSheet = "" _
Then myCmd.CommandText = "SELECT * from `" & srcRange & "`" _
Else myCmd.CommandText = "SELECT * from `" & srcSheet & "$" & srcRange & "`"
Set myRS = New ADODB.Recordset
myRS.Open myCmd, , adOpenKeyset, adLockOptimistic
ReDim Arr(1 To myRS.RecordCount, 1 To myRS.Fields.Count)
myRS.MoveFirst
Do While Not myRS.EOF
For RS_n = 1 To myRS.RecordCount 'lignes
For RS_f = 0 To myRS.Fields.Count - 1 'colonnes
Arr(RS_n, RS_f + 1) = myRS.Fields(RS_f).Value
Next
myRS.MoveNext
Next
Loop
myConn.Close
Set myRS = Nothing
Set myCmd = Nothing
Set myConn = Nothing

outArr = Arr

End Sub
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 984
Messages
2 094 179
Membres
105 949
dernier inscrit
Rs50