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

Signaler
Messages postés
9
Date d'inscription
lundi 3 novembre 2008
Statut
Membre
Dernière intervention
12 juin 2013
-
Messages postés
9
Date d'inscription
lundi 3 novembre 2008
Statut
Membre
Dernière intervention
12 juin 2013
-
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

5 réponses

Messages postés
9
Date d'inscription
lundi 3 novembre 2008
Statut
Membre
Dernière intervention
12 juin 2013

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é
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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
Messages postés
9
Date d'inscription
lundi 3 novembre 2008
Statut
Membre
Dernière intervention
12 juin 2013

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é
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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