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

10 réponses

1 2
Avatar
FFO
Salut franck
Si dans ta liste en B1 il peux y avoir en plus du fichier son adresse ainsi :
C:CheminFichier1.xls
Tu peux mettre dans le VBA de la feuille ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B1").Address Then
Workbooks.Open (Target)
End If
End Sub

Si le chemin du répertoire des fichiers est identique pour tous ces fichiers
tu peux mettre ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B1").Address Then
Workbooks.Open ("Le chemin" & Target)
End If
End Sub

Si les fichiers à choisir sont dans le même répertoire que le classeurou
l'on opère le choix tu peux mettre ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B1").Address Then
Workbooks.Open (ThisWorkbook.Path & Target)
End If
End Sub

Quelque soit la configuration le chemin est indispensable pour l'ouverture
des fichiers sélectionner

A toi de nous dire
Avatar
garnote
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
franck001
Hé bien que dire...c'est parfait merci beaucoup, voilà mon code final:
"Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = Range("B3").Address Then
Dim wbk As Workbook
Set wbk = Workbooks.Open(ActiveWorkbook.Path & "" & Target & ".XLS")
ThisWorkbook.Activate
End If

End Sub"

Tant que j'y suis à abuser, tu ne saurais pas comment faire pour fermer le
fichier ouvert si je fais un autre choix dans ma cellule par hasard ?

Encor emerci de ton aide

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


"FFO" a écrit :

Salut franck
Si dans ta liste en B1 il peux y avoir en plus du fichier son adresse ainsi :
C:CheminFichier1.xls
Tu peux mettre dans le VBA de la feuille ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B1").Address Then
Workbooks.Open (Target)
End If
End Sub

Si le chemin du répertoire des fichiers est identique pour tous ces fichiers
tu peux mettre ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B1").Address Then
Workbooks.Open ("Le chemin" & Target)
End If
End Sub

Si les fichiers à choisir sont dans le même répertoire que le classeurou
l'on opère le choix tu peux mettre ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B1").Address Then
Workbooks.Open (ThisWorkbook.Path & Target)
End If
End Sub

Quelque soit la configuration le chemin est indispensable pour l'ouverture
des fichiers sélectionner

A toi de nous dire



Avatar
franck001
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
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
garnote
Bonjour,

Au Québec, ça fonctionne ;-)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B3").Address Then Call Ouvre
End Sub


Sub Ouvre()
Static nom As String
Dim rep As String
Dim ici As String
ici = ActiveWorkbook.Name
rep = "C:Documents and SettingsSergeMes documentsMaths"
Application.ScreenUpdating = False
On Error Resume Next
Workbooks(nom).Close
nom = [B3]
Workbooks.Open rep & nom
Workbooks(ici).Activate
Application.ScreenUpdating = True
End Sub


Serge


"franck001" a écrit dans le message de news:

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
FFO
Rebonjour à toi
Pour refermer le fichier ouvert suite à un autre choix
Tu peux inclure ce bout de code :

If ActiveWorkbook.Name Like "*Fichier*" then
ActiveWorkbook.Close SaveChange:úlse
End If

Dans ces instructions j'analyse le document actif pour détecter si il fait
parti de la liste me basant sur son nom dans lequel le mot Fichier est
présent :

If ActiveWorkbook.Name Like "*Fichier*" then

si c'est le cas je ferme le classeur Active sans enregistrer les
modifications :

ActiveWorkbook.Close SaveChange:úlse

Si tu veux enregistrer les modifications il faut plutôt mettre :

ActiveWorkbook.Close SaveChange:=True

Si les noms de ta liste ne contiennent pas obligatoirement "Fichier" il faut
modifier la condition ainsi :

If ActiveWorkbook.Name Like "*Nom1*" or ActiveWorkbook.Name Like "*Nom2*"
or ActiveWorkbook.Name Like "*Nom3*" etc..... then

Qui veut dire si le nom du classeur actif contient "Nom1" ou "Nom2" Ou
"Nom3" etc....

Il est possible aussi à l'ouverture de tes fichiers d'enregistrer leur nom
dans une cellule ("A1" par exemple) et d'aller récupérer ce nom dans cette
cellule à la fermeture ainsi :

If ActiveWorkbook.Name Like "*" & Range("A1") & "*" then
ActiveWorkbook.Close SaveChange:úlse
End If

Ce qui donne le code d'ouverture et de fermeture final avec l'enregistrement
du nom en cellule A1 :

If Target.Address = Range("B3").Address Then
If ActiveWorkbook.Name Like "*" & Range("A1") & "*" then
ActiveWorkbook.Close SaveChange:úlse
End If
Dim wbk As Workbook
Set wbk = Workbooks.Open(ActiveWorkbook.Path & "" & Target & ".XLS")
ThisWorkbook.Activate
Range("A1") = Target
End If

Sans enregistrement du nom en cellule A1 :

If Target.Address = Range("B3").Address Then
If ActiveWorkbook.Name Like "*Fichier*" then
ActiveWorkbook.Close SaveChange:úlse
End If
Dim wbk As Workbook
Set wbk = Workbooks.Open(ActiveWorkbook.Path & "" & Target & ".XLS")
ThisWorkbook.Activate
Range("A1") = Target
End If


A toi d'adapter tout celà à tes contraintes

Donnes moi des nouvelles !!!!!
Avatar
garnote
Viens de réessayer ma macro et ça bogue sur
Workbooks(ici).Activate

Pourtant ça fonctionnait plus tôt *&?%(?
Moi pas comprendre !
Vous avez une explication ?

Serge



"garnote" a écrit dans le message de news:
Bonjour,

Au Québec, ça fonctionne ;-)

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("B3").Address Then Call Ouvre
End Sub


Sub Ouvre()
Static nom As String
Dim rep As String
Dim ici As String
ici = ActiveWorkbook.Name
rep = "C:Documents and SettingsSergeMes documentsMaths"
Application.ScreenUpdating = False
On Error Resume Next
Workbooks(nom).Close
nom = [B3]
Workbooks.Open rep & nom
Workbooks(ici).Activate
Application.ScreenUpdating = True
End Sub


Serge


"franck001" a écrit dans le message de news:

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
franck001
C'est pas mal ta solution mais mon activeworkbook n'est pas celui que
j'aimerai fermé étant donné qu'il est en "fond", ya t'il possibilité de
regarder le nom de tous les fichiers ouverts et pas uniquement l'actif ?
Sinon c'est parfait mes fichiers ouvert pas la macro du début ont tous les
même début de nom .

Mercid 'avance

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


"FFO" a écrit :

Rebonjour à toi
Pour refermer le fichier ouvert suite à un autre choix
Tu peux inclure ce bout de code :

If ActiveWorkbook.Name Like "*Fichier*" then
ActiveWorkbook.Close SaveChange:úlse
End If

Dans ces instructions j'analyse le document actif pour détecter si il fait
parti de la liste me basant sur son nom dans lequel le mot Fichier est
présent :

If ActiveWorkbook.Name Like "*Fichier*" then

si c'est le cas je ferme le classeur Active sans enregistrer les
modifications :

ActiveWorkbook.Close SaveChange:úlse

Si tu veux enregistrer les modifications il faut plutôt mettre :

ActiveWorkbook.Close SaveChange:=True

Si les noms de ta liste ne contiennent pas obligatoirement "Fichier" il faut
modifier la condition ainsi :

If ActiveWorkbook.Name Like "*Nom1*" or ActiveWorkbook.Name Like "*Nom2*"
or ActiveWorkbook.Name Like "*Nom3*" etc..... then

Qui veut dire si le nom du classeur actif contient "Nom1" ou "Nom2" Ou
"Nom3" etc....

Il est possible aussi à l'ouverture de tes fichiers d'enregistrer leur nom
dans une cellule ("A1" par exemple) et d'aller récupérer ce nom dans cette
cellule à la fermeture ainsi :

If ActiveWorkbook.Name Like "*" & Range("A1") & "*" then
ActiveWorkbook.Close SaveChange:úlse
End If

Ce qui donne le code d'ouverture et de fermeture final avec l'enregistrement
du nom en cellule A1 :

If Target.Address = Range("B3").Address Then
If ActiveWorkbook.Name Like "*" & Range("A1") & "*" then
ActiveWorkbook.Close SaveChange:úlse
End If
Dim wbk As Workbook
Set wbk = Workbooks.Open(ActiveWorkbook.Path & "" & Target & ".XLS")
ThisWorkbook.Activate
Range("A1") = Target
End If

Sans enregistrement du nom en cellule A1 :

If Target.Address = Range("B3").Address Then
If ActiveWorkbook.Name Like "*Fichier*" then
ActiveWorkbook.Close SaveChange:úlse
End If
Dim wbk As Workbook
Set wbk = Workbooks.Open(ActiveWorkbook.Path & "" & Target & ".XLS")
ThisWorkbook.Activate
Range("A1") = Target
End If


A toi d'adapter tout celà à tes contraintes

Donnes moi des nouvelles !!!!!



Avatar
franck001
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
>
>
>


1 2