Bonjour,
J'ai une macro qui fonctionne très bien pour effectuer une recherche verticale dans une feuille "Base NOI" malheureusement cette feuille à 837947 ligne ce qui me fait un fichier de plus de 37Mo.
J'aimerai donc faire un fichier "NOI" avec juste cette feuille et faire tourner mon fichier "Suivi NOI" en faisant ma recherche verticale sans ouvrir le fichier "NOI"
je pourrai le faire avec cette formule dans une cellule =RECHERCHEV('2023'!J8;'C:\Users\e.finet1\Desktop\[NOI.xlsx]Rapport 1'!$A:$B;2;FAUX)
Mais voilà, comme le fichier a plusieurs utilisateur je préfère ne pas mettre de formule.
J'ai essayé avec une requete :
mais bon soit je m'y prend mal soit je ne suis pas doué car j'ai un message d'erreur au niveau de .Open (La table externe n'est pas dans le format attendu.)
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 Sub RequeteClasseurFerme() Dim Cn As ADODB.Connection Dim Fichier As String Dim NomFeuille As String, texte_SQL As String Dim Rst As ADODB.Recordset 'Définit le classeur fermé servant de base de données Fichier = "C:\Users\e.finet1\Desktop\NOI.xlsx" 'Nom de la feuille dans le classeur fermé NomFeuille = "Rapport 1" Set Cn = New ADODB.Connection '--- Connection --- With Cn .Provider = "Microsoft.Jet.OLEDB.4.0" .ConnectionString = "Data Source=" & Fichier & _ ";Extended Properties=Excel 8.0;" .Open End With
Voici la macro qui fonctionne quand la recherche est dans la feuille de mon classeur
Bref pour simplifier je cherche à remplacer Worksheet par C:\Users\e.finet1\Desktop\NOI.xlsx
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 If Target.Column = 10 Then cherche = Cells(Target.Row, 10).Value x = WorksheetFunction.CountIf(Worksheets("Base NOI").Range("a:a"), cherche) If x = 1 Then Set ou = Worksheets("Base NOI").Range("a:a").EntireColumn Set noi = ou.Find(cherche, ou.Range("a1"), , xlWhole, xlByRows, xlNext, False) nomnoi = noi.Offset(0, 1).Value Cells(Target.Row, 11).Value = nomnoi Cells(Target.Row, 12).Select End If End If
Merci pour votre aide.
Partager