Importer un fichier CSV dans une nouvelle feuille

nak

XLDnaute Occasionnel
Bonjour à tous,

J'ai un code qui me permet d'ouvrir un fichier CSV :
Private Sub CommandButton1_Click()

nf = Application.GetOpenFilename("Fichiers Csv,*.csv")
If Not nf = False Then
Workbooks.Open Filename:=nf
End If

End Sub

Celui-ci s'ouvre dans un nouveau classeur.
Moi j'aimerais qu'il soit importé non pas dans un nouveau classeur mais dans une nouvelle feuille de mon classeur actif.
Je voudrais aussi forcer le nom de cette nouvelle feuille.

J'ai essayé Worksheets.Open mais cette fonction ne marche pas...

Vous avez une idée ?

Merci

A+
 
C

Compte Supprimé 979

Guest
Re : Importer un fichier CSV dans une nouvelle feuille

Salut Nak,

Peut-être comme ça
Code:
Private Sub CommandButton1_Click()
  nf = Application.GetOpenFilename("Fichiers Csv,*.csv")
  If Not nf = False Then
    Workbooks.Open Filename:=nf
    Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    Workbooks(nf).Close SaveChanges:=False
  End If
End Sub

A+

Edit : Salut Michel ;)
 

nak

XLDnaute Occasionnel
Re : Importer un fichier CSV dans une nouvelle feuille

Merci,
malheureusement ça bloque au niveau de Workbooks(nf).Close SaveChanges:=False
cela ouvre bien le fichier dans une nouvelle feuille mais également dans un nouveau fichier...
 
C

Compte Supprimé 979

Guest
Re : Importer un fichier CSV dans une nouvelle feuille

Re,

cela ouvre bien le fichier dans une nouvelle feuille mais également dans un nouveau fichier
Oui, forcément ...
Le but du jeu étant d'ouvrir le fichier CSV (donc nouveau classeur)
De copier la feuille dans le classeur actuel
De fermer le classeur du CSV

Je n'ai pas essayé le code :eek:

Donc en voici un qui fonctionne
Code:
Private Sub CommandButton1_Click()
  Dim NomFic As String, Pos As Integer
  nf = Application.GetOpenFilename("Fichiers Csv,*.csv")
  If Not nf = False Then
    Workbooks.Open Filename:=nf
    Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    ' Récupérer la position du dernier anti-slash
    Pos = InStrRev(nf, "\")
    ' Récupérer le nom du fichier
    NomFic = Mid(nf, Pos + 1, Len(nf) - Pos)
    ' Fermer le fichier CSV
    Workbooks(NomFic).Close SaveChanges:=False
  End If
End Sub

A+
 

nak

XLDnaute Occasionnel
Re : Importer un fichier CSV dans une nouvelle feuille

Bonjour,

Je ne comprends plus rien :(
Hier la commande : Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
fonctionnait et aujourd'hui plus rien...

Je joins les fichiers, sa fonctionne pour vous ?

Merci bien
 

Pièces jointes

  • exemple.zip
    18.9 KB · Affichages: 108
  • exemple.zip
    18.9 KB · Affichages: 89
  • exemple.zip
    18.9 KB · Affichages: 100
C

Compte Supprimé 979

Guest
Re : Importer un fichier CSV dans une nouvelle feuille

Salut Nak,

Utilise plutôt e code tu n'auras plus de problème ;)
Du moins j'espère :D

Code:
Private Sub CommandButton2_Click()
  Dim NomFic As String, Pos As Integer
  nf = Application.GetOpenFilename("Fichiers Csv,*.csv")
  If Not nf = False Then
      ' Récupérer la position du dernier anti-slash
    Pos = InStrRev(nf, "\")
    ' Récupérer le nom du fichier
    NomFic = Mid(nf, Pos + 1, Len(nf) - Pos)
    ' Ouvrir le fichier avec chemin complet
    Workbooks.Open Filename:=nf
    ' Copier la feuille dans ce classeur
    Workbooks(NomFic).Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
    ' Fermer le fichier CSV
    Workbooks(NomFic).Close SaveChanges:=False
  End If
Sheets(4).Name = "new"
End Sub

Le problème dans le code précédent,
c'est que si ton fichier CSV n'était pas actif après ouverture (au premier plan)
c'était la première feuille de ton classeur avec bouton qui était copiée

A+
 

nak

XLDnaute Occasionnel
Re : Importer un fichier CSV dans une nouvelle feuille

Merci beaucoup pour toutes tes explications,
Au début j'ai cru que cela ne fonctionner toujours pas. J'ai donc essayé avec Excel 2003 et ça marche :)

Sous le version 2007 ça bloc au niveau de la ligne : Workbooks(NomFic).Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

Quelque chose à dut changer entre temps.
C'est pas très grave car pour le moment je tourne sous 2003.

Merci encore

A+
 

nak

XLDnaute Occasionnel
Re : Importer un fichier CSV dans une nouvelle feuille

Bonjour,

Je fais remonter ce poste car je rencontre un problème.
Celui-ci fonctionne très bien dans un seul fichier. Le souci c'est que je souhaiterais pouvoir l'utiliser dans une macro complémentaire.
Dans ce cas la macro bloque au niveau :
Workbooks(NomFic).Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

Je pense que le réel problème vient du nom du fichier qui est défini, la macro doit travailler sur le fichier xla.
Y-a-t-il une solution à mon problème ?

Merci

A+
 

Pierrot93

XLDnaute Barbatruc
Re : Importer un fichier CSV dans une nouvelle feuille

Bonsoir Nak

si tu veux travailler sur macro complémentaire comme sur un classeur, il faut modifier au préalable la propriété "IsAddin " de ton "xla" :

Code:
ThisWorkbook.IsAddin = False
'ton code
ThisWorkbook.IsAddin = True

"ThisWorkbook" à remplacer éventuellement par "Workbooks("nomxla.xla")"

bonne soirée
@+
 

nak

XLDnaute Occasionnel
Re : Importer un fichier CSV dans une nouvelle feuille

Merci beaucoup pour toutes tes explications,
Au début j'ai cru que cela ne fonctionner toujours pas. J'ai donc essayé avec Excel 2003 et ça marche :)

Sous le version 2007 ça bloc au niveau de la ligne : Workbooks(NomFic).Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)

Quelque chose à dut changer entre temps.
C'est pas très grave car pour le moment je tourne sous 2003.

Merci encore

A+

Bonjour à tous,

Je refais monter ce poste car la macro ci-dessus ne fonctionne plus depuis mon passage de 2003 à 2007.
Il fallait bien que cela arrive un jour...
Malheureusement je n'arrive pas à me dépatouiller, du coup je sollicite encore une fois votre aide.

Avez vous une solution pour Excel 2007 SVP ?

Merci d'avance

A+
 
G

Guest

Guest
Re : Importer un fichier CSV dans une nouvelle feuille

Bonjour,

C'est un fichier csv qui a été créé avec une version < 2007?
Quand quelque chose cloche, il faut donner le message d'erreur que tu reçois. Ici une incompatibilité entre le nombre de ligne du classeur .csv et le classeur 2007.

J'ai repris la macro du fichier du post #1 et cela fonctionne sous 2007 et 2010.

Cette nouvelle macro

Crée une nouvelle feuille dans le fichier destination
Ouvre le fichier csv
copie les données du fichier csv et les colle dans la feuille créée

Code:
Private Sub CommandButton2_Click()
  Dim NomFic As String
  Dim wkb As Workbook, sh As Worksheet
  nf = Application.GetOpenFilename("Fichiers Csv,*.csv")
  If Not nf = False Then
    Set sh = ThisWorkbook.Sheets.Add
    Set wkb = Workbooks.Open(Filename:=nf)
    Sheets(1).UsedRange.Copy sh.Range("A1")
   wkb.Close SaveChanges:=False
  End If
End Sub

A+
 

nak

XLDnaute Occasionnel
Re : Importer un fichier CSV dans une nouvelle feuille

Bonjour Hasco,

Ta solution fonctionne bien mais malheureusement le séparateur n'est pas pris en compte. Du coup il y a une seule colonne dans la nouvelle feuille.

J'ai essayé avec le code suivant mais cela ne fonctionne pas...
Code:
nf.Sheets(1).Copy After:=ThisWorkbook.Sheets("essai")

Il est difficile d'adapter les différentes solutions disponibles sur le forum. Faire une importation ligne par ligne me semble trop fastidieux.

Une autre idée ?

Merci
 

Pièces jointes

  • import.zip
    18.5 KB · Affichages: 94
  • import.zip
    18.5 KB · Affichages: 79
  • import.zip
    18.5 KB · Affichages: 93

Discussions similaires

Réponses
3
Affichages
146

Statistiques des forums

Discussions
312 165
Messages
2 085 880
Membres
103 009
dernier inscrit
dede972