Importation d'un fichier CSV

Salut

J'ai réaliser un code qui permet d'importer un fichier CSV et je veux que le feuille de fichier excel porte le même nom du fichier. j'ai trouver la fonction GetOpenFileName mais cette fonction permet d'importer un seul type de fichier et l'importation du fichier se fait chaque mois et il peut être un fichier txt ou Prn.Merci

Application.ScreenUpdating = False
Dim laChaine As String, x, fichier As String, texte, i As Long, Sh As Long, lig As Long 'variable necessaire
Dim J As Long
Dim l As Integer
Dim k As Integer
Dim DerCol As Integer
Dim F1 As Worksheet
Dim p As Integer
Dim f As String
'f = Application.GetOpenFilename("Text file (*.CSV), *.CSV")
'ActiveSheet.Name = Split(Mid(f, InStrRev(f, "\") + 1), ".")(0)
With Application.FileDialog(msoFileDialogOpen)
.AllowMultiSelect = False ' on choisi q'un seul fichier
If Application.FileDialog(msoFileDialogOpen).Show = True Then 'si on annule pas
fichier = .SelectedItems(1) 'fichier sera l'item choisi dans la boite de dialog
'f = Application.GetSaveAsFilename(fileFilter:="Text Files (*.CSV), *.CSV")

Else
MsgBox "Annuler" ' sinon un message
Exit Sub 'sortie de sub si annuler
End If
End With
'partie 2
' lecture et enregistrement du csv dans la variable
x = FreeFile
Open fichier For Input As #x 'ouverture du fichier en mémoire (non apparent)
laChaine = Input(LOF(x), #x) 'placement du texte complet dans la variable "lachaine"
Close #x ' fermeture du fichier
'partie 3
'exploitation du csv
Sh = 2 ' on demarre au 2 eme sheets le premier étant l'accueil chez moi
texte = Split(laChaine, vbCrLf) ' on coupe le texte par les saut de ligne
For i = 0 To UBound(texte)
lig = lig + 1 'on increment le n° de ligne
With Sheets(Sh)
.Name = "Final Dormant report Mai 2018" ' on nomme le sheets
.Cells(lig, 1) = texte(i) 'on met la ligne entiere dans la cellule la ligne complete meme avec les pointvirgules
If lig = Rows.Count - 2 Or i = UBound(texte) Then ' si on arrive en bas du sheets ou au bout des lignes du csv alors
'on applique la fonction native |||textTocolumns||| par les point virgules
.Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False
'DataType:=OtherChar, OtherChar:=";", TextQualifier:=xlDoubleQuote, Space:=True
Sh = Sh + 1: lig = 0 'on increment l'index de sheet

If Sheets.Count < Sh Then Sheets.Add After:=Sheets(Sheets.Count) 'au cas ou il n'y aurait pas le sheets (sh) on l'ajoute
End If
End With
Next

Bonjour,

J'ai ajouté une variable "LeNom"

J'ai extrait le nom de "fichier" et l'ai placé dans "LeNom"

Puis, où l'onglet est renommé = "LeNom"

Voir si ça convient ...

Sub importations()

' Application.ScreenUpdating = False
Dim laChaine As String, x, fichier As String, texte, i As Long, Sh As Long, lig As Long 'variable necessaire
Dim J As Long
Dim l As Integer
Dim k As Integer
Dim DerCol As Integer
Dim F1 As Worksheet
Dim p As Integer
Dim f As String
Dim LeNom As String  '' ajout variable par ric

'f = Application.GetOpenFilename("Text file (*.CSV), *.CSV")
'ActiveSheet.Name = Split(Mid(f, InStrRev(f, "\") + 1), ".")(0)

With Application.FileDialog(msoFileDialogOpen)
    .AllowMultiSelect = False ' on choisi q'un seul fichier
    If Application.FileDialog(msoFileDialogOpen).Show = True Then 'si on annule pas
        fichier = .SelectedItems(1) 'fichier sera l'item choisi dans la boite de dialog
            'f = Application.GetSaveAsFilename(fileFilter:="Text Files (*.CSV), *.CSV")
        LeNom = Mid(fichier, InStrRev(fichier, "\") + 1)  ' extraction du nom par ric
        LeNom = Left(LeNom, (Len(LeNom) - 4))  ' ajout par ric
    Else
        MsgBox "Annuler" ' sinon un message
        Exit Sub 'sortie de sub si annuler
    End If
End With

    'partie 2
        ' lecture et enregistrement du csv dans la variable
x = FreeFile
Open fichier For Input As #x 'ouverture du fichier en mémoire (non apparent)
laChaine = Input(LOF(x), #x) 'placement du texte complet dans la variable "lachaine"
Close #x ' fermeture du fichier

        'partie 3
        'exploitation du csv
Sh = 2 ' on demarre au 2 eme sheets le premier étant l'accueil chez moi
texte = Split(laChaine, vbCrLf) ' on coupe le texte par les saut de ligne

For i = 0 To UBound(texte)
    lig = lig + 1 'on increment le n° de ligne
    With Sheets(Sh)
        .Name = LeNom ' modifié par ric     ''"Final Dormant report Mai 2018" ' on nomme le sheets
        .Cells(lig, 1) = texte(i) 'on met la ligne entiere dans la cellule la ligne complete meme avec les pointvirgules
        If lig = Rows.Count - 2 Or i = UBound(texte) Then ' si on arrive en bas du sheets ou au bout des lignes du csv alors
                    'on applique la fonction native |||textTocolumns||| par les point virgules
            .Columns("A:A").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False
                    'DataType:=OtherChar, OtherChar:=";", TextQualifier:=xlDoubleQuote, Space:=True
            Sh = Sh + 1: lig = 0 'on increment l'index de sheet

            If Sheets.Count < Sh Then Sheets.Add After:=Sheets(Sheets.Count)         'au cas ou il n'y aurait pas le sheets (sh) on l'ajoute
        End If
    End With
Next
End Sub

Ric

Merci beaucoup c'est ce que je veux

Bonjour,

Par après, j'ai modifié le code afin que l'extension du fichier texte n'apparaisse pas dans le nom de l'onglet.

Bonne continuité

ric

Rechercher des sujets similaires à "importation fichier csv"