cliclac20 Posté(e) le 14 octobre 2004 Posté(e) le 14 octobre 2004 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
Pako Posté(e) le 14 octobre 2004 Posté(e) le 14 octobre 2004 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 IfEnd Sub [Edité le 14/10/2004 par Pako] l'ACADien ! http://img124.exs.cx/img124/7999/start.gif
Serge Posté(e) le 16 octobre 2004 Posté(e) le 16 octobre 2004 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
didier Posté(e) le 19 octobre 2004 Posté(e) le 19 octobre 2004 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 UserFormsur lequel j'ai mis un BoutonCommandau lancement, ça plante, avec ce message :Sub ou Fonction non définielReturn = 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 fichierdans une liste qui ressemble au GETFILEDde l'AutoLisp, est ce que ça correspond ? merci de ton aide, Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 19 octobre 2004 Posté(e) le 19 octobre 2004 SERGE SERGE SERGEque 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 UserFormavant j'avais mis le Declare Functiondans 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 mercisc'est partimercimercimercimercimercimercimercimercimercimercimercimercimercimercimercimercimercimercimercimercietc ...amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 19 octobre 2004 Posté(e) le 19 octobre 2004 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 fichierfasse toujours 257 caractères,j'ai essayé TRIM, RTRIM et LTRIMrien n'y fait.je ne suis pas allé plus loin, mais il me sembleque lorsque je voudrai "ouvrir" un fichier pour "lire" dedans,le fait que la chaîne du nom de fichier ne devraplus contenir tous ces espaces à la fin n'est ce pas ? merci de tes conseils. Éternel débutant... Mon site perso : Programmer dans AutoCAD
Serge Posté(e) le 19 octobre 2004 Posté(e) le 19 octobre 2004 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 Stringtexte = Left(OpenFile.lpstrFile, InStr(1, OpenFile.lpstrFile, Chr(0)) - 1) Serge
didier Posté(e) le 20 octobre 2004 Posté(e) le 20 octobre 2004 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 choisieet 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 Éternel débutant... Mon site perso : Programmer dans AutoCAD
Serge Posté(e) le 20 octobre 2004 Posté(e) le 20 octobre 2004 Didier, Dans un module que tu peux créer, tu vas définir tes variables globales. Exemple:Public gMaVariable as IntegerPublic 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.MaVariableDebug.Print MonModule.MaVarible Serge
didier Posté(e) le 20 octobre 2004 Posté(e) le 20 octobre 2004 bonsoir Serge,décidément, j'ai pas ces problèmes avec le Lisp,et j'ai pris des mauvaises habitudes,c'est souvent le cas des autoditactes ...mais c'est décidé, je vais suivre tes conseilset déclarer mes variables comme il se faut. merci beaucoup de ton aide. Éternel débutant... Mon site perso : Programmer dans AutoCAD
eagle4 Posté(e) le 28 octobre 2004 Posté(e) le 28 octobre 2004 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.ShowOpenbloc_insert = UCase(boite.FileName) et c'est tout eagle4 Regarde devant, derrière apporte des regrets, les côtés envies et jalousie
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant