Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Fonction Recherche dans un fichier fonction d'un choix

14 réponses
Avatar
franck001
Bonjour,

voilà mon petit casse tête:
Le résultat d'une de mes cellules est une recherche verticale dans un
fichier excel autre, le problème est que pour effectuer ma recherche le dit
fichier doit être ouvert.
Jusque là pas de pb, mon problème se corse car j'aimerai ouvrir un fichier
source dépendant d'un choix fait dans une autre cellule.... un exemple sera
plus parlant:
Dans un fichier "fichier_exemple.xls":
Cellule A1 -> la valeur recherchée
Cellule B1 -> liste de choix: fichier1.xls, fichier2.xls, fichier3.xls
-> je choisis "fichier1.xls"
Cellule C1 -> RECHERCHEV($A$1;INDIRECT("["&B1&"]"&"Onglet1!$B$3:$I$55");3)

Comment faire pour que, lors de mon choix de fichier en B1, ce dernier
s'ouvre en fond pour me permettre de faire ma recherche en C1 ensuite ou tout
autre solution identique ?

Merci pour votre aide.

------(-_-)°zZz------
Franck
http://www.deschamps-web.com

4 réponses

1 2
Avatar
michdenis
ATTENTION : Pour que cela fonctionne, tu dois obligatoirement
déclarer la variable Dim ou Public (selon que tu utilises la référence
à cette variable dans un module seulement ou dans plusieurs modules.

Dans le même esprit, il ne faut pas déclarer une variable du même nom
au niveau de la procédure, car c'est cette dernière qui a préséance et
bousillerait l'approche suggérée.





"franck001" a écrit dans le message de groupe de
discussion :
Le Wk.Close ne fonctionne pas car je ne veux que le fermer au prochain
changement dans ma cellule hors je suis obligé de déclarer à nouveau wk as
workbook et du coup ca le réinitialise, si je ne le fais pas il ne connait
pas "wk"

Une solution ?

Merci d'avance
------(-_-)°zZz------
Franck
http://www.deschamps-web.com


"michdenis" a écrit :

Dans le haut du module Standard,
tu déclares une variable as Public

Public Wk as Workbook ' peut être que simplement Dim serait suffisant.

à l'ouverture du classeur, tu fais comme ceci

Set Wk = Workbooks.Open Filename:= _
("C:Documents and SettingsSergeMes documentsMaths" & nom
Windows("fichier_exemple.xls"))

Quand tu veux fermer le classeur que tu as ouvert, tu passes
la ligne de code suivante :
Wk.Close True 'True enregistre le fichier sans le demander
Tu peux aussi utiliser False si tu le désire.



"franck001" a écrit dans le message de groupe de
discussion :
Jolie solution aussi j'aime bien le screenupdating pour passer incognito.
Tu ne saurais pas comment faire pour fermer le
fichier ouvert si je fais un autre choix dans ma cellule par hasard ?

------(-_-)°zZz------
Franck
http://www.deschamps-web.com


"garnote" a écrit :

> Bonjour,
>
> Quelque chose du genre :
>
> 1) Dans un module standard du classeur fichier_exemple :
>
> Sub Ouvre()
> Dim nom As String
> On Error Resume Next
> Application.ScreenUpdating = False
> nom = [B1]
> Workbooks.Open Filename:= _
> "C:Documents and SettingsSergeMes documentsMaths" & nom
> Windows("fichier_exemple.xls").Activate
> Application.ScreenUpdating = True
> End Sub
>
> 2) Dans le module de la feuille contenant tes choix :
>
> Private Sub Worksheet_Change(ByVal Target As Range)
> If Target.Address = Range("B1").Address Then Call Ouvre
> End Sub
>
> Serge
>
>
>
>
> "franck001" a écrit dans le message de news:
>
> > Bonjour,
> >
> > voilà mon petit casse tête:
> > Le résultat d'une de mes cellules est une recherche verticale dans un
> > fichier excel autre, le problème est que pour effectuer ma recherche le dit
> > fichier doit être ouvert.
> > Jusque là pas de pb, mon problème se corse car j'aimerai ouvrir un fichier
> > source dépendant d'un choix fait dans une autre cellule.... un exemple sera
> > plus parlant:
> > Dans un fichier "fichier_exemple.xls":
> > Cellule A1 -> la valeur recherchée
> > Cellule B1 -> liste de choix: fichier1.xls, fichier2.xls, fichier3.xls
> > -> je choisis "fichier1.xls"
> > Cellule C1 -> RECHERCHEV($A$1;INDIRECT("["&B1&"]"&"Onglet1!$B$3:$I$55");3)
> >
> > Comment faire pour que, lors de mon choix de fichier en B1, ce dernier
> > s'ouvre en fond pour me permettre de faire ma recherche en C1 ensuite ou tout
> > autre solution identique ?
> >
> > Merci pour votre aide.
> >
> > ------(-_-)°zZz------
> > Franck
> > http://www.deschamps-web.com
>
>
>


Avatar
michdenis
Quand tu ouvres un classeur, c'est toujours lui qui est
ou devient le classeur actif et le fait de mettre
Application.ScreenUpdating = False n'y change rien.

Fait ce petit test

Dim Wk As Workbook, x As String
Application.ScreenUpdating = False
Set Wk = Workbooks.Open("c:userspoweruserCharset- stream.xls")
x = ActiveWorkbook.Name
Avatar
franck001
Merci pour vos aides effectivement ta méthode fonctionne bien.

Finalement j'ai opté pour une méthode encore plus simple dans mon cas:
'Fermeture des fichiers ouverts
For Each wbk In Application.Workbooks
If Left(wbk.Name, 15) = "FS_Nomenclature" Then wbk.Close
SaveChanges:=True 'ou False
Next


--
------(-_-)°zZz------
Franck
http://www.deschamps-web.com


"michdenis" a écrit :

Quand tu ouvres un classeur, c'est toujours lui qui est
ou devient le classeur actif et le fait de mettre
Application.ScreenUpdating = False n'y change rien.

Fait ce petit test

Dim Wk As Workbook, x As String
Application.ScreenUpdating = False
Set Wk = Workbooks.Open("c:userspoweruserCharset- stream.xls")
x = ActiveWorkbook.Name





Avatar
FFO
Rebonjour à toi

Si le fichier à refermer n'est pas celui actif mets ceci :
For i = 1 to Workbooks.Count
If Workbooks(i).Name Like "*Fichier*" then
Workbooks(i).Close SaveChanges:úlse
Exit For
End If
Next

Ce qui donne au final :

If Target.Address = Range("B3").Address Then
For i = 1 to Workbooks.Count
If Workbooks(i).Name Like "*Fichier*" then
Workbooks(i).Close SaveChanges:úlse
Exit For
End If
Next
Dim wbk As Workbook
Set wbk = Workbooks.Open(ActiveWorkbook.Path & "" & Target & ".XLS")
ThisWorkbook.Activate
End If

Fais des essais et dis moi !!!!
1 2