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 ”:

img1

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

img2

  • 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

img3

  • 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

img4

  • Copiez le code suivant dans ThisWorkbook (Open.xls)

Private Sub Workbook_Open()

Run "Importdata"

End Sub

img5

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»:

img6

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.

rar icon

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]