VBA pour Excel - Boîte de dialogue "Ouvrir" avec fichier par défaut [Résolu]

BlanquerElie 9 Messages postés lundi 3 novembre 2008Date d'inscription 12 juin 2013 Dernière intervention - 19 juil. 2012 à 18:04 - Dernière réponse : BlanquerElie 9 Messages postés lundi 3 novembre 2008Date d'inscription 12 juin 2013 Dernière intervention
- 20 juil. 2012 à 12:12
Bonjour à tous.

Je travaille avec Excel 2003

J'écris une routine qui va analyser des extractions
d'une base de données.
Cette routine sera à l'usage d'utilisateurs différents.

Un répertoire inconnu de moi et propre à chaque utilisateur contiendra
- le "Fichier Pilote" porteur de la routine ;
- le ou les fichiers "Extraction" et le fichier "Données analysées".

Le fichier "Extraction » s'appellera le plus souvent
"et0076900001.xls", mais pourra être nommé différement.

L'étape qui me pose problème consiste à
afficher une boîte de dialogue "Ouvrir"
dans le bon répertoire
en proposant par défaut d'ouvrir le fichier "et0076900001.xls",
l'utilisateur restant libre de choisir un autre fichier.

Le repérage du répertoire de travail ne pose pas de problème,
c'est celui du Fichier Pilote.
Le code suivant permet sa sélection :

ChDrive "P:"
ChDir ThisWorkbook.Path

Je pensais ouvrir la boîte de dialogue avec le code suivant :

Dim NomFichier As String
With Application.FileDialog(msoFileDialogFilePicker)
.Filters.Clear
.Filters.Add "Fichiers Excel", "*.xls"
.Title = "Ouvrir"
.InitialFileName = "et0076900001.xls"
End With
If FichierDialogue.Show = -1 Then _
NomFichier = FichierDialogue.SelectedItems(1)

Mais le résultat est décevant :

- la boîte de dialogue s'ouvre dans le bon répertoire ;
- la zone "Nom de Fichier" contient bien le nom du fichier par défaut ;
- le filtre n'a pas fonctionné
et semble posé pour tous les fichiers (".")
et non pour tous les fichiers .xls ;
- la zone d'affichage ne donne que les fichiers dont le nom contient
la chaîne "et0076900001" ;
pour être clair :
"et0076900002.xls" n'apparaît pas,
"et0076900001 EFFACER.xls" apparaît.

J'ai fouillé le Ouaibe et plusieurs forums internet.
Le code ne semble pas erroné.

Si vous pouviez répondre à deux questions :

1) Pourquoi le code "With [..] End With",
que je crois comprendre,
ne fait pas ce que j'attends de lui ?
Comment le corriger ?

2) Que fait exactement le code "If [?] Items(1)"
Je vois bien que c'est lui qui ouvre le boîte
mais je ne comprends pas la syntaxe !

En tout cas, merci d'avance de l'aide que vous pourrez m?apporter.

PS :
J'espère avoir choisi le bon thème !

PPS :
Dommage que l'aperçu ne conserve aps la mise en page.
J'espère quelle sera conservée dans l'appel à l'aide !

Cordialement
André Blanquer
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
BlanquerElie 9 Messages postés lundi 3 novembre 2008Date d'inscription 12 juin 2013 Dernière intervention - 20 juil. 2012 à 12:12
3
Merci
Merci,UCpasfoutuedutout.

J'avais pas mal cheché sur le Ouaibe,
et sur l'aide... mais sur mon PC professionnel,
l'aide offre de nombreux articles... vides !

L'article With n'est pas vide,
mais je ne vois pas bien le rapport
avec mes démêlés avec FileDialog.

Pas grave : ton assistance été largemement efficace,
et je t'en ai beaucoup de reconnaissance.

Bonne chance avec ton béton,
André

Merci BlanquerElie 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de BlanquerElie
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 juil. 2012 à 18:36
0
Merci
Bonjour,

Je ne sais pas ce que tu as "derrière" que tu ne nous montres pas, notamment
où et comment tu as déclaré FichierDialogue !

Si tu veux afficher tous les fichiers d'extension .xls, ce n'est pas un fichier, que tu dois mettre dans initialfilename, mais un chemin complet de dossier
Dim NomFichier As String
  With Application.FileDialog(msoFileDialogFilePicker)
    .Filters.Clear
    .Filters.Add "Fichiers Excel", "*.xls"
    .Title = "Ouvrir"
    .InitialFileName = "D:\ANDRECOURBE" '====>> ici : un dossier, pas un ficfhier
    .Show
    If .Show = -1 Then
      NomFichier = .SelectedItems(1)
      MsgBox NomFichier
    End If
  End With

Tu ne peux à la fois forcer un fichier et les avoir tous affichés.




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 juil. 2012 à 18:44
0
Merci
Et (je n'avais pas vu cela, en plus) ce n'est pas :
If .Show = -1 Then
NomFichier = .SelectedItems(1)
MsgBox NomFichier
End If

mais :

If .SelectedItems.Count > 0 Then
NomFichier = .SelectedItems(1)
MsgBox NomFichier
End If



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu
BlanquerElie 9 Messages postés lundi 3 novembre 2008Date d'inscription 12 juin 2013 Dernière intervention - 20 juil. 2012 à 11:41
0
Merci
Bonjour, et merci de cette réponse hyperrapide.


Je croyais avoir été complet, désolé.
Je tâcherai de faire mieux la prochaine fois.


Question A : Pourquoi le code "With [..] End With"?

Mon code ne correspond donc pas à mon besoin,
qui était d'afficher une boîte "Ouvrir" classique,
listant les fichiers Excel du répertoire,
et proposant par défaut "et0076900001.xls"
dans la zone "Nom de Fichier".

Je suppose donc que la bonne méthode consiste à coder un branchement :
1 - vérifier si le fichier "et0076900001.xls"
est présent dans le répertoire
et en proposer l'ouverture à l'utilisateur ;
2 - si il accepte, charger le fichier
si il refuse, proposer la boîte de dialogue "Ouvrir »
A moins bien sûr qu'il y ait un moyen plus élégant.

Pour ma bonne compréhension de
Application.FileDialog(msoFileDialogFilePicker) :
1 - ".InitialFileName = "Chaine"" permet
de choisir un répertoire autre que le répertoire courant
et de proposer soit
a) les fichiers qu'il contient,
b) les fichiers dont le nom contient "Chaine" ;
2 - ".Filters.Add", pose un filtre sur les noms de fichiers,
utile uniquement dans le cas 1 - a.



Question B : Que fait exactement le code "If [?] Items(1)"...

Continuant à chercher sur le Ouaibe
après avoir sollicité l'aide du forum,
je crois avoir mieux compris le fonctionnement des boîtes de dialogue :
1 - cliquer sur "Ouvrir" renvoie la valeur "-1",
cliquer sur "Annuler" renvoie la valeur "0" ;
2 - il faut ensuite coder la réaction d'Excel suivant la valeur renvoyée,
ce que mon code ne faisait pas !

Un "mon code" un peu meilleur eut été :
If FichierDialogue.Show = -1 Then
NomFichier = FichierDialogue.SelectedItems(1)
Workbooks.Open Filename:=NomFichier
End If
Code que je comprends et qui, dans le cas où je suis, fonctionne?

Pourtant tu préconises de remplacer
If FichierDialogue.Show = -1 Then
par
If .SelectedItems.Count > 0 Then
Est-ce pour fonctionner dans le cas d'une sélection multiple ?
Ou y-a-t-il une autre raison ?


Merci encore
Cordialement
André
Commenter la réponse de BlanquerElie
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 20 juil. 2012 à 11:55
0
Merci
Pas le temps (j'ai des travaux en cours) de faire ici un cours .
- Ouvre ton aide sur le mot With ! Et lis donc ce que c'est, hein !
- j'insiste sur le fait qu'il faut utiliser SelectedItems.Count > 0 et non FichierDialogue.Show = -1 (c'est tellement évident . Et ce : quel que soit le nombre sélectionné). Mais là également : ouvre donc ton aide VBA (elle ne mord personne).
Je retourne à mon ciment (il est plus logique, lui).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.