Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
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
Dim r As String: r = CurDir
ChDir ThisWorkbook.Path
Fichier = Application.GetOpenFilename("Fichier CSV (*.csv), *.csv")
ChDir r
Debug.Print CurDir
If Fichier <> False Then
LireCSV Fichier
End If
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
@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
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
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 ?
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
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
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
si vous voulez ouvrir dans un dossier spécifique pour les fichiers csv, indiquez le chemin à la place de CurDir du type "c:\dossier1\dossier2\", le programme ne peut pas deviner.
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...
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD