Extraire des données à partir d’un classeur fermé
L’extraction de données d’un fichier fermé dans un autre classeur est une demande courante de la plupart des utilisateurs Excel. Ils aimeraient extraire ou consolider des données à partir de fichiers fermés; cependant, ce n’est pas possible. Il existe une solution de contournement qui permet de résoudre ce problème. La solution utilise le code Macro.
Question: Au quotidien, je passe du temps à copier des données d’un fichier à un autre. Il existe deux fichiers «Open.xls» et «Closed.xls» et je veux copier les données de «Closed.xls» vers «Open.xls» via le code VBA.
===
Points clés à savoir:
La première chose est que nous devrions connaître la «plage utilisée» du classeur fermé, c’est-à-dire «Closed.xls» dans le classeur ouvert pour par exemple « Open.xls » Nous pouvons utiliser la fonction IF dans la plage utilisée du classeur « Closed.xls » dans le classeur « Open.xls » et elle extraira les données du classeur « Closed.xls » * Si la cellule de référence est vide, #N / A est mis en place. En utilisant la méthode specialcells, vous pouvez ensuite supprimer toutes les erreurs # N / A et changer la formule en valeurs Pour commencer, nous enregistrerons deux fichiers Excel 1) Open.xls 2) Closed.xls dans le chemin «D: \ Test Dossier ”Ci-dessous, l’instantané du classeur“ Closed.xls ”:
Pour enregistrer automatiquement les données du fichier «Closed.xls» dans le fichier «Open.xls», nous devons suivre les étapes ci-dessous pour lancer l’éditeur VB Cliquez sur l’onglet Développeur Dans le groupe Code, sélectionnez Visual Basic
-
Copiez le code ci-dessous dans ThisWorkbook (Closed.xls)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _ Cancel As Boolean) 'Put in the UsedRange Address of Sheet1 Closed.xls (this workbook)' --- Comment Sheet2.Cells(1, 1) = Sheet1.UsedRange.Address End Sub
-
Pour extraire les données dans «Open.xls», copiez le code suivant dans le module standard
Sub Importdata() Dim AreaAddress As String Sheet1.UsedRange.Clear Sheet1.Cells(1, 1) = "= 'D:\Test Folder\" & "[Closed.xls]Sheet2'!RC" AreaAddress = Sheet1.Cells(1, 1) With Sheet1.Range(AreaAddress) .FormulaR1C1 = "=IF('D:\Test Folder\" & "[Closed.xls]Sheet1'!RC="""",NA(),'D:\Test Folder\" & _ "[Closed.xls]Sheet1'!RC)" On Error Resume Next .SpecialCells(xlCellTypeFormulas, xlErrors).Clear On Error GoTo 0 .Value = .Value End With End Sub
-
Copiez le code suivant dans ThisWorkbook (Open.xls)
Private Sub Workbook_Open() Run "Importdata" End Sub
Maintenant, les codes VBA sont tous définis; tout ce que nous avons à faire est d’ouvrir le nom de fichier «Open.xls». Voici un instantané du fichier «Open.xls»:
Le code n’est pas limité à la copie de cellule de A1.usedrange; le code choisira la plage de départ et fonctionnera parfaitement bien. Les fichiers sont disponibles en téléchargement et nous vous recommandons d’essayer.
===
Conclusion: avec le code VBA, nous pouvons automatiser la tâche d’extraction de données sans ouvrir le classeur de destination et nous nous évitons de faire des copier-coller manuels.
Si vous avez aimé nos blogs, partagez-les avec vos amis sur Facebook. Et vous pouvez aussi nous suivre sur Twitter et Facebook.
Nous serions ravis de vous entendre, faites-nous savoir comment nous pouvons améliorer, compléter ou innover notre travail et le rendre meilleur pour vous. Écrivez-nous à [email protected]