Aller au contenu

ouvrir un explorateur en vba pour acad


Messages recommandés

Posté(e)

bonjour à tous,

qui peut m'aider...

 

voici un code qui permet d'ouvrir une boîte de dialogue pour pourvoir aller rechecher quelque part sur l'ordi ou sur un réseau une série de plan pour traitement sous autocad...

 

Le prob, c'est ça marche pas... pourquoi ???

 

Dim x As Object

 

Set x = CreateObject("MSComDlg.CommonDialog")

x.showopen

 

MsgBox x.filename

Posté(e)

Voici un exemple d'un commandButton:

 

Private Sub cmdListe_Click()

Dim Index As Integer

CommonDialog1.FileName = "A.LST"

CommonDialog1.DefaultExt = ".lst"

CommonDialog1.DialogTitle = "Identifier le nom de fichier"

CommonDialog1.Filter = "Liste|*.lst"

CommonDialog1.FilterIndex = 1

CommonDialog1.Flags = &H10

CommonDialog1.Action = 1

strFichier = CommonDialog1.FileName

If Dir(strFichier) <> "" Then

Open strFichier For Input As #1

Input #1, strRepertoire

cmdRepertoire.Caption = strRepertoire

lstListe.Clear

Do While Not EOF(1)

Input #1, strNom

If Dir(strRepertoire & strNom) <> "" Then

lstListe.AddItem strNom

End If

Loop

Close #1

Else

MsgBox "Aucun fichier identifié."

End If

End Sub

 

[Edité le 14/10/2004 par Pako]

l'ACADien ! http://img124.exs.cx/img124/7999/start.gif

Posté(e)

clicclac20,

 

La méthode de Pako nécessite l'ajout d'une référence, donc diffusion un peu plus complexe.

 

Il y a le CommonDialog, mais d'une part, l'interface n'est pas moderne

et tu devras déployer le contrôle si les usager sont sous NT ou 98. Il

existe une meilleure technique dont tu pourras te renseigner en visitant

le site de Microsoft à l'adresse suivante:

http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/Q161/2/86.asp&NoWebContent=1

 

 

Voici un exemple:

Option Explicit

 

Private Declare Function GetOpenFileName Lib "comdlg32.dll" _

Alias _

"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

 

Private Type OPENFILENAME

lStructSize As Long

hwndOwner As Long

hInstance As Long

lpstrFilter As String

lpstrCustomFilter As String

nMaxCustFilter As Long

nFilterIndex As Long

lpstrFile As String

nMaxFile As Long

lpstrFileTitle As String

nMaxFileTitle As Long

lpstrInitialDir As String

lpstrTitle As String

flags As Long

nFileOffset As Integer

nFileExtension As Integer

lpstrDefExt As String

lCustData As Long

lpfnHook As Long

lpTemplateName As String

End Type

 

Private Sub Command1_Click()

Dim OpenFile As OPENFILENAME

Dim lReturn As Long

Dim sFilter As String

OpenFile.lStructSize = Len(OpenFile)

sFilter = "Batch Files (*.bat)" & Chr(0) & "*.BAT" & Chr(0)

OpenFile.lpstrFilter = sFilter

OpenFile.nFilterIndex = 1

OpenFile.lpstrFile = String(257, 0)

OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1

OpenFile.lpstrFileTitle = OpenFile.lpstrFile

OpenFile.nMaxFileTitle = OpenFile.nMaxFile

OpenFile.lpstrInitialDir = "C:\"

OpenFile.lpstrTitle = "Use the Comdlg API not the OCX"

OpenFile.flags = 0

lReturn = GetOpenFileName(OpenFile)

If lReturn = 0 Then

MsgBox "The User pressed the Cancel Button"

Else

MsgBox "The user Chose " & Trim(OpenFile.lpstrFile)

End If

End Sub

 

Tu dois corriger le sFilter, le lpstrInitialDir et autres petits détails.

 

Serge

 

 

Posté(e)

bonsoir Serge, ou bonjour, avec le décalage horaire, on sait jamais.

ton truc m'intéresse fortement,

mais je n'arrive pas à le faire fonctionner,

je ne dois pas savoir m'y prendre.

après avoir recopié ton code exemple,

j'ai créé un UserForm

sur lequel j'ai mis un BoutonCommand

au lancement, ça plante, avec ce message :

Sub ou Fonction non définie

lReturn = GetOpenFileName(OpenFile)

la partie en gras est surlignée dans l'éditeur.

 

merci de me dépatouiller, car là je ne saurai pas aller plus loin.

 

j'aurai besoin de ce truc pour choisir un fichier

dans une liste qui ressemble au GETFILED

de l'AutoLisp, est ce que ça correspond ?

 

merci de ton aide,

 

Posté(e)

SERGE SERGE SERGE

que fais je ?

te serre-je ?

oh oui, merci de ton aide.

tu n'as pas eu le temps de répondre que j'ai essayé quelque chose

ET CA FONCTIONNE

j'ai tout mis dans la définition de ma UserForm

avant j'avais mis le Declare Function

dans un module, et ça plantait.

Maintenant ça maaaaaaarche.

je suis vraiment content d'avoir appris ce truc,

c'est grâce à Toi, et je t'envoie mille mercis

c'est parti

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

merci

etc ...

amicalement

Posté(e)

hello Serge,

je ne retire aucun des mercis que tu mérites,

 

ce qui m'amène vers toi, maintenant, c'est :

j'ai l'arborescence, et je peux choisir le fichier qui m'intéresse,

MAIS,

comment se fait il que la variable qui stocke le nom du fichier

fasse toujours 257 caractères,

j'ai essayé TRIM, RTRIM et LTRIM

rien n'y fait.

je ne suis pas allé plus loin, mais il me semble

que lorsque je voudrai "ouvrir" un fichier pour "lire" dedans,

le fait que la chaîne du nom de fichier ne devra

plus contenir tous ces espaces à la fin n'est ce pas ?

 

merci de tes conseils.

Posté(e)

Didier,

 

Désolé pour mes présences aléatoires :-)

 

Pour ce qui est des 257 caractères, cela vient du fait que la fonction est définie dans un dll créé dans un autre langage (le C++) et que cela est de mise de fixer un tampon de mémoire d'avance pour éviter les complications inter-langages.

 

Une fois que tu as la valeur, utilise ceci une fois que tu as récupéré le nom du fichier:

 

Dim texte As String

texte = Left(OpenFile.lpstrFile, InStr(1, OpenFile.lpstrFile, Chr(0)) - 1)

 

 

Serge

 

Posté(e)

bonjour Serge,

OK, j'ai pigé pour les 257 caractères,

ta ligne supplémentaire que tu as posté à 23h58 le 19/10/2004,

fonctionne,

mais, car il y a un mais.

je bloque encore sur un truc.

comment faire passer cette variable dans un module,

en effet dans le UserForm, j'ai la valeur choisie

et elle est tronquée de ses espaces superflus,

dès que je veux l'appeler depuis un module, je ne la trouve pas,

j'ai mis PUBLIC dans toutes mes subs.

j'ai un souci avec la façon de travailler de VBA, c'est clair.

 

je pense que tu sais, et merci de m'en faire profiter.

ciao

Posté(e)

Didier,

 

Dans un module que tu peux créer, tu vas définir tes variables globales.

 

Exemple:

Public gMaVariable as Integer

Public gAutreVariable as String

 

Tu noteras le g qui signale que c'est une variable globale. Ça n'ajoute rien à la syntaxe de VB mais ça rend le code plus facile à comprendre. C'est une pratique commune.

 

Autre méthode: tu peux référencer la variable en précisant son conteneur, si celui-ci est toujours actif.

 

Exemple:

Debug.Print MonUserForm.MaVariable

Debug.Print MonModule.MaVarible

 

Serge

 

  • 2 semaines après...
Posté(e)

Salut à tous

 

Voici comment je fait

 

inserrer un controle "commonDialog" dans la form que j'ai nommé "boite"

Puis ce bout de code pour récuperer le nom du dessin choisi

 

 

boite.Filter = "Fichiers AUTOCAD|*.dwg"

boite.MaxFileSize = 32000

boite.InitDir = "F:\dao\"

boite.FileName = ""

boite.ShowOpen

bloc_insert = UCase(boite.FileName)

 

et c'est tout

 

 

 

eagle4

Regarde devant, derrière apporte des regrets, les côtés envies et jalousie

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité