Chemin d'un fichier sélectionné VBE 6

Résolu
Bonjour à tous,

Etant débutante sous VB, je patine un peu.
J'ai créé un code permettant, par le biais d'un "commandbutton", d'ouvrir mes documents. Je souhaite sélectionner un fichier, et que son chemin soit ensuite inscrit dans la "textbox" créée à cet effet.
Pour le moment, j'ai seulement réussi à afficher le chemin du classeur dans lequel je travail.

Voici mon code :

Private Sub CommandButton1_Click()
    On Error Resume Next
    With Application.GetOpenFilename
        .AllowMultiSelect = False
        .Show
        UserForm1.TextBox1.Text = .SelectedItems(1)
    End With
    
    'display the path in the text box
    Dim Path As String


    TextBox1.Value = Workbooks(ThisWorkbook.Name).FullName



End Sub


Si j'ai oublié des informations qui pourrait vous permettre de m'aider, n'hésitez pas à me le signaler.

Merci d'avance,

CAVROM.

11 réponses

  1. Bonjour,

    Est-ce que VBE représente pour toi, Visual Basic Editor du VBA.

    Cdt

    Lupin
    0
    1. re :

      Si tu es en VBA, tu peux essayer cette sybtaxe :

      Private Sub CommandButton1_Click()
      
          Dim oDialog As Office.FileDialog
      
          'Ouvre une boîte de dialogue MS Office FileDialogOpen
          Set oDialog = Application.FileDialog(msoFileDialogOpen)
      
          
          oDialog.InitialFileName = ""
          'Sélection sur tous les fichiers
          oDialog.Filters.Clear
          oDialog.Filters.Add "Tous les fichiers", "*.*"
          'Titre de la boîte de dialogue
          oDialog.Title = "Sélectionnez le fichier "
          'Pas de sélection multiple
          oDialog.AllowMultiSelect = False
           'Affiche la boîte
          oDialog.Show
      
          On Error Resume Next
          Me.TextBox1.Text = oDialog.SelectedItems(1)
      
      End Sub
      '
      


      Cdt

      Lupin
      0
  2. Pour moi VBE représente Visual Basic ouvert par Excel, et ma version est Excel 2000 et VB 6.0. donc la dénomination est VBA tout de même?

    Bon j'ai essayé votre code, pourtant un message d'erreur s'affiche :

    Erreur de compilation : Type défini par l'utilisateur non défini.

    Cela se produit à la ligne:
    Dim oDialog As Office.FileDialog

    Quel est le problème?

    Merci pour ce début de réponse ;)
    0
    1. Bonjour,

      VBE est l'abréviation de [Visual Basic Editor] et le language lui-même
      se nomme VBA [ Visual Basic Application ], ce language est dirons-nous
      de même génération que VB6, mais VBA n'est qu'un sous-ensemble de
      VB6.

      Ceci dit, pour ce qui est de de l'erreur de compilation, vérifier ce qui suit :

      Ouvrir VBE, et aller au menu :

      // Menu / Outils / Références...

      Assure-toi d'avoir au minimum ces 5 composants de cocher :

      Microsoft Excell 11.0 Object Library
      Microsoft Office 11.0 Object Library
      Microsoft Visual Basic for Applications Extensibility
      Visual Basic For Applications
      Ole Automation

      N.B. Je suis actuellement sur la version 2003 d'excel, toutefois
      tu devrais retrouver ces librairies sous 2000, de mémoire je pense
      que la version est 9.0.

      Cdt

      Lupin
      0
      1. Bon j'ai bien tout coché, mais le code ne marche toujours pas. Merci tout de même
        0
        1. Bonjour,

          Je vérifie tout cela à la maison, avec mon bouquin de John Wallenback
          qui porte sur VBA Excel 2000, car pour moi ça fonctionne.

          Cdt

          Lupin
          0
          1. C'est très gentil de votre part, je me suis moi aussi replongée dans un livre sur VBA Excel 2000, mais de Jean-François Sehan.
            Pour le moment, pas plus d'informations.
            0
            1. re:

              Dans la foulée, j'avais oublié que j'ai toujours le CDROM fournit
              avec le livre dans mon pack-sac.

              Alors voici le code fournit par celui-ci :

              Private Declare Function FindExecutableA Lib "shell32.dll" _
                  (ByVal lpFile As String, ByVal lpDirectory As String, _
                  ByVal lpResult As String) As Long
              
              Function GetExecutable(strFile As String) As String
                  Dim strPath As String
                  Dim intLen As Integer
                  strPath = String(255, 0)
                  intLen = FindExecutableA(strFile, "\", strPath)
                  If intLen > 32 Then
                      GetExecutable = Left(strPath, intLen)
                   Else
                      GetExecutable = ""
                   End If
              End Function
              
              Sub GetFileName()
                  Dim fname As String
                  fname = Application.GetOpenFilename
                  MsgBox "The executable file is " & GetExecutable(fname), vbInformation, fname
              End Sub
              '
              


              Disons que personnellement quand je peux éviter d'utiliser
              les API de windows, je le fait. Peut-être trouverais-je une autre
              méthodes dans le bouquin, mais du moins celle-ci devarit
              fonctionner.

              C'est le contenu de la procédure [ Sub GetFileName() ] qui
              devra remplacer le contenu de votre procédure
              [ Private Sub CommandButton1_Click() ].

              Cdt

              Lupin
              0
              1. Bonjour, et merci pour cette réponse.

                Je n'ai pas bien saisie, vous me dites qu'il faut que je remplace le code du CommandButton par la procédure [ Sub GetFileName() ] ?
                Car lorsque je remplace tout bonnement, cela ne marche pas.
                Que dois je faire du début du code?
                0
                1. Bonjour,

                  Voici un exemple tangible que tu pourras décortiquer :-)

                  http://membre.oricom.ca/lupin/xfr/classeur.zip

                  Ouvrir le classeur et aller au menu :

                  // Menu / Outils / Macro / Macro...

                  Sélectionner Principal

                  Cliquer sur le bouton Execute

                  Cdt

                  Lupin
                  0
                  1. Bonjour Lupin,

                    J'ai réussi à dégoter un code qui fonctionne. Je te le transmets, au cas où ça t'interesse :
                    Private Sub CommandButton1_Click()
                    Dim NAO As String
                    NAO = Application.GetOpenFilename
                    For i = Len(NAO) To 1 Step -1
                    If Mid(NAO, i, 1) = "\" Then LenDossier = i: GoTo suite
                    Next
                    suite:
                    TextBox1.Value = Mid(NAO, 1, LenDossier - 1)
                    TextBox2.Value = Mid(NAO, LenDossier + 1, (Len(NAO) + 1) - LenDossier)
                    End Sub


                    En tout cas merci de ton aide, de ta compréhension et de ta patience.

                    Cavrom.
                    0
                    1. Bonjour,

                      J'ai certes glisser dans cette suite d'évènement, car lorsque je code ainsi :

                      Private Sub CommandButton1_Click()
                          
                          Dim fname As String
                          
                          fname = Application.GetOpenFilename
                          If (fname <> "Faux") Then
                              Me.TextBox1.Text = fname
                          Else
                              Me.TextBox1.Text = "Annuler par l'utilisateur"
                          End If
                      
                      End Sub
                      '
                      


                      Ça fonctionne bien chez moi !!!

                      Tant mieux si tu as trouvé une solution :-)

                      Bonne continuité.

                      Cdt

                      Lupin
                      0