Fonction Recherche dans un fichier fonction d'un choix
14 réponses
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 ?
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"
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 ?
> 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 > > >
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" <franck001@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : B5D6BE43-A4A4-48E6-9D52-FC1CAFE9704B@microsoft.com...
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"
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" <franck001@discussions.microsoft.com> a écrit dans le message de groupe de
discussion : 121F571F-82E1-4E83-A5E4-A2C1F0B287CC@microsoft.com...
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 ?
> 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" <franck001@discussions.microsoft.com> a écrit dans le message de news:
> 8587BD6A-5B55-4F15-B0EB-19D1896C9EFC@microsoft.com...
> > 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
>
>
>
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"
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 ?
> 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 > > >
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
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
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
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
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
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
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
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
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
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 !!!!
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
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