mettre dans une variable tableau les valeurs d'un classeur fermé

f69815

XLDnaute Occasionnel
bonsoir le forum,

ce qui est dans le titre j'arrive à le faire en ouvrant le classeur source, mais je voudrais le faire en gardant ce classeur source fermé.
le code est dans le fichier joint. c'est le classeur destination.
merci
 

Pièces jointes

  • synthese.xls
    38.5 KB · Affichages: 70
  • synthese.xls
    38.5 KB · Affichages: 71
  • synthese.xls
    38.5 KB · Affichages: 72

CBernardT

XLDnaute Barbatruc
Re : mettre dans une variable tableau les valeurs d'un classeur fermé

bonsoir,

La macro ci-dessous, effectue l'effacement de la feuille du classeur cible et l'extraction des données de la feuille du classeur source fermé. Utilisation des objets ADO (ActiveX Data Objects) avec une feuille de calcul Microsoft Excel comme source de données.

Macro à adapter aux dimensions du tableau de la feuille source et de la référence de la cellule de la feuille cible.


Option Explicit
Public Chemin As String, Derlig As Long, Tablo
Sub ExtractionValeurs()
'/!\ Références à installer par le menu Outils/Reférences
' Visual Basic For Applications
' Microsoft Excel 12.0 Object Library
' OLE Automation
' Microsoft Office 12.0 Object Library
' Microsoft Forms 2.0 Object Library
' Shockwave Flash
' Microsoft ActiveX Data Objects 2.1 Library
' Microsoft ADO Ext. 2.8 for DDL and Security

Dim Source As ADODB.Connection, Rst As ADODB.Recordset, ADOCommand As ADODB.Command
Dim Fichier As String, Cellule As String, Feuille As String
Application.Calculation = xlManual
Application.ScreenUpdating = False
' Effacement de la base précédente
With Sheets("FeuilleClasseurCibleOuvert")
Derlig = .Range("I65536").End(xlUp).Row
With .Range("A2:V" & Derlig + 1)
.ClearContents
.Interior.ColorIndex = xlNone
.Borders.LineStyle = xlLineStyleNone
End With
End With
' Répertoire du fichier
Chemin = ThisWorkbook.Path
'Définit le classeur fermé servant de base de données
Fichier = Chemin & "\" & "NomClasseurFermé.xls"
'Nom de la feuille dans le classeur fermé ne pas oublier d'ajouter $ au nom de la feuille.
Feuille = "NomFeuilleClasseurFermé$"
'--- Connexion ---
Set Source = New ADODB.Connection
Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & Fichier & ";Extended Properties=""Excel 8.0;HDR=NO;IMEX=1""" 'Excel 2003
'Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;IMEX=1""" ' Excel 2007
'----Définit la requête---
Cellule = "A2:B20000" 'Adresse des cellules contenant les données à récupérer
Set ADOCommand = New ADODB.Command
With ADOCommand
.ActiveConnection = Source
.CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
End With
'Reference
Set Rst = New ADODB.Recordset
Rst.Open ADOCommand, , adOpenKeyset, adLockOptimistic
Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
Sheets("FeuilleClasseurCibleOuvert").Range("A2").CopyFromRecordset Rst
' Fermeture des variables
Rst.Close
Source.Close
Set Source = Nothing
Set Rst = Nothing
Set ADOCommand = Nothing
Application.Calculation = xlAutomatic
End Sub

Pour plus de renseignement suivre le lien :

Ce lien n'existe plus
 

f69815

XLDnaute Occasionnel
Re : mettre dans une variable tableau les valeurs d'un classeur fermé

bonjour CBernardT,
merci de ta réponse.
mais cela ne correspond pas vraiment à mon problème.
1) ce n'est pas une plage de cellule que je veux récupérer, mais une 30 taine de cellules. elles sont disséminées dans la feuille source.
2) je ne veux pas effacer la feuille destination, car c'est un historique de date, les dates récupérées dans le fichier source sont ajoutées dans la 1ère cellule vide correspondant au nom. pour remplir cet historique j'utilise 2 variables type tableau, que j'aliment à partir du fichier source et c'est cette partie que je n'arrive pas à effectuer le fichier source fermé.

j' ai un code de michelxld, qui n'utilise pas ADO, que je n'arrive pas à adapter à mon cas.

code :
Sub ChercheFichiersFermesV01()
Dim X As Integer, NbFichiers As Integer, y As Integer
Dim Tableau() As String
Dim Direction As String
Dim Valeur As Double

Application.ScreenUpdating = False
Direction = Dir(ThisWorkbook.Path & "\*.xls")
Do While Len(Direction) > 0 'liste tous les classeurs du repertoire
NbFichiers = NbFichiers + 1
ReDim Preserve Tableau(1 To NbFichiers)
Tableau(NbFichiers) = Direction
Direction = Dir()
Loop

If NbFichiers > 0 Then
For X = 1 To NbFichiers 'boucles sur les classeurs

' pour ne pas prendre en compte le classeur contenant la macro (synthese)
If Tableau(X) <> ThisWorkbook.Name Then

For y = 1 To 120 'boucle sur les produits à récupérer
'recupere la valeur deja existante dans le tableau de synthese
Valeur = ActiveSheet.Cells(y + 4, 2)

With ActiveSheet.Cells(y + 4, 2) 'ajout des nouvelles valeurs
.Formula = "='" & ThisWorkbook.Path & "\[" & Tableau(X) & "]" & "Feuil1" & "'!" _
& Cells(y + 1, 2).Address
.Value = .Value + Valeur
End With

Next y

End If
Next X
End If
 

Pièces jointes

  • source.xlsx
    17.2 KB · Affichages: 46
  • source.xlsx
    17.2 KB · Affichages: 45
  • source.xlsx
    17.2 KB · Affichages: 48
Dernière édition:

Nousson

XLDnaute Nouveau
Re : mettre dans une variable tableau les valeurs d'un classeur fermé

Bonjour,

Permettez-moi de m'immiscer dans cette discussion, mais je ne trouve pas quel fournisseur Jet utiliser pour Excel 2010.
Est-ce que quelqu'un aurait l'info SVP ?
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 857
Membres
103 979
dernier inscrit
bderradji