Importation sélective d’enregistrements (Microsoft Excel)
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]
.