![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) |
|
Invité régulier
![]() Date d'inscription: octobre 2008
Messages: 11
|
Bonjour,
J'ai fais un bouton Parcourir afin de choisir un dossier (et non un fichier), et j'aimerai récupérer le chemin de ce dossier et de le mettre dans une variable que je réutiliserai ensuite. J'ai vu beaucoup d'infos sur comment choisir un fichier comme : Code :
Dim QuelFichier QuelFichier = Application.GetOpenFilename(, , "Choisir un fichier") Merci d'avance pour vos réponses. |
|
|
|
|
|
#2 (permalink) |
![]() Date d'inscription: février 2004
Localisation: Rimouski
Messages: 3 067
|
Il y a une rubrique dans la FAQ VB6 dont, je crois bien, le code proposé sera utilisable aussi en VBA.
Comment ouvrir une fenêtre de sélection de répertoire ? S'il y a un problème, tu dis.
__________________
|
|
|
|
|
|
#3 (permalink) |
|
Invité régulier
![]() Date d'inscription: octobre 2008
Messages: 11
|
Peut etre qu'il faut l'adapter ... Je suis néophyte dans ce domaine.
Ce que j'ai fait, j'ai copié le 1er code dans un module Mais il me donne cette erreur: "Erreur de compilation: Seuls des commentaires peuvent apparaître après End Sub, End Function, ou End Property" Il surligne: Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long N'y a t-il pas une méthode VBA ? |
|
|
|
|
|
#4 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 109
|
Ce qui veut dire que tu as placé la déclaration dans une procédure, ou après une procédure, ce qu'il ne faut pas faire !
Les déclarations et les constantes doivent être placées tout en haut de ta page de code, AVANT toute procédure...
__________________
Deux points essentiels à mes yeux : 1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion. 2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère). 3) ATTENTION : si je reçois un MP relatif à une question technique sans mon consentement ou mon invite à le faire ===>> a) je n'y réponds pas et b) je fais en sorte que l'expéditeur ne puisse plus m'adresser de MP |
|
|
|
|
|
#5 (permalink) |
|
Invité régulier
![]() Date d'inscription: octobre 2008
Messages: 11
|
Bonjour.
J'ai bien reçu le message, merci. Par contre, a force de chercher, pour ceux que ça intéresse j'ai trouvé la méthode: Hop, on fait un bouton Parcourir, dans la Feuil1, on lui donne: Sub Parcourir() GetDirectory End Sub GetDirectory se chargera de récup le dossier: Dans le module: Code :
Public Type BROWSEINFO hOwner As Long pidlRoot As Long pszDisplayName As String lpszTitle As String ulFlags As Long lpfn As Long lParam As Long iImage As Long End Type '32-bit API declarations Declare Function SHGetPathFromIDList Lib "shell32.dll" _ Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long Declare Function SHBrowseForFolder Lib "shell32.dll" _ Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long Public Dossier Function GetDirectory(Optional Msg) As String Dim bInfo As BROWSEINFO Dim path As String Dim r As Long, X As Long, pos As Integer bInfo.pidlRoot = 0& If IsMissing(Msg) Then bInfo.lpszTitle = "Choisissez un dossier de destination pour les sauvegardes." Else bInfo.lpszTitle = Msg End If bInfo.ulFlags = &H1 X = SHBrowseForFolder(bInfo) path = Space$(512) r = SHGetPathFromIDList(ByVal X, ByVal path) If r Then pos = InStr(path, Chr$(0)) GetDirectory = Left(path, pos - 1) Dossier = GetDirectory & "\" Else GetDirectory = "" End If End Function Cependant, maintenant que j'ai stocké le chemin dans la variable "Dossier". Je ne parviens pas a l'utiliser correctement. Exemple: .Range("C11").Formula = "='C:\Divers\excel\[" & Tableau(X) & "]Feuil1" & "'!" & "K78" Dans ce code, grâce au tableau (ou sont stockés tous les fichiers Excel), il va récupérer la cellule K78 de tous ces fichiers et les placer dans C11. Cependant, l'interet d'avoir fait un bouton Parcourir est justement d'avoir fait en sorte que C:\Divers\excel\ ne soit pas en dur dans le code. A la place, je souhaiterai mettre la variable "Dossier" mais syntaxiquement je n'y parviens pas ... Comment faire ? Merci d'avance |
|
|
|
|
|
#6 (permalink) |
![]() Date d'inscription: août 2005
Messages: 3 113
|
bonsoir
Tu peux tester cette autre version : Code :
Dim objShell As Object, objFolder As Object Dim oFolderItem As Object Dim Chemin As String Dim Tableau(1 To 1) As String Tableau(1) = "ClasseurFerme.xls" Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder(&H0&, _ "Choisir un répertoire", &H1&) If objFolder Is Nothing Then Exit Sub Set oFolderItem = objFolder.Items.Item Chemin = oFolderItem.Path If Len(Chemin) = 3 Then Chemin = Left(Chemin, 2) If Dir(Chemin & "\" & Tableau(1)) = "" Then Exit Sub Range("C11").Formula = "='" & Chemin & _ "\[" & Tableau(1) & "]Feuil1'!K78" bonne soirée michel |
|
|
|
|
|
#7 (permalink) |
|
Inscrit(e)
Date d'inscription: juillet 2007
Localisation: au pays de la liberté d'esprit
Messages: 3 109
|
Bonsoir,
je me demande pourquoi l'on boude VB ... Dir associé à un TreeView fait pourtant très joliment l'affaire, non ? Edit : Ainsi, par exemple : Un userform, un Treeview Treeview1, un bouton de commande Command1 Code : Code :
Option Explicit Dim tvn As Node Private Sub Command1_Click() Dim monrep As String TreeView1.Nodes.Clear monrep = "d:\monoutil\" ' on définit ici le répertoire à "déployer" If Right$(monrep, 1) <> "\" Then monrep = monrep$ + "\" Set tvn = TreeView1.Nodes.Add(, vbNullString, monrep, monrep) deployons monrep End Sub Sub deployons(ByVal chemin As String) Dim nomfic As String, numfic As Integer, tp As String, i As Integer If Right$(chemin, 1) <> "\" Then chemin = chemin & "\" nomfic = Dir$(chemin, vbDirectory) numfic = 1 Do While nomfic <> "" If nomfic <> "." And nomfic <> ".." Then tp = chemin & nomfic If GetAttr(tp) And vbDirectory Then Set tvn = TreeView1.Nodes.Add(chemin, tvwChild, tp + "\", nomfic) deployons tp nomfic = Dir$(chemin, vbDirectory) For i = 2 To numfic nomfic = Dir$ Next End If End If nomfic = Dir$: numfic = numfic + 1 Loop End Sub Private Sub TreeView1_DblClick() MsgBox TreeView1.SelectedItem.FullPath End Sub Un double clixk sur un item de son choix ... on voit... EDIT : L'intérêt d'une telle méthode est (je viens de la compléter chez moi dans ce sens) que l'on peut choisir ce que l'on va afficher : - tout (dossiers et fichiers) - uniquement les dossiers - uniquement les fichiers avec (cerise sur le gâteau) : - un filtre pour les noms de dossiers - un filtre pour les noms de fichier (on peut donc de cette manière, par exemple, n'afficher que les dossiers contenant la chaîne "RA" et leurs fichiers en extension "txt" (tout le reste étant donc occulté).
__________________
Deux points essentiels à mes yeux : 1) Je ne regarde ni n'analyse aucun fichier joint, mais uniquement les portions de code incluses et donc affichées et commentées dans une discussion. 2) j'abandonne carrément (et sans appel) ma participation à une discussion dès lors qu'est posée une seconde question différente de la première (et ce, même si, dans l'esprit du demandeur, la 2ème est "complémentaire" de la 1ère). 3) ATTENTION : si je reçois un MP relatif à une question technique sans mon consentement ou mon invite à le faire ===>> a) je n'y réponds pas et b) je fais en sorte que l'expéditeur ne puisse plus m'adresser de MP Dernière modification par ucfoutu ; 16/10/2008 à 07h04 |
|
|
|
|
|
#9 (permalink) |
|
Invité régulier
![]() Date d'inscription: octobre 2008
Messages: 11
|
Désolé, mais j'ai une petite question encore :p
Si je souhaite calculer la cellule K78 avec K79 par exemple dans la Formula, c'est possible ? En faisant cela: Code :
.Range("C11").Formula = "='" & Chemin& "[" & Tableau(1) & "]Feuil1'!K78" Cependant, si je fais: Code :
.Range("C11").Formula = "='" & Chemin& "[" & Tableau(1) & "]Feuil1'!K78+K79" Code :
.Range("C11").Formula = "='" & Chemin& "[" & Tableau(1) & "]Feuil1'!" = Sum(HK78 & ":" & H79)"" merci beaucoup pour vos remarques. Dernière modification par nicethe ; 16/10/2008 à 15h50 |
|
|
|
|
![]() |
![]() |
||
Bouton Parcourir un dossier et non un fichier
|
||
Offres d'
emploi informatique
sur Lesjeudis.com
|
| Outils de la discussion | |
|
|