XL 2019 extraire des données d'un fichier Excel sans l'ouvrir avec VBA

Kenza18

XLDnaute Nouveau
Bonjour,

je souhaite extraire les données d'un fichier Excel très volumineux (lire le fichier sans l'ouvrir).

les données que je veux extraire sont les suivantes :

les cellules du champ code-techno == '4GF'. --> [ ce champ se trouve sur la colonne D]

Est ce que c'est possible de m'aider à trouver une solution avec VBA s'il vous plait ?

En vous remerciant d'avance pour vote aide.



Cordialement,
Kenza
 

soan

XLDnaute Barbatruc
Inactif
ah ben moi, j'ai aucune idée de ton âge ; mais si t'es une personne âgée,
je les respecte, c'est normal ! :)

note que dans les tribus indiennes, par exemple, les personnes âgées sont très respectées ;
et on adore écouter leurs histoires des temps passés. 😜 le mot « vieux » est synonyme
de « très grande sagesse » !


soan
 

patricktoulon

XLDnaute Barbatruc
re
@job75 ok c'est bon
je me stocke une petite fonction qui me sera bien utile
VB:
Sub test()
Dim chemin$, Fichier$, Rng As Range, Feuille$
chemin = "C:\Users\polux\DeskTop\"
Fichier = "Exemple.xlsx"
Set Rng = [D1:D100000]
Feuille = "Feuil1"
MsgBox GetLastRowColInClosedFich(chemin, Fichier, Feuille, Rng)
End Sub

Function GetLastRowColInClosedFich(chemin$, Fichier$, Feuille, Rng As Range)
Dim Addr$, Formule, n&
Addr = Rng.Address(, , xlR1C1)
Formule = "'" & chemin & "[" & Fichier & "]" & Feuille & "'!" & Addr
On Error Resume Next
n = ExecuteExcel4Macro("MATCH(""zzz""," & Formule & ")") 'dernière cellule texte en colonne D
On Error GoTo 0
GetLastRowColInClosedFich = n
End Function
histoire d'etre compatible 2003
VB:
Set Rng = [D1].Resize(Rows.Count)
 
Dernière édition:

Kenza18

XLDnaute Nouveau
Bonjour Kenza18, R@chid, chris,

Téléchargez les fichiers zippés joints dans le même dossier et voyez la macro du bouton :
VB:
Sub Importer()
Dim t#, chemin$, fichier$, dercol$, formule$, n&
t = Timer
chemin = ThisWorkbook.Path & "\" 'à adapter
fichier = "Source.xlsx" 'à adapter
dercol = "H" 'dernière colonne à copier
formule = "'" & chemin & "[" & fichier & "]Feuil1'!"
On Error Resume Next
n = ExecuteExcel4Macro("MATCH(""zzz""," & formule & "C4)") 'dernière cellule texte en colonne D
On Error GoTo 0
'---restitution---
Application.ScreenUpdating = False
With Feuil1 'CodeName de la feuille de destination
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    With .Range("A1:" & dercol & 1).Resize(n)
        .FormulaArray = "=" & formule & "A1:" & dercol & n 'formule de liaison matricielle
        .Value = .Value 'supprime la formule
       .Rows(1) .Offset(n).Resize(Rows.Count - n).ClearContents 'RAZ en dessous
        .Sort .Columns(4), Header:=xlYes 'tri pour regrouper et accélérer
        .Columns(4).Replace "4GF", "#N/A"
        On Error Resume Next
        .Columns(4).Offset(1).SpecialCells(xlCellTypeConstants, 3).EntireRow.Delete 'textes et nombres
        .Columns(4).Replace "#N/A", "4GF"
        .Replace 0, "", xlWhole 'efface les valeurs zéro
    End With
    With .UsedRange: End With 'actualise les barres de défilement
End With
MsgBox "Durée " & Format(Timer - t, "0.00 \sec"), , "Import"
End Sub
Chez moi pour un fichier Source de 40 000 lignes la durée d'exécution est de 1,70 seconde.

A+

merci bcp pour ta réponse par contre il y a un petit souci
mon fichier comporte 30000000 lignes c'est quasiment impossible de l'importer sur le classeur Excel
est ce que c'est possible de modifier le programme en prenant compte cette remarque
par exemple ajouter une condition (si ça dépasse la capacité d'une feuille --> le copier sur une nouvelle feuille etc.)
PS: j'ai essayé de le faire mais j'ai as pu :(

Merci bcp pour ton aide
 

soan

XLDnaute Barbatruc
Inactif
Bonsoir @Kenza18, le fil,

quand @chris t'a proposé d'utiliser Access, ce n'est pas pour lire ton fichier csv
mais pour créer un fichier Access d'extension « .mdb » ; sinon, lis le post #28
de @job75.

« lecture séquentielle » signifie : lire les lignes successivement, de la 1ère ligne
du fichier jusqu'à la dernière ligne du fichier.


soan
 
Dernière édition:

Discussions similaires