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:

zayab

XLDnaute Junior
Bonjour le forum
Bon bin même si c'est mieux coté syntaxe le même message surgit.

Est ce que ce que je souhaite faire est impossible?
Dés l'ouverture de mon classeur la macro se lance est importe les données d'un classeur .csv. Ce dernier est le résultat d'une exportation qui n'aura pas le même nom à chaque fois mais qui commencera toujours par "export-..."
L'idée est de
1) faire l'exportation puis
2)d'ouvrir mon classeur sur un onglet dont la macro d'ouverture aura importé les données puis lancé ses autres macro
3) l'utilisateur peut ensuite travailler sur mon classeur directement sur un tableau plus conviviale que l'extraction brut d'origine en .csv
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@zayab
Une moyen simple et rapide d'être efficace dans nos tentatives d'aide, serait que tu joignes
1) un extrait* anonymisé (respectant sa structure) de ton fichier *.CSV
2) une copie* anonymisée de ton fichier Excel (avec ton code VBA actuel)

*: ou des fichier "bidons" spécialement créés pour ta question mais qui respectent structures et formats des originaux.

EDITION: Bonjour ChTi160, job75
 
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour zayab, JM, le forum,

Faut pas mélanger les objets Workbook, Sheet, Range !!!

Le code du ThisWorkbook corrigé :
Code:
Private Sub Workbook_Open()
Dim wb As Workbook, derlig&
For Each wb In Workbooks
    If Left(wb.Name, 7) = "export-" Then Exit For
Next
If wb Is Nothing Then Exit Sub 'si le fichier n'est pas ouvert
Application.ScreenUpdating = False
Me.Sheets("Import").[A:B].ClearContents 'RAZ
With wb.Sheets(1)
    derlig = .Cells(.Rows.Count, 2).End(xlUp).Row
    Me.Sheets("Import").[A1].Resize(derlig, 2) = .Cells(1, 2).Resize(derlig, 2).Value
End With
End Sub
Seules les valeurs sont copiées, on peut formater la feuille "Import" comme on veut.

Bonne journée.
 

Staple1600

XLDnaute Barbatruc
Re,

@zayab
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
Dans ton premier message, tu dis que le *.CSV est ouvert
et dans ton dernier message tu dis que la macro doit ouvrir le *.CSV
Dés l'ouverture de mon classeur la macro se lance est et importe les données d'un classeur .csv

Donc quelle la situation réelle?

PS: Le *.CSV est-il toujours dans le même répertoire?
 

zayab

XLDnaute Junior
Re,

@zayab

Dans ton premier message, tu dis que le *.CSV est ouvert
et dans ton dernier message tu dis que la macro doit ouvrir le *.CSV


Donc quelle la situation réelle?

PS: Le *.CSV est-il toujours dans le même répertoire?
Vraiment désolé Staple1600 tu as bien raison je viens de me relire et je manque vraiment de clarté.
Par contre il y a trop de données confidentiels pour les uploader
L'idée est de
1) l'utilisateur fait une exportation proposée par un site en format ".csv". le nom varie a chaque fois mais commence par : export- . ce qui donne "export-(partie variable).csv
2)l'utilisateur ouvre un classeur en".xlsm" dont la macro d'ouverture importe les données du fichier en ".csv " dans un onglet nommé Import puis lance les autres macro
3) l'utilisateur peut ensuite travailler sur le classeur en ".xlsm" directement sur un tableau plus conviviale que l'extraction brut d'origine en .csv
 

zayab

XLDnaute Junior
Bonjour zayab, JM, le forum,

Faut pas mélanger les objets Workbook, Sheet, Range !!!

Le code du ThisWorkbook corrigé :
Code:
Private Sub Workbook_Open()
Dim wb As Workbook, derlig&
For Each wb In Workbooks
    If Left(wb.Name, 7) = "export-" Then Exit For
Next
If wb Is Nothing Then Exit Sub 'si le fichier n'est pas ouvert
Application.ScreenUpdating = False
Me.Sheets("Import").[A:B].ClearContents 'RAZ
With wb.Sheets(1)
    derlig = .Cells(.Rows.Count, 2).End(xlUp).Row
    Me.Sheets("Import").[A1].Resize(derlig, 2) = .Cells(1, 2).Resize(derlig, 2).Value
End With
End Sub
Seules les valeurs sont copiées, on peut formater la feuille "Import" comme on veut.

C'est super Merci job75
je viens de voir ta reponse
Je viens de trouver de mon coté et je vais integrer
if wb Is Nothing Then Exit Sub 'si le fichier n'est pas ouvert
avec un Msgbox ça aura son utilité dans mon projet

Je partage ce que j'ai trouvé et qui fonctionne dans le message dessous

NB par contre je ne comprend pas dans ta solution le Me. ni le & à la déclaration de variable?
 

zayab

XLDnaute Junior
Voici ce que j'ai trouvé qui fonctionne et bien sur perfectible.

Private Sub Workbook_Open()
ThisWorkbook.Sheets("Import").Activate
Cells.Select
Selection.ClearContents
Range("A1").Select
ActiveWindow.WindowState = xlMaximized
ActiveWindow.DisplayWorkbookTabs = False
Sheets("Import").ScrollArea = "a1"
Dim Wbk As Workbook

For Each Wbk In Application.Workbooks
If Left(Wbk.Name, 7) = "export-" Then
Wbk.Activate
Exit For
End If
Next Wbk
'si le fichier n'est pas ouvert (Merci job75);)
If Wbk Is Nothing Then
Dim Alerte As Byte
Alerte= MsgBox("Effectuez premièrement une extraction de puis le site de référence.", vbOKOnly, "Importation Impossible")
Exit Sub
End If

With Workbooks("mon classeur.xlsm")
Wbk.Sheets(1).Range("A1:AZ10000").Copy .Sheets("Import").Range("A1") 'A1:AZ10000 devrait suffire :D
End With
Call Macro1
End Sub

Merci à tous qui m'avez bien aidé:D
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@zayab
Vraiment désolé Staple1600 tu as bien raison je viens de me relire et je manque vraiment de clarté.
Par contre il y a trop de données confidentiels pour les uploader
D’où ma suggestion dans mon message précédent ;)
*: ou des fichier "bidons" spécialement créés pour ta question mais qui respectent structures et formats des originaux.
 

zayab

XLDnaute Junior
Hello le fil , le forum
voici un petit partage d’expérience avec quelque chose qui fonctionne
Merci à toutes et tous

Bah c'est balo je ne peux pas téléverser un fichier en .csv je le téléverse en .xls
 

Pièces jointes

  • mon classeur.xlsm
    18.9 KB · Affichages: 17
  • export-exemple .xlsx
    11.2 KB · Affichages: 19
Dernière édition:

zayab

XLDnaute Junior
Bonjour zayab
Bonjour JM ,le Forum
juste pour participer , non testé
la Variable s2 ne serait elle pas une feuille ?

de plus
Dans cette affectation(Set) quelle est la feuille Cible?

Dans la tente
Bonne journée
Amicalement
jean marie

Merci pour tes reponses
j'ai laissé tombé cette solution dont je n'arrivais pas à me sortir j'ai trouvé un autre biais. posté sur le fil moins propre sans doute mais qui fonctionne..;)
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 333
Membres
103 519
dernier inscrit
Thomas_grc11