XL 2019 Erreur avec CurDir

re4

XLDnaute Occasionnel
Bonjour,
N'étant pas un expert ;-( je bloque sur ce petit code, j'ai remplacé ChDir par CurDir pour rester dans le même répertoire à l'ouverture d'une autre fenêtre mais il y a une erreur ici
If Fichier <> False Then

Pouvez-vous m'aider c'est visiblement pas la bonne procédure
Merci

VB:
' ChDir ThisWorkbook.Path
    CurDir ThisWorkbook.Path
    Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
    If Fichier <> False Then
        LireCSV Fichier
    End If
 

re4

XLDnaute Occasionnel
Merci pour vos réponses qui m'ont mis sur la piste, le code ci-dessous semble fonctionner
A la seconde ouverture, je vais bien chercher le 2éme fichier dans le même répertoire.
Bonne soirée
Sub csv_import()
Dim Fichier As Variant
Dim MyPath
MyPath = CurDir 'ThisWorkbook.Path
Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
If Fichier <> False Then
LireCSV Fichier
End If
End Sub
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour Re4, staple1600, mapomme, kiki29, dysorthographie, le forum

A la seconde ouverture, je vais bien chercher le 2éme fichier dans le même répertoire.
@re4 , normal puisque vous avez changé le dossier et le lecteur actif à la première sélection de fichier.
Curdir renvoyant par défaut le dossier actif sur le lecteur en cours, il est absolument inutile d'essayer de changer le dossier actif par lui même.
Comme vous l'on dit les contributeurs, une changement de dossier par défaut se fait avec ChDir sur le lecteur actif, un changement de lecteur par défaut avec ChDrive.
Vouloir changer le lecteur actif pourra aussi poser des problèmes en cas d'accès purement réseau, je pense que le mieux est de passer par FileDialogFilepicker qui fonctionne exactement comme getopenfilename mais sans le besoin préalable de changer le dossier ou le lecteur actif et qui fonctionne aussi en accès purement réseau avec un dossier type "\\serveur\dossiercible\".

Bien cordialement, @+

VB:
Sub Exemple_FileDialogFilepicker()
Dim Nom_Fichier$
With Application.FileDialog(msoFileDialogFilePicker)
    .ButtonName = "Lire"
    .AllowMultiSelect = False
    .InitialFileName = ThisWorkbook.Path & "\"
    .Title = "Choisissez le fichier csv"
    .Filters.Clear
    .Filters.Add "Fichiers Csv", "*.csv", 1
    .Show
    If .SelectedItems.Count > 0 Then Nom_Fichier = .SelectedItems(1)
End With
If Nom_Fichier = "" Then MsgBox "Pas de fichier sélectionné.", vbOKOnly + vbInformation Else MsgBox "Fichier sélectionné; " & Nom_Fichier, vbOKOnly + vbInformation
End Sub
 
Dernière édition:

re4

XLDnaute Occasionnel
Bonjour Re4, staple1600, mapomme, kiki29, dysorthographie, le forum


@re4 , normal puisque vous avez changé le dossier et le lecteur actif à la première sélection de fichier.
Curdir renvoyant par défaut le dossier actif sur le lecteur en cours, il est absolument inutile d'essayer de changer le dossier actif par lui même.
Comme vous l'on dit les contributeurs, une changement de dossier par défaut se fait avec ChDir sur le lecteur actif, un changement de lecteur par défaut avec ChDrive.
Vouloir changer le lecteur actif pourra aussi poser des problèmes en cas d'accès purement réseau, je pense que le mieux est de passer par FileDialogFilepicker qui fonctionne exactement comme getopenfilename mais sans le besoin préalable de changer le dossier ou le lecteur actif et qui fonctionne aussi en accès purement réseau avec un dossier type "\\serveur\dossiercible\".

Bien cordialement, @+

VB:
Sub Exemple_FileDialogFilepicker()
Dim Nom_Fichier$
With Application.FileDialog(msoFileDialogFilePicker)
    .ButtonName = "Lire"
    .AllowMultiSelect = False
    .InitialFileName = ThisWorkbook.Path & "\"
    .Title = "Choisissez le fichier csv"
    .Filters.Clear
    .Filters.Add "Fichiers Csv", "*.csv", 1
    .Show
    If .SelectedItems.Count > 0 Then Nom_Fichier = .SelectedItems(1)
End With
If Nom_Fichier = "" Then MsgBox "Pas de fichier sélectionné.", vbOKOnly + vbInformation Else MsgBox "Fichier sélectionné; " & Nom_Fichier, vbOKOnly + vbInformation
End Sub
 

re4

XLDnaute Occasionnel
Bonjour,
Merci beaucoup pour toutes ces infos, comme je le disais, je ne suis pas un expert, ma petite modification du code original fonctionne mais à vous lire ça veut dire qu'il vaut mieux utiliser votre procédure Bernard_XLD ?
Mais ou insérer l’équivalent de Lire CSV Fichier ?

Bonne journée
 
Dernière édition:

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re,

vous pouvez l'utiliser comme cela mais comme nous n'avons qu'un petit bout de code, si vous utilisez votre variable fichier plus loin, il faudra mieux faire comme le deuxième code qui initialise la variable fichier
VB:
With Application.FileDialog(msoFileDialogFilePicker)
    .ButtonName = "Lire"
    .AllowMultiSelect = False
    .InitialFileName = ThisWorkbook.Path & "\"
    .Title = "Choisissez le fichier csv"
    .Filters.Clear
    .Filters.Add "Fichiers Csv", "*.csv", 1
    .Show
    If .SelectedItems.Count > 0 Then LireCSV .SelectedItems(1)
End With
Code:
Fichier = ""
With Application.FileDialog(msoFileDialogFilePicker)
    .ButtonName = "Lire"
    .AllowMultiSelect = False
    .InitialFileName = ThisWorkbook.Path & "\"
    .Title = "Choisissez le fichier csv"
    .Filters.Clear
    .Filters.Add "Fichiers Csv", "*.csv", 1
    .Show
    If .SelectedItems.Count > 0 Then Fichier = .SelectedItems(1)
End With
If Fichier = "" Then MsgBox "Pas de fichier sélectionné.", vbOKOnly + vbInformation Else LireCSV Fichier
 

re4

XLDnaute Occasionnel
Voici le code complet et qui fonctionne bien chez moi

VB:
Option Explicit

Sub csv_Import()
Sheets("Mise_en_forme").Visible = True
Worksheets("Mise_en_forme").Select

Dim Fichier As Variant
Dim MyPath
    MyPath = CurDir 'ThisWorkbook.Path
    Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
    If Fichier <> False Then
        LireCSV Fichier
    End If
End Sub
 
   Private Sub LireCSV(ByVal NomFichier As String)
Dim Chaine As String
Dim Ar() As String
Dim i As Long
Dim c As Long
Dim iRow As Long, iCol As Long
Dim NumFichier As Integer
Dim Separateur As String * 1
 
    Separateur = ";"
    Application.ScreenUpdating = False
    NumFichier = FreeFile
 
    iRow = 60
 
    Open NomFichier For Input As #NumFichier
    Do While Not EOF(NumFichier)
        iCol = 2
        iRow = iRow + 1
        Line Input #NumFichier, Chaine
        Ar = Split(Chaine, Separateur)
               For i = LBound(Ar) To UBound(Ar)
               ' Les nombres sont les N° de colonnes dans le fichier csv
               ' export mode tableau de MediaInfo
               ' 1=Format V, 2=Vid format, 3=Audio format, 9=Vid débit, 10=def H, 11=Def V, 12=i/s, 13=Aud debit, 14= canaux, 15=aud echantillon
       If (i = 1 Or i = 2 Or i = 3 Or i = 9 Or i = 10 Or i = 11 Or i = 12 Or i = 13 Or i = 15 Or i = 16) Then
           
             Cells(iRow, iCol) = Ar(i)
              iCol = iCol + 1
           End If
              Next i
    Loop
    Close #NumFichier
    Application.ScreenUpdating = True
 
End Sub
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
re,
alors voila votre macro modifiée
Cordialement
VB:
Sub csv_Import()
Sheets("Mise_en_forme").Visible = True
Worksheets("Mise_en_forme").Select
With Application.FileDialog(msoFileDialogFilePicker)
    .ButtonName = "Lire"
    .AllowMultiSelect = False
    .InitialFileName = CurDir & "\"
    .Title = "Choisissez le fichier csv"
    .Filters.Clear
    .Filters.Add "Fichiers Csv", "*.csv", 1
    .Show
    If .SelectedItems.Count > 0 Then LireCSV .SelectedItems(1)
End With
End Sub
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Une autre proposition, qui permet d'ouvrir la boîte de dialogue directement sur le dossier du classeur :
VB:
Sub csv_Import()
'
Dim GestionFS As Object
Dim Fichier As Variant

    Sheets("Mise_en_forme").Visible = True
    Worksheets("Mise_en_forme").Select

    Set GestionFS = CreateObject("Scripting.FileSystemObject")
    ChDrive (GestionFS.GetDriveName(ThisWorkbook.Path))
    ChDir (ThisWorkbook.Path)

    Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
    If Fichier <> False Then LireCSV Fichier

End Sub

Alors, il parait que ça ne fonctionne que sous Windows...
 
Dernière édition:

Discussions similaires

Réponses
3
Affichages
158

Statistiques des forums

Discussions
312 294
Messages
2 086 896
Membres
103 404
dernier inscrit
sultan87