Ole a rencontré un problème lors de l’importation d’informations dans un classeur Excel. Il semble que les fichiers qu’il doit importer contiennent généralement des milliers et des milliers d’enregistrements. Cependant, Ole n’a pas besoin de la plupart des lignes d’entrée et s’en débarrasse normalement une fois que les enregistrements sont importés dans Excel. Ole recherche un moyen de se débarrasser des enregistrements indésirables pendant le processus d’importation, afin qu’il ait moins de travail à faire lorsque les données sont dans son classeur.

Une solution à ce problème peut être abordée de différentes manières. Une solution consiste à utiliser Access comme première étape d’importation. Access gérera facilement les milliers d’enregistrements que vous souhaitez importer, même s’il y a plus d’enregistrements que ce que vous pouvez importer dans Excel. Vous pouvez importer le fichier dans Access, filtrer les enregistrements indésirables, puis exporter la table résultante en tant que classeur Excel.

La meilleure solution, cependant, peut être de contourner complètement les filtres d’importation d’Excel. Vous pouvez facilement écrire une routine d’importation dans VBA et lui permettre de traiter le fichier d’importation. Par exemple, considérons la macro suivante:

Sub Import()

Dim sFile As String     Dim sUnwanted As String     Dim sDelim As String     Dim iRow As Integer     Dim iCol As Integer     Dim bBadRecord As Boolean     Dim iTemp As Integer

sFile = "d:\data.txt"

sUnwanted = "bad text"

sDelim = ","



Open sFile For Input As #1

iRow = 1     While Not EOF(1) 'Scan file line by line         iCol = 1         Line Input #1, sBuffer

' Check to see if should ignore record         bBadRecord = Instr(sBuffer, sUnwanted)



If Not bBadRecord Then             iTemp = Instr(sBuffer, sDelim)

While iTemp > 0                 With Application.Cells(iRow, iCol)

.NumberFormat = "@" 'Text formatting                     .Value = Left(sBuffer, iTemp-1)

End With                 iCol = iCol + 1                 sBuffer = Mid(sBuffer, iTemp+1, Len(sBuffer))

iTemp = Instr(sBuffer, sDelim)

Wend             If Len(sBuffer) > 0 Then                 With Application.Cells(iRow, iCol)

.NumberFormat = "@" 'Text formatting                     .Value = sBuffer                 End With             End If             iRow = iRow + 1         End If     Wend     Close #1 End Sub

Cette macro ouvre un fichier de données et lit chaque enregistrement du fichier. Il vérifie l’enregistrement pour s’assurer que l’importation est correcte, puis extrait l’enregistrement, en fonction d’un délimiteur, et insère les informations dans la feuille de calcul actuelle. Vous pouvez modifier le nom du fichier de données (la variable sFile), le texte qui indique un mauvais enregistrement (variable sUnwanted) et le délimiteur (variable sDelim).

À titre d’exemple, supposons que vous disposez d’un fichier de données nommé Clients.txt. Ce fichier contient tous vos enregistrements clients, mais vous ne souhaitez pas importer les enregistrements des clients dont l’adresse est aux États-Unis. En outre, les enregistrements dans le fichier de données utilisent un caractère de tabulation entre chaque champ. Dans ce cas, il vous suffit d’apporter les modifications suivantes aux variables au début de la macro:

sFile = "d:\Customers.txt"

sUnwanted = "United States"

sDelim = Chr(9)

Une fois que vous exécutez la macro, la feuille de calcul actuelle contient uniquement les données souhaitées.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (2239) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-Selectively_Importing_Records [Importation sélective d’enregistrements].