OVH Cloud OVH Cloud

Connexion ADO

4 réponses
Avatar
francois63000
Bonjour
ma question a déjà du être posée mais j'arrive pas à retrouver dasn le forum

Voila ce que je souhaite faire:
Dasn une feuille. je souhaite récupérer des données d'un classeur fermé (
d'ou la connexion ADO)

Pour cela je voudrai écrire dasn une première cellule le chemin d'accès au
fichier xls; dans une seconde le nom de la feuille et enfin la plage que je
veux récupérer.

J'ai bien trouvé des exemple sur l'excellent Excelabo mais ca ne fonctionne
pas. etant totalement néophyte en ADO, est ce que quelqu'un pourrai m'aider


Merci d'avance

4 réponses

Avatar
FFO
Salut à toi
Soit dans ton fichier de destination
Feuil1 les différents paramètres pour la récupération des données :
A1 = Adresse du document source (C:Chemin)
B1 = Nom du document source sans le .xls
C1 = Adresse de la 1° cellule à recopier (A1 par exemple)
D1 = Adresse de la 2° cellule à recopier (B10 par exemple)
Feuil2 la recopie des données
Soit dans ton fichier source
Feuil1 l'onglet portant les données à récupérer
Le code :

For i = Range(Sheets("Feuil1").Range("C1")).Row To
Range(Sheets("Feuil1").Range("D1")).Row
For J = Range(Sheets("Feuil1").Range("C1")).Column To
Range(Sheets("Feuil1").Range("D1")).Column
Sheets("Feuil2").Cells(i, J) = ExecuteExcel4Macro("'" &
Sheets("Feuil1").Range("A1") & "[" & Sheets("Feuil1").Range("B1") &
".xls]Feuil1'!" & Cells(i, J).Address(ReferenceStyle:=xlR1C1) & "")
Next
Next

Toutes les Feuil1 représentent l'Onglet qui portent les paramétres de
récupération sauf pour la partie de d'instruction : ]Feuil1'!" qui
représente la feuille source des données à récupérer

A actualiser donc les 2 Feuil1 et Feuil2 en fonction des noms d'onglets
concernés

Celà devrait te convenir

Dis moi !!!
Avatar
francois63000
Merci pour ta réponse.

Ca ne fonctionne pas très bien. parce que le fichier source est une fichier
volumineux ( 30Mo)ca mouline donc pas mal. c'est pour ca que je voulais
utiliser ADO. En plus comme je dois récupérer pas mal de données ( de
quelques données à 4 colonnes complètes) il faudrait un truc très rapide.

hors il me semble que ta solution ouvre quand meme le fichier pour récupérer
les données.


Merci quand meme d'avoir passer du temps sur mon problème
Avatar
FFO
Rebonjours à toi
Le temps de traitement est lié à l'importance de la plage et non à celui du
fichier
Le code utilise 2 boucles pour récupérer donnée par donnée car justement le
fichier source reste fermé contrairement à ce que tu penses
Si on pouvais l'ouvrir des solutions plus rapide peuvent être utilisées
comme celle-ci :

Workbooks.Open Sheets("Feuil1").Range("A1") & Sheets("Feuil1").Range("B1") &
".xls"
ActiveWorkbook.Sheets("Feuil1").Range("" &
Workbooks("Classeur1").Sheets("Feuil1").Range("C1") & "", "" &
Workbooks("Classeur1").Sheets("Feuil1").Range("D1") & "").Copy
Workbooks("Classeur1").Sheets("Feuil2").Range("A1")
ActiveWorkbook.Close

Données source à récupérer dans Feuil1 du classeur ouvert en début de code:
ActiveWorkbook.Sheets("Feuil1")

Paramètres (Chemin du classeur source, Nom du classeur source, Plage source)
dans Feuil1 Classeur1 :

Workbooks.Open Sheets("Feuil1").Range("A1") & Sheets("Feuil1").Range("B1") &
".xls"
("" & Workbooks("Classeur1").Sheets("Feuil1").Range("C1") & "", "" &
Workbooks("Classeur1").Sheets("Feuil1").Range("D1") & "").

Recopie des données dans Feuil2 Classeur1 à partir de la cellule A1:
Workbooks("Classeur1").Sheets("Feuil2").Range("A1")

Le traitement est trés court quelque soit l'importance des données à récupérer

Attention ces lignes :

Workbooks.Open Sheets("Feuil1").Range("A1") & Sheets("Feuil1").Range("B1") &
".xls"

et ces lignes

ActiveWorkbook.Sheets("Feuil1").Range("" &
Workbooks("Classeur1").Sheets("Feuil1").Range("C1") & "", "" &
Workbooks("Classeur1").Sheets("Feuil1").Range("D1") & "").Copy
Workbooks("Classeur1").Sheets("Feuil2").Range("A1")

sont à mettre en une seule ligne dans l'éditeur VBA

N'est ce pas mieux ainsi
Dis moi !!!!
Avatar
lSteph
Bonjour,

sans macro, sans ADO, une simple formule dans une feuille vide
suffit de sélectionner une zone conforme à ce que tu veux piquer
exemple 4 colonnes sur 28450 lignes:

='C:monrepmonsourep[monfichier.xls]Feuil1'!A1:d28450

à valider en matricielle Ctrl+maj Enter


--
lSteph



On 19 nov, 13:33, francois63000
wrote:
Merci pour ta réponse.

Ca ne fonctionne pas très bien. parce que le fichier source est une fic hier
volumineux ( 30Mo)ca mouline donc pas mal. c'est pour ca que je voulais
utiliser ADO. En plus comme je dois récupérer pas mal de données ( de
quelques données à 4 colonnes complètes) il faudrait un truc très rapide.

hors il me semble que ta solution ouvre quand meme le fichier pour récu pérer
les données.

Merci quand meme d'avoir passer du temps sur mon problème