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

utilisation de "GetOpenFilename"

10 réponses
Avatar
j-pascal
Bonjour,

J'ai un classeur A (ouvert) et je veux (en vba) récupérer toutes les données
de la feuille 1 afin de les copier dans la feuille "base" d'un classeur B,
lui même ouvert.
A noter que :
- le classeur A est soit *.csv soit *.xls
- je souhaite réaliser l'importation depuis le classeur B.
- je souhaite que la macro se lance via un Bouton qui une fois "pressé"
m'affiche tous les fichiers Excel et Texte (csv) ouverts et me permette de
sélectionner celui de mon choix ...
- etc.

J'ai trouvé un bout de code qui est peut-être une piste, mais c'est très
insuffisant ;-)

Merci d'avance pour vos lumières.

'---------------------------------------------------
Option Explicit

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "Texte (séparateur : point-virgule) (*.csv),*.csv," & _
"Fichiers Excel (*.xls), *.xls,"

filtreIndex = 5

Titre = "sélectionnez le fichier à importer"

nomFichier = Application.GetOpenFilename(typeFichier, _
filtreIndex, Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub
'---------------------------------------------------
--
Cordialement @+
JP

10 réponses

Avatar
Daniel
Bonsoir.
Teste :

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "( "" Fichiers texte (*.csv) *.txt, fichiers Excel (*.xls)
*.xls "" )"

Titre = "sélectionnez le fichier à importer"

nomFichier = Application.GetOpenFilename(typeFichier, _
, Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub

Cordialement.
Daniel
"j-pascal" a écrit dans le message de news:
%
Bonjour,

J'ai un classeur A (ouvert) et je veux (en vba) récupérer toutes les
données de la feuille 1 afin de les copier dans la feuille "base" d'un
classeur B, lui même ouvert.
A noter que :
- le classeur A est soit *.csv soit *.xls
- je souhaite réaliser l'importation depuis le classeur B.
- je souhaite que la macro se lance via un Bouton qui une fois "pressé"
m'affiche tous les fichiers Excel et Texte (csv) ouverts et me permette de
sélectionner celui de mon choix ...
- etc.

J'ai trouvé un bout de code qui est peut-être une piste, mais c'est très
insuffisant ;-)

Merci d'avance pour vos lumières.

'---------------------------------------------------
Option Explicit

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "Texte (séparateur : point-virgule) (*.csv),*.csv," & _
"Fichiers Excel (*.xls), *.xls,"

filtreIndex = 5

Titre = "sélectionnez le fichier à importer"

nomFichier = Application.GetOpenFilename(typeFichier, _
filtreIndex, Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub
'---------------------------------------------------
--
Cordialement @+
JP


Avatar
j-pascal
Bonjour,

Merci.

C'est étrange, quand je recopie le code, j'ai un message : erreur de
compilation, attendu: fin d'instruction. En fait, j'ai un " " " avant le
dernier *.xls, alors qu'il n'apparaît pas dans ton msg ! J'ai supprimé et ça
fonctionne ... Mystère ...

Si je comprends bien, la différence, c'est que dans la fenêtre "type de
fichier" les deux type .csv et xls apparaissent directement (sans passer par
le menu déroulant )...

- Est-il possible, dans la fenêtre qui s'ouvre, de n'afficher que les xls et
csv, sans les répertoires et autres fichiers ?
- Quelle action ce code a sur le fichier sélectionné ? Comment puis-je
sélectionner le contenu de la Feuil1 de ce dernier ?
- Je pense qu'il doit être possible d'accéder directement au Bureau plutôt
qu'à MesDocuments ?

@+ ?

JP




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

Bonsoir.
Teste :

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "( "" Fichiers texte (*.csv) *.txt, fichiers Excel (*.xls)
*.xls "" )"

Titre = "sélectionnez le fichier à importer"

nomFichier = Application.GetOpenFilename(typeFichier, _
, Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub

Cordialement.
Daniel
"j-pascal" a écrit dans le message de news:
%
Bonjour,

J'ai un classeur A (ouvert) et je veux (en vba) récupérer toutes les
données de la feuille 1 afin de les copier dans la feuille "base" d'un
classeur B, lui même ouvert.
A noter que :
- le classeur A est soit *.csv soit *.xls
- je souhaite réaliser l'importation depuis le classeur B.
- je souhaite que la macro se lance via un Bouton qui une fois "pressé"
m'affiche tous les fichiers Excel et Texte (csv) ouverts et me permette
de sélectionner celui de mon choix ...
- etc.

J'ai trouvé un bout de code qui est peut-être une piste, mais c'est très
insuffisant ;-)

Merci d'avance pour vos lumières.

'---------------------------------------------------
Option Explicit

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "Texte (séparateur : point-virgule) (*.csv),*.csv," & _
"Fichiers Excel (*.xls), *.xls,"

filtreIndex = 5

Titre = "sélectionnez le fichier à importer"

nomFichier = Application.GetOpenFilename(typeFichier, _
filtreIndex, Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub
'---------------------------------------------------
--
Cordialement @+
JP






Avatar
Daniel
Bonjour.
1. Rectificatif :

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "Fichiers, *.csv; *.xls"

Titre = "sélectionnez le fichier à importer"
nomFichier = Application.GetOpenFilename(typeFichier, , _
Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub

- Est-il possible, dans la fenêtre qui s'ouvre, de n'afficher que les xls
et csv, sans les répertoires et autres fichiers ?


2. Avec la macro ci-dessus, tu ne peux pas faire apparaître les autres types
de fichier.
Je ne pense pas que tu puisses supprimer le changement de répertoire sauf à
redévelopper une boite de dialogue personnalisée.


- Quelle action ce code a sur le fichier sélectionné ? Comment puis-je
sélectionner le contenu de la Feuil1 de ce dernier ?


3. Tu récupères dans "nomFichier" le nom du fichier sélectionné. Tu dois
l'ouvrir (workbooks.Open nomFichier) pour travailler avec.


- Je pense qu'il doit être possible d'accéder directement au Bureau plutôt
qu'à MesDocuments ?


4. Ajoute, avant la ligne :
nomFichier = Application.GetOpenFilename(typeFichier, , _
Titre)
les lignes :
ChDrive "C"
ChDir "C:Documents and SettingsAmélieBureau"

en codant le chemin de ton bureau.
Daniel

@+ ?

JP




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

Bonsoir.
Teste :

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "( "" Fichiers texte (*.csv) *.txt, fichiers Excel (*.xls)
*.xls "" )"

Titre = "sélectionnez le fichier à importer"

nomFichier = Application.GetOpenFilename(typeFichier, _
, Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub

Cordialement.
Daniel
"j-pascal" a écrit dans le message de news:
%
Bonjour,

J'ai un classeur A (ouvert) et je veux (en vba) récupérer toutes les
données de la feuille 1 afin de les copier dans la feuille "base" d'un
classeur B, lui même ouvert.
A noter que :
- le classeur A est soit *.csv soit *.xls
- je souhaite réaliser l'importation depuis le classeur B.
- je souhaite que la macro se lance via un Bouton qui une fois "pressé"
m'affiche tous les fichiers Excel et Texte (csv) ouverts et me permette
de sélectionner celui de mon choix ...
- etc.

J'ai trouvé un bout de code qui est peut-être une piste, mais c'est très
insuffisant ;-)

Merci d'avance pour vos lumières.

'---------------------------------------------------
Option Explicit

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "Texte (séparateur : point-virgule) (*.csv),*.csv," & _
"Fichiers Excel (*.xls), *.xls,"

filtreIndex = 5

Titre = "sélectionnez le fichier à importer"

nomFichier = Application.GetOpenFilename(typeFichier, _
filtreIndex, Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub
'---------------------------------------------------
--
Cordialement @+
JP









Avatar
j-pascal
Re,

Merci, c'est génial !

- Pourquoi : MsgBox "Vous avez sélectionné le fichier : " & nomFichier
m'affiche le nom de fichier avec le chemin ? Est-il possible d'avoir
uniquement le nom du fichier ?

- Effectivement, je n'ai que les fichiers .csv et .xls et j'imagine qu'il
n'était pas possible de ne pas voir les raccourcis et les répertoires ...

- L'ouverture de monFichier par : workbooks.Open nomFichier, c'est parfait,
je vais pouvoir exporter son contenu vers mon classeur initial.

Vraiment, merci :-)

JP

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

Bonjour.
1. Rectificatif :

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "Fichiers, *.csv; *.xls"

Titre = "sélectionnez le fichier à importer"
nomFichier = Application.GetOpenFilename(typeFichier, , _
Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub

- Est-il possible, dans la fenêtre qui s'ouvre, de n'afficher que les xls
et csv, sans les répertoires et autres fichiers ?


2. Avec la macro ci-dessus, tu ne peux pas faire apparaître les autres
types de fichier.
Je ne pense pas que tu puisses supprimer le changement de répertoire sauf
à redévelopper une boite de dialogue personnalisée.


- Quelle action ce code a sur le fichier sélectionné ? Comment puis-je
sélectionner le contenu de la Feuil1 de ce dernier ?


3. Tu récupères dans "nomFichier" le nom du fichier sélectionné. Tu dois
l'ouvrir (workbooks.Open nomFichier) pour travailler avec.


- Je pense qu'il doit être possible d'accéder directement au Bureau plutôt
qu'à MesDocuments ?


4. Ajoute, avant la ligne :
nomFichier = Application.GetOpenFilename(typeFichier, , _
Titre)
les lignes :
ChDrive "C"
ChDir "C:Documents and SettingsAmélieBureau"

en codant le chemin de ton bureau.
Daniel

@+ ?

JP




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

Bonsoir.
Teste :

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "( "" Fichiers texte (*.csv) *.txt, fichiers Excel (*.xls)
*.xls "" )"

Titre = "sélectionnez le fichier à importer"

nomFichier = Application.GetOpenFilename(typeFichier, _
, Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub

Cordialement.
Daniel
"j-pascal" a écrit dans le message de news:
%
Bonjour,

J'ai un classeur A (ouvert) et je veux (en vba) récupérer toutes les
données de la feuille 1 afin de les copier dans la feuille "base" d'un
classeur B, lui même ouvert.
A noter que :
- le classeur A est soit *.csv soit *.xls
- je souhaite réaliser l'importation depuis le classeur B.
- je souhaite que la macro se lance via un Bouton qui une fois "pressé"
m'affiche tous les fichiers Excel et Texte (csv) ouverts et me permette
de sélectionner celui de mon choix ...
- etc.

J'ai trouvé un bout de code qui est peut-être une piste, mais c'est
très insuffisant ;-)

Merci d'avance pour vos lumières.

'---------------------------------------------------
Option Explicit

Sub RécupNomFichier()
Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "Texte (séparateur : point-virgule) (*.csv),*.csv," & _
"Fichiers Excel (*.xls), *.xls,"

filtreIndex = 5

Titre = "sélectionnez le fichier à importer"

nomFichier = Application.GetOpenFilename(typeFichier, _
filtreIndex, Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If

End Sub
'---------------------------------------------------
--
Cordialement @+
JP













Avatar
Daniel
- Pourquoi : MsgBox "Vous avez sélectionné le fichier : " & nomFichier
m'affiche le nom de fichier avec le chemin ? Est-il possible d'avoir
uniquement le nom du fichier ?



Ajoute l'instruction :
nomFichier = Dir(nomFichier)
avant :
MsgBox "Vous avez sélectionné le fichier : " & nomFichier

- Effectivement, je n'ai que les fichiers .csv et .xls et j'imagine qu'il
n'était pas possible de ne pas voir les raccourcis et les répertoires ...



A ma connaissance, non, ça fonctionne comme la fenêtre d'ouverture d'Excel.

Daniel

Avatar
j-pascal
Re,,

Merci, cela fonctionne parfaitement.

Si le nom du classeur que je suis allé récupérer avec cette macro est
"nomFichier" (sur le bureau c'est Toto.xls), pourquoi ne puis-je pas le
récupérer pour le fermer et revenir sur le classeur d'où je lance la macro ?

Ca bugue entre Msgbox 1 et Msgbox 2 ...

@+ ?

JP

---------------------------------------------
Sub RécupNomFichier3()

Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "Fichiers, *.csv; *.xls"

Titre = "sélectionnez le fichier à importer"

ChDrive "C"
ChDir "C:Documents and Settingsjean-pascalBureau"

nomFichier = Application.GetOpenFilename(typeFichier, , Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
nomFichier = Dir(nomFichier)
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If
Workbooks.Open nomFichier

Cells.Select
Selection.Copy
Windows("essai getOpen.xls").Activate
Sheets("base").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
MsgBox 1
Windows("nomFichier.xls").Activate
MsgBox 2
ActiveWorkbook.Close
End Sub
------------------------------------------------------------
"Daniel" a écrit dans le message de news:

- Pourquoi : MsgBox "Vous avez sélectionné le fichier : " & nomFichier
m'affiche le nom de fichier avec le chemin ? Est-il possible d'avoir
uniquement le nom du fichier ?



Ajoute l'instruction :
nomFichier = Dir(nomFichier)
avant :
MsgBox "Vous avez sélectionné le fichier : " & nomFichier

- Effectivement, je n'ai que les fichiers .csv et .xls et j'imagine qu'il
n'était pas possible de ne pas voir les raccourcis et les répertoires ...



A ma connaissance, non, ça fonctionne comme la fenêtre d'ouverture
d'Excel.

Daniel




Avatar
Daniel
Windows(nomFichier).Activate
et non pas :
Windows("nomFichier.xls").Activate
Daniel
"j-pascal" a écrit dans le message de news:

Re,,

Merci, cela fonctionne parfaitement.

Si le nom du classeur que je suis allé récupérer avec cette macro est
"nomFichier" (sur le bureau c'est Toto.xls), pourquoi ne puis-je pas le
récupérer pour le fermer et revenir sur le classeur d'où je lance la macro
?

Ca bugue entre Msgbox 1 et Msgbox 2 ...

@+ ?

JP

---------------------------------------------
Sub RécupNomFichier3()

Dim typeFichier As String
Dim filtreIndex As Integer
Dim Titre As String
Dim nomFichier As Variant

typeFichier = "Fichiers, *.csv; *.xls"

Titre = "sélectionnez le fichier à importer"

ChDrive "C"
ChDir "C:Documents and Settingsjean-pascalBureau"

nomFichier = Application.GetOpenFilename(typeFichier, , Titre)

If nomFichier = False Then
MsgBox "Aucun fichier n'a été sélectionné."
Else
nomFichier = Dir(nomFichier)
MsgBox "Vous avez sélectionné le fichier : " & nomFichier
End If
Workbooks.Open nomFichier

Cells.Select
Selection.Copy
Windows("essai getOpen.xls").Activate
Sheets("base").Select
Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
MsgBox 1
Windows("nomFichier.xls").Activate
MsgBox 2
ActiveWorkbook.Close
End Sub
------------------------------------------------------------
"Daniel" a écrit dans le message de news:

- Pourquoi : MsgBox "Vous avez sélectionné le fichier : " & nomFichier
m'affiche le nom de fichier avec le chemin ? Est-il possible d'avoir
uniquement le nom du fichier ?



Ajoute l'instruction :
nomFichier = Dir(nomFichier)
avant :
MsgBox "Vous avez sélectionné le fichier : " & nomFichier

- Effectivement, je n'ai que les fichiers .csv et .xls et j'imagine
qu'il n'était pas possible de ne pas voir les raccourcis et les
répertoires ...



A ma connaissance, non, ça fonctionne comme la fenêtre d'ouverture
d'Excel.

Daniel







Avatar
j-pascal
Re,

Merci beaucoup ... tout marche parfaitement ... et même au délà de mes
espérances !!!

Windows(nomFichier).Activate
et non pas :
Windows("nomFichier.xls").Activate


Je suis un peu curieux ... Pourquoi y-a-t-il des " " pour activer le
classeur qui suit ?

Windows("essai getOpen.xls").Activate

Pourquoi ne peut-on pas activer "nomFichier" avec la même syntaxe ??

@+ ?

JP

Avatar
Daniel
Ce sont deux choses :
Dans le cas de nomFichier, tu fais référence à une variable et VBA remplace
nomFichier par sa valeur (toto.xls). Dans le second tu fournis le nom du
fichier entre guillemets. Ce qui est enttre guillemets est considéré comme
du texte. Si tu mets "nomFichier.xls", VBA va chercher un classeur dont le
nom est nomFichier.xls. Si tu mets simplement nomFichier, VBA cherchera la
valeur de la variable.
J'espère avoir été clair...
Daniel
"j-pascal" a écrit dans le message de news:

Re,

Merci beaucoup ... tout marche parfaitement ... et même au délà de mes
espérances !!!

Windows(nomFichier).Activate
et non pas :
Windows("nomFichier.xls").Activate


Je suis un peu curieux ... Pourquoi y-a-t-il des " " pour activer le
classeur qui suit ?

Windows("essai getOpen.xls").Activate

Pourquoi ne peut-on pas activer "nomFichier" avec la même syntaxe ??

@+ ?

JP





Avatar
j-pascal
Très clair, merci beaucoup !

A bientôt,

JP

PS : merci pour l'aide précieuse que tu m'a apportée pour ce sujet. Je sais
d'ores est déjà que c'est un code que j'utiliserai (assez) souvent pour
d'autres applications.


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

Ce sont deux choses :
Dans le cas de nomFichier, tu fais référence à une variable et VBA
remplace nomFichier par sa valeur (toto.xls). Dans le second tu fournis le
nom du fichier entre guillemets. Ce qui est enttre guillemets est
considéré comme du texte. Si tu mets "nomFichier.xls", VBA va chercher un
classeur dont le nom est nomFichier.xls. Si tu mets simplement nomFichier,
VBA cherchera la valeur de la variable.
J'espère avoir été clair...
Daniel
"j-pascal" a écrit dans le message de news:

Re,

Merci beaucoup ... tout marche parfaitement ... et même au délà de mes
espérances !!!

Windows(nomFichier).Activate
et non pas :
Windows("nomFichier.xls").Activate


Je suis un peu curieux ... Pourquoi y-a-t-il des " " pour activer le
classeur qui suit ?

Windows("essai getOpen.xls").Activate

Pourquoi ne peut-on pas activer "nomFichier" avec la même syntaxe ??

@+ ?

JP