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 !
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")
Des heures que je passe dessus...
Je l'ai retourné dans tous les sens. Enfin presque.
Pas très fière quand même.
Merci Staple 1600 je regarde sur mon ordi des que possible.
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
@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.
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.
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
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
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?
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 😀
End With
Call Macro1
End Sub
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
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..😉
- 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