BlanquerElie
Messages postés9Date d'inscriptionlundi 3 novembre 2008StatutMembreDernière intervention12 juin 2013
-
19 juil. 2012 à 18:04
BlanquerElie
Messages postés9Date d'inscriptionlundi 3 novembre 2008StatutMembreDernière intervention12 juin 2013
-
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 !
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 19 juil. 2012 à 18:36
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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 19 juil. 2012 à 18:44
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
BlanquerElie
Messages postés9Date d'inscriptionlundi 3 novembre 2008StatutMembreDernière intervention12 juin 2013 20 juil. 2012 à 11:41
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é
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 20 juil. 2012 à 11:55
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