importation auto à l'ouverture depuis un csv déjà ouvert au nom variable

zayab

XLDnaute Junior
Bonjour les amis,

Je n'arrive pas faire fonctionner ce code pour copier, dés l'ouverture de mon classeur, toutes les cellules d'un fichier.csv déjà ouvert vers l'onglet Import de mon classeur .xlsm

le fichier csv peut avoir un nom différent: "export-bleu.csv" ou "export-vacances.csv" etc...

arrivé à Set s1, vba plante et renvoi : propriété ou méthode non gérée par cet objet
Merci de votre aide

le bout de code:
Private Sub Workbook_Open()

Dim w1, w2, wb As Workbook
Dim s1, s2 As Ranges

For Each wb In Application.Workbooks
If Left(wb.Name, 7) = "export-" Then
Set w1 = wb
Exit For
End If
Next
Set s1 = w1.Range(Cells(1, 2), Cells(Cells(Rows.Count, 2).End(xlUp).Row, 3))
Set w2 = ThisWorkbook
Set s2 = w2.Sheets("Import")

s1.Copy Destination:=s2.Range("A1")
End Sub
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@zayab
Personnellement, je ferai comme ceci
(Je l'avais déjà fait en mars, mais j'avais oublié ;) )
VB:
Sub CSV_Import_III()
'recyclons, recyclons ;-)
'copie à peine retouchée de ma réponse dans ce fil
'https://www.excel-downloads.com/threads/comparer-date-dans-fichier-ferm%C3%A9.20023132/page-2#post-20172742
Dim ws As Worksheet, fichier As Variant
Set ws = Sheets("Import")
fichier = Application.GetOpenFilename("Fichier CSV (*.csv),*.csv", , "Choisissez le fichier à importer...")
If fichier = False Then Exit Sub
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next 'sécurité
With ws
    With .QueryTables.Add(Connection:="TEXT;" & fichier, Destination:=ws.Range("A1"))
        .TextFileParseType = xlDelimited
        .TextFileSemicolonDelimiter = True
        .Refresh
    End With
End With
End Sub
 

zayab

XLDnaute Junior
@Ce lien n'existe plus
ta macro demande à l'utilisateur d'aller rechercher le fichier .csv dans un répertoire ce qui implique qu'il l'aura sauvegardé. Ors dans mon cas ce fichier n'a pas vocation à être conservé.
Ma macro intervient sur un fichier .csv déjà ouvert.
du coup je ne vois pas comment integrer la sécurité : On Error Resume Next
Aussi, cette partie qui importe les données
With ws
With .QueryTables.Add(Connection:="TEXT;" & fichier, Destination:=ws.Range("A1"))
.TextFileParseType = xlDelimited
.TextFileSemicolonDelimiter = True
.Refresh
End With
End With

Ne peut être intégrée non plus en raison des propriétés de la variable? non?
Fichier est variant et dans ma macro c'est Wbk et c'est un workbook?
Je confond le type d'objet? C'est ca?
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@zayab
NB:Je n'aime pas trop les WorkBook_Open ;)
(surtout quand elles permettent de familiarités avec mon environemment Excelien ;)
(cf->ActiveWindow.WindowState = xlMaximized|ActiveWindow.DisplayWorkbookTabs = False)
L'idée est de
1) l'utilisateur fait une exportation proposée par un site en format ".csv".
2) l'utilisateur ouvre un classeur en".xlsm" dont la macro d'ouverture importe les données du fichier en ".csv " en le sélectionnant grâce à une boite de dialogue, dans un onglet nommé Import .
3) à la fin du traitement, le fichier *.CSV est supprimé par macro
 

zayab

XLDnaute Junior
C'est sur c'est propre et élégant.
Je préfère que les utilisateurs ne perdent pas de temps à se souvenir ou ils ont sauvegardé le .csv. L’environnement change certes mais avec l'appel de la Macro1 l'onglet Import n’apparaît pas et mon classeur s'ouvre sur directement sur la feuille de travail. Ce qui correspond mieux à mes besoins.
Merci pour tout en tout cas.
 

Staple1600

XLDnaute Barbatruc
Re

Donc si je comprends bien
1) L'utilisateur final est sur un site web permettant un export *.csv
2) Quand l’utilisateur fait cet export
a) il télécharge le fichier (et donc l'enregistre sur son HD)
b) ou il l'ouvre directement dans Excel ?
 

Staple1600

XLDnaute Barbatruc
Re,

@zayab
Dans ce cas, pourquoi tu te compliques la tâche?
Si l'utilisateur l'ouvre directement dans Excel et que le CSV n'a pas vocation à être sauvegardé, pourquoi ne pas directement faire?
1) Export
2) Copie dans Import
3) Traitement avec les autres macros

Pour faciliter les choses, les macros pourraient même être stockées dans Personal.xlsb
(Classeur de macros complémentaires)
Ainsi plus besoin de fichier *.xslm

1) Export CSV
2) Renommage de la feuille active* en Import
3) Traitement par les autres macros
4) Enregistrer sous *.xlsx ou *.xlsm

*: donc le CSV qui vient d'être créé lors de l'export à partir sur site web
 

Discussions similaires

Statistiques des forums

Discussions
312 190
Messages
2 086 040
Membres
103 105
dernier inscrit
fofana