ExcelVBA Chercher des données sans ouvrir

Benjamin35008 Messages postés 14 Statut Membre -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je souhaiterai aller chercher des données dans d'autres classeurs excel afin de les copier dans mon classeur actif par exemple.

Ma macro fonctionne, seulement au début je copiais/collais les champs un par un, du coup pendant 1/2 secondes assez désagréables, le pc activait un classeur, puis un autre, puis le 1er, puis le 2eme, etc c'était long et pénible pour l'utilisateur.

J'ai donc modifié ma macro afin de copier les champs (A1 à W1 par exemple) et de les copier d'un coup. c'est nettement plus pratique.


Cependant j'ai entendu parler de la fonction filestream et mes recherches sur internet ont été infructueuses. Je souhaiterai pouvoir aller chercher ces données dans les autres classeurs sans pour autant avoir besoin d'ouvrir ces dits classeurs.

Workbooks.Open Filename:="C:\Users\Ben\Desktop\Versions finales\copie expurgee de synthèse RNC 2005.xls" 'Fichier de destination dans lequel je souhaite écrire sans pour autant qu'il s'ouvre
Windows("Rnc tech SMD-F-TMI-708.xls").Activate 'Mon classeur contenant la macro et les informations à déplacé qui lui est déjà ouvert
Worksheets("R.N.C.").Range("W33:AH33").Select
Selection.Copy
Windows("copie expurgee de synthèse RNC 2005.xls").Activate
Worksheets("Répertoire RNC").Range("AM6:AX6").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
...

Pour résumer: Rnc tech est ouvert, je clique sur la macro je souhaiterai qu'elle copie certains champs dans le fichier de destination "copie expurgee..." sans pour autant passer par un "workbooks.open Filename"

Je vous remercie pour vos conseils avisés.

Pour des raisons de confidentialité je ne peux vous transmettre ces deux classeurs.
A voir également:

6 réponses

michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour,

On peut effectivement lire ou écrire des données avec des fichiers fermés. mais avant, tu pourrais grandement améliorer la rapidité en figeant le défilement de l'écran et en évitant les select-selection à proscrire formellement sans 99% des cas

Application.ScreenUpdating = False 'fige défilement de l'écran

tablo = ThisWorkbook.Worksheets("R.N.C.").Range("W33:AH33").Value

Workbooks.Open Filename:="C:\Users\Ben\Desktop\Versions finales\copie expurgee de synthèse RNC 2005.xls"
Worksheets("Répertoire RNC").Range("AM6:AX6").Value = tablo

non testée, bien sur
Si j'ai 2 minutes je t'envoie une maquette.

Merci à l'avenir de mettre tes codes entre balises( icone <> sur dessin de page dans les onglets de message)

0
Benjamin35008 Messages postés 14 Statut Membre
 
Bonjour michel_m

Merci beaucoup pour cette indication je vais essayer ta modification tout de suite.
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
ci joint maquette-démo (source et cible dans m^me répertoire: ordre de mon poili dans la main)
https://www.cjoint.com/?cgnF7AX6zN

la macro:

Sub reporter()
Application.ScreenUpdating = False 'fige défilement de l'écran
' tablo mémorise les données deA1:Z1 sur feuil1
tablo = ThisWorkbook.Sheets(1).Range("A1:Z1").Value
Workbooks.Open Filename:=ThisWorkbook.Path & "\cible.xls"
With Sheets(2)
'restitution dans feuil2 classeur cible en B2:AA2
.Range("B2:AA2").Value = tablo
.Activate
End With
End Sub
0
Benjamin35008 Messages postés 14 Statut Membre
 
Je viens d'essayer, cela fonctionne à merveille. Merci beaucoup je me demandais régulièrement pourquoi après l'utilisation de la macro, ma page défilait et c'était d'ailleurs assez pénible.

Reste plus qu'à adapter un moyen pour écrire (la macro dont laquelle je parle) et un moyen pour lire (une autre de mes macros dans laquelle je vais chercher des information à partir de requêtes Impromptu) sans pour autant ouvrir ces classeurs.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Pour lire dans un (des) fichiers sans les ouvrir et comme tu sembles avoir que 12 cellules? (W3:AH33)
et si tes fichiers sources ont la m^me structure
tu pourrais adapter cette procédure utilisant la macro dite de "walkenbach"

Sub recup()
'initialisations
lig = 1 'ligne de départ à adapter
onglet = "feuil1" ' a adapter
chemin = "V:\VME\COTATIONS" 'a adapter
application.ScreenUpdating = False
'action avec fichiers sources restant fermés
ChDir chemin
fichier = Dir(chemin & "*.xls") 'il ya tous les fichiers sources et que les fichiers source dans le répertoire "chemin"
Do While fichier <> ""
    Cells(lig, 1) = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & onglet & "'!R8C11") 'R8C11<==> K8
    Cells(lig, 2) = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & onglet & "'!R11C12") 'Range("L11").Value
    Cells(lig, 3) = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & onglet & "'!R12C13") '.Range("M12").Value
    Cells(lig, 4) = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & onglet & "'!R13C13") 'M13
    Cells(lig, 5) = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & onglet & "'!R16C8") 'K16
    Cells(lig, 6) = ExecuteExcel4Macro("'" & chemin & "\[" & fichier & "]" & onglet & "'!R16C14") 'N16
    lig = lig + 1
    fichier = Dir ' Fichier suivant
Loop
MsgBox "actualisation terminée"
End Sub
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Autrement tu as aussi ce PAC (Prêt A Cuire) pour des plages plus étendues conçu avec 2 autres contributeurs sur un autre forum

important: coches les bibliothèques indiquées dans outils-ref de l'éditeur VBA avec le numéro de biblio le + récent (dépend de ta version d'excel)
https://www.cjoint.com/?cgoh2EEeMP
0