Bonjour,

J'ai un énorme problème, même ChatGPT n'y arrive pas.
J'ai un fichier Excel de 25MO avec une feuille "Rapport 1", 864076 lignes et 3 colonnes
Je sais faire une recherche verticale en VBA si j'ouvre le fichier mais l'ouverture prend du temps, trop de temps.

Alors j'ai chercher sur internet comment faire et il y a deux réponses
- Rechercher une ligne avec QueryTable
- Rechercher une ligne avec ADO

Mais voilà l'une comme l'autre cela ne fonctionne pas et cela viendrait de la requête SQL.

Le but est que selon la valeur je trouve la ligne dans le fichier Liste NOI et la copie dans mon fichier Excel dans la feuille Base NOI

Si vous avez une autre technique sans ouvrir le fichier, je suis preneur.

Dans le code qui suit j'ai essayé de remplacer WHERE F1 par WHERE [A] ou WHERE [A1] et même WHERE Noi en ayant nommé la colonne A "Noi" mais rien n'y fait il ne trouve aucune valeur.

Merci pour votre aide

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
Sub RechercheLigneAvecQueryTable3()
    Dim xlSheet As Worksheet
    Dim cheminFichier As String
    Dim rechercheValeur As String
    Dim qt As QueryTable
    Dim requeteSQL As String
 
    ' Définir la valeur à rechercher
    rechercheValeur = Cells(4, 13).Value
 
    ' Définir le chemin du fichier Excel fermé
    cheminFichier = "C:\Users\e.finet1\Desktop\Liste NOI.xlsx"
 
    ' Référence à la feuille de travail où vous voulez importer la ligne
    Set xlSheet = ThisWorkbook.Sheets("Base NOI")
 
    ' Construire la requête SQL pour rechercher la valeur dans la colonne A (F1)
    requeteSQL = "SELECT * FROM [Rapport 1$] WHERE F1 = '" & rechercheValeur & "'"
 
    ' Créer un QueryTable avec la requête SQL
    On Error Resume Next
    Set qt = xlSheet.QueryTables.Add(Connection:="OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & cheminFichier & ";Extended Properties=""Excel 12.0;HDR=YES;"";", Destination:=xlSheet.Range("A22043"))
    On Error GoTo 0
 
    ' Spécifier la requête SQL
    qt.CommandText = requeteSQL
 
    ' Actualiser le QueryTable (exécuter la requête)
    On Error Resume Next
    qt.Refresh BackgroundQuery:=False
    On Error GoTo 0
 
    ' Vérifier si des données ont été importées
    If xlSheet.Cells(22043, 1).Value = "" Then
        MsgBox "Aucune donnée trouvée"
    Else
        MsgBox "Données trouvées et importées avec succès."
    End If
 
    ' Supprimer le QueryTable pour nettoyer
    qt.Delete
End Sub