Manip sur cellules fichiers fermes

VBANOVICE

XLDnaute Junior
Bonjour a tous

Grace à ce site merveilleux, je pense avoir trouvé une macro pour recuperer des cellules dans des dossiers ferme, mais j'ai besoin de votre aide pour l'adapter.

j'aimerais que la cellule d5 du fichier ferme soit dans c14 du fichier requette
d6 du fichier ferme soit dans d14 du fichier requette
d7 du fichier ferme soit dans e14 du fichier requette
d8 du fichier ferme soit dans f14 du fichier requette
m6 du fichier ferme soit dans g14 du fichier requette
m7 du fichier ferme soit dans h14 du fichier requette
m9 du fichier ferme soit dans i14 du fichier requette
m10 du fichier ferme soit dans j14 du fichier requette

ensuite on passe au fichier ferme n+1 qui irra à la ligne 15 et ainsi de suite

si joint la macro de michelxld:

Option Explicit
Option Base 1

Sub importerDonneesClasseursFermes()
'michelxld le 31.05.2005
'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Library
'necessite d 'activer la reference Microsoft ADO Ext 2.7 for DLL ans Security
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Cat As ADOX.Catalog
Dim xConnect As String, Cible As String
Dim Fichier As String, Champ As String, Feuille As String
Dim Tableau()
Dim i As Byte, NumRec As Byte, j As Byte

Fichier = Dir(ThisWorkbook.Path & "\*.xls") 'adapter chemin


Do While Len(Fichier) > 0 'boucler sur les fichiers du repertoire

If Fichier <> ThisWorkbook.Name Then

xConnect = "DRIVER={Microsoft Excel Driver (*.xls)};" & _
"ReadOnly=1;DBQ=" & ThisWorkbook.Path & "\" & Fichier

j = j + 1
Set Cat = CreateObject("ADOX.Catalog")
Set Cn = CreateObject("ADODB.Connection")

Cn.Open xConnect
Set Cat.ActiveConnection = Cn

Feuille = Cat.Tables(0).Name 'nom de la 1ere feuille du classeur fermé
Champ = Cat.Tables(0).Columns(5).Name ' nom d'entete de la 6eme colonne du classeur fermé
Tableau = Array(11, 13, 17, 19, 21, 30, 109) 'les valeurs doivent etre dans l'ordre croissant
NumRec = 2 '2 car l'index du 1er champ =0 et la 1ere ligne dans le classeur fermé
'correspond à l'entete

Cible = "SELECT " & Champ & " FROM [" & Feuille & "];"

Set Rs = New ADODB.Recordset
Rs.Open Cible, xConnect, adOpenStatic, adLockOptimistic, adCmdText

If Not Rs.EOF Then
For i = 1 To UBound(Tableau)
If Rs.RecordCount >= Tableau(i) - NumRec Then
Rs.Move Tableau(i) - NumRec
Cells(j, i) = Rs.Fields(0).Value
NumRec = Tableau(i)
End If
Next i
End If

Cn.Close
Rs.Close
Set Cn = Nothing
Set Rs = Nothing
End If

Fichier = Dir()
Loop

End Sub


Merci de votre aide

@+
 

VBANOVICE

XLDnaute Junior
Re : Manip sur cellules fichiers fermes

Bonsoir VBANOVICE,

Je trouve ADO très casse-pieds et souvent bien lourd à programmer.

C'est si beau un fichier ouvert ;)

A+


MERCI de répondre,

mais s'il faut ouvrir récuperer les donées et refermer sur 400 fichiers.... bonjour la galère....

n'y a t'il pas une solution pour adapter afin que je puisse recuperer les données?
merci
@+;)
 

VBANOVICE

XLDnaute Junior
Re : Manip sur cellules fichiers fermes

Re,



Ah oui je vois, ce n'est pas de la plaisanterie :eek:

A+

rebonsoir

et oui, mon projet concerne un classeur type, ou pour chaque client il y aura un fichier excel d'ou a peut pres 400 voir plus de fichier
pour te rendre compte je t'envoi le fichier type en cours de finalisation

peut etre utile?

merci
@+:p
 

Pièces jointes

  • 1234test.zip
    44.3 KB · Affichages: 52
  • 1234test.zip
    44.3 KB · Affichages: 47
  • 1234test.zip
    44.3 KB · Affichages: 60

job75

XLDnaute Barbatruc
Re : Manip sur cellules fichiers fermes

Re,

A mon avis, plutot qu'ADO, il devrait être plus simple de procéder ainsi :

- ouvrir le 1er fichier à copier

- dans le fichier de requête, entrer les formules de liaisons, très simples, dans les cellules C14 à J14

- fermer le fichier copié, les formules comportent les chemins d'accès

- copier chacune des 8 formules dans la macro VBA, avec des lignes du genre :

Code:
Range("C" & lig).FormulaLocal = "=formule1"
Range("D" & lig).FormulaLocal = "=formule2"
'etc

Bien entendu simplifier les formules en définissant une variable pour le chemin d'accès (le même pour tous les fichiers je suppose).

Enfin organiser une boucle sur la variable lig en fonction des noms des fichiers (qui comportent des numéros d'ordre je suppose).

Edit : on terminera la macro en supprimant les formules dans la feuille par l'instruction :

Code:
Range("C14:J1000") = Range("C14:J1000").Value

A+
 
Dernière édition:

VBANOVICE

XLDnaute Junior
Re : Manip sur cellules fichiers fermes

Re,

A mon avis, plutot qu'ADO, il devrait être plus simple de procéder ainsi :

- ouvrir le 1er fichier à copier

- dans le fichier de requête, entrer les formules de liaisons, très simples, dans les cellules C14 à J14

- fermer le fichier copié, les formules comportent les chemins d'accès

- copier chacune des 8 formules dans la macro VBA, avec des lignes du genre :

Code:
Range("C" & lig).FormulaLocal = "=formule1"
Range("D" & lig).FormulaLocal = "=formule2"
'etc

Bien entendu simplifier les formules en définissant une variable pour le chemin d'accès (le même pour tous les fichiers je suppose).

Enfin organiser une boucle sur la variable lig en fonction des noms des fichiers (qui comportent des numéros d'ordre je suppose).

Edit : on terminera la macro en supprimant les formules dans la feuille par l'instruction :

Code:
Range("C14:J1000") = Range("C14:J1000").Value

A+

:eek: ton idée parait interressant, mais je n'est pas tout compris

dans mon fichier requette par exemple j'aurais en d14 la formule de type
=[12345test.xls]Saisie!$D$5
idem pour les autres colonnes
par contre je n'est pas conpris pour la ligne
Range("C" & lig).FormulaLocal = "=formule1"
a quoi correspond le formule1
command faire la boucle avec lib pour executer les lignes suivante du fichier requette d15 d16 ect en correspondance avec les autres fichier
peux tu m'apporter plus d'info stp
Cordialement:)
 

michel_m

XLDnaute Accro
Re : Manip sur cellules fichiers fermes

Re, vbanovice, Bonsoir Job75

Comme tu as peu de cellules à transfèrer, tu pourrais utiliser la macroXL4 dite Walkenbach. Tu en trouveras une proposition récente:
https://www.excel-downloads.com/threads/recuperation-de-donnees-dun-classeur-ferme.122241/
tes cellules étant disjointes sur tes classeurs source, l'utilisation de SQL et d'ADO, la plus rapide, serait assez compliquée dans ce cas.

pour parcourir le répertoire de tes 400 classeurs (400 fichiers à extraire, ca me dit quelque chose sur un autre site ,mais...), je viens de te fournir la méthode dans le post sur l'impression; donc il sufira d'imbriquer avec la macro ci dessus param^trée au nom du fichier en cours
 

michel_m

XLDnaute Accro
Re : Manip sur cellules fichiers fermes

encore moi

ci joint petite démo d'école simplifiée (1 seule cellule et on faisait le total au lieu d'adresser dans des cellules) qui trainait sur une étagère de mon grenier

en espèrant que...
 
Dernière édition:

VBANOVICE

XLDnaute Junior
Re : Manip sur cellules fichiers fermes

Re, vbanovice, Bonsoir Job75

Comme tu as peu de cellules à transfèrer, tu pourrais utiliser la macroXL4 dite Walkenbach. Tu en trouveras une proposition récente:
https://www.excel-downloads.com/threads/recuperation-de-donnees-dun-classeur-ferme.122241/
tes cellules étant disjointes sur tes classeurs source, l'utilisation de SQL et d'ADO, la plus rapide, serait assez compliquée dans ce cas.

pour parcourir le répertoire de tes 400 classeurs (400 fichiers à extraire, ca me dit quelque chose sur un autre site ,mais...), je viens de te fournir la méthode dans le post sur l'impression; donc il sufira d'imbriquer avec la macro ci dessus param^trée au nom du fichier en cours


merci pour ta réponse
excuse moi d'avoir repondue au dernier poste avant le 8
je test la macro qui est sur le lien et je t'informe du résultat

@+:)
 

VBANOVICE

XLDnaute Junior
Re : Manip sur cellules fichiers fermes

Re,



Non, il me faut la formule avec le chemin d'accès, fermez donc le fichier.

Par ailleurs donnez le vrai nom du 1er fichier copié, il ne commence certainement pas par 12345... Comment se suivent les numéros des fichiers ?

A+

bonjour

excuse moi de n'avoir pas répondu a ton post avant michel m
pour le nom des fichiers je pense qu'ils seront du style 411253205, 411234120, ect pour l'instant je n'ai pas le nom du premier fichier,
si le test fonctione avec 12345, il peut fonctionner avec les autres noms

merci si tu peux me donner un exemple
cordialement :p
 

Discussions similaires

Réponses
2
Affichages
224

Statistiques des forums

Discussions
312 177
Messages
2 085 970
Membres
103 072
dernier inscrit
Remithesix