Création d'un nouveau fichier Excel
Bonjour le forum,
j'en appelle à vous, car j'ai un problème avec mon code, qui me renvoie une erreur d'éxécution 9: L'indice n'appartient pas à la sélection. Ce code a pour but de créer de nouveaux fichiers excel avec le nom des cellules de la colonne B de mon fichier (à partir de la ligne 4). La où il y a problème, c'est lorsque je veux copier des données d'un autre classeur dont je suis sur du chemin d'accès et du nom dans ce classeur que je viens de créer et dont le nom est la variable.
J'espère avoir été clair et que quelqu'un saura trouver mon erreur, car j'ai beau chercher, les noms de fichiers sont corrects, les emplacements aussi et la syntaxe normalement aussi.
Sub Nouveau_fichier_excel_numéro()
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim nom As String
Dim NbLg As Long, Ligne As Long
NbLg = Range("B" & Rows.Count).End(xlUp).Row
Ligne = 4
While Ligne <= NbLg
nom = Cells(Ligne, 2).Value
'On créer l'objet Excel
Set xlApp = CreateObject("Excel.Application")
'On défini le nombre d'onglets (ici 5)
xlApp.SheetsInNewWorkbook = 2
'On ajoute un classeur peut etre utilisé ici le format standard de classeur pour les tests d'étanchéité
Set xlBook = xlApp.Workbooks.Add
'On créer l'objet onglet dans le nouveau classeur créé
Set xlSheet = xlBook.Worksheets(1)
'On affecte un nom aux l'onglets
xlSheet.Name = "Rapport"
'on libère l'objet onglet pour pouvoir en créer un nouveau ... etc
Set xlSheet = Nothing
Set xlSheet = xlBook.Worksheets(2)
xlSheet.Name = "Février"
'....... On donne un nom à chaque onglets
'On donne un nom au classeur avec le nom défini au dessus et le format 52 qui correspond à xlsm
xlBook.SaveAs "C:\Users\jjelsch\Desktop\" & nom, FileFormat:=52
'On rend le classeur visible
xlApp.Visible = TrueL'erreur est sur cette ligne apparemment (suite du code):
Workbooks("C:\Users\XX\Desktop\XY.xlsm").Sheets(1).Range("B3:Q5").Copy (Workbooks("C:\Users\XX\Desktop\" & nom & ".xlsm").Sheets(1).Range("B3"))
Suite du code:
'On remet la propriété de l'application à 3 (par défaut)
xlApp.SheetsInNewWorkbook = 3
'On ferme l'application
xlApp.Quit
Ligne = Ligne + 1
Wend
End SubMerci d'avance et bonne journée à vous!!
Bonjour
Sans fichier pas évident de vérifier, alors je vais peut-être écrire une con..rie ânerie
Je ne crois pas que dans les objets Workbooks il faut inclure le chemin
Workbooks("[barrer]C:\Users\XX\Desktop\[/barrer]XY.xlsm").Sheets(1).Range("B3:Q5").Copy (Workbooks("[barrer]C:\Users\XX\Desktop\" &[/barrer]nom & ".xlsm").Sheets(1).Range("B3"))Ce qui donne
Workbooks("XY.xlsm").Sheets(1).Range("B3:Q5").Copy (Workbooks(nom & ".xlsm").Sheets(1).Range("B3"))Bonjour Banzai64,
non le problème ne vient pas de là apparemment puisque j'ai toujours la même erreur en faisant cela.
Je te joins les 2 fichiers utilisés pour que tu puisses tester. Le classeur_1 est le classeur d'où je veux récupérer les données, tandis que l'autre fichier excel contient la macro.
erreur de ma part, mais qui ne change rien au code à proprement parlé vu que je l'avais testé: l'extension dans la macro est à changer pour le classeur_1 en xlsx et n'est pas en xlsm (fichier que j'avais testé). Désolé!
Bonjour
D'abord je ne sais pas pourquoi
A chaque fois "CreateObject("Excel.Application")" me crée une instance Excel 2003 ??????
Ensuite quand tu fournis des fichiers essaies qu'ils collent à la macro
Nom du fichier Classeur1 ---> dans la macro Classeur_1
Pas de feuille Liste
Questions :
Pourquoi tu sauves ton nouveau fichier en xlsm ?
Pourquoi une fois enregistré, tu modifies la page "Rapport" et tu ne le sauves pas ?
Je te propose une solution
A toi de dire si elle te convient
Il faut le classeur "Classeur1.xlsx" ouvert
Option Explicit
Sub Nouveau_fichier_excel_numéro()
Dim nom As String
Dim NbLg As Long, Ligne As Long
Dim Chemin As String
Dim NbPages As Integer
Dim Ws As Worksheet
Chemin = ThisWorkbook.Path & "\" ' Rectifies le chemin
Set Ws = Sheets(1)
NbLg = Ws.Range("B" & Rows.Count).End(xlUp).Row
Ligne = 4
NbPages = Application.SheetsInNewWorkbook
'On défini le nombre d'onglets (ici 5) --> Commentaire inutile
Application.SheetsInNewWorkbook = 2
While Ligne <= NbLg
nom = Ws.Cells(Ligne, 2).Value
With Workbooks.Add
.Sheets(1).Name = "Rapport"
.Sheets(2).Name = "février"
Workbooks("Classeur1.xlsx").Sheets("Liste").Range("A1:Q3").Copy .Sheets("Rapport").Range("B3")
.SaveAs Chemin & nom, FileFormat:=52 ' Pourquoi xlsm
.Close ' Fermeture du fichier
End With
Ligne = Ligne + 1
Wend
Application.SheetsInNewWorkbook = NbPages
End SubJ'ai adapté ton code à mon cas et effectivement ça marche bien, merci. Je ne vois pas l'erreur que j'avais fait dans mon autre code, mais celui la fonctionne à merveille donc parfait
Je te remercie beaucoup.
Sinon je devais utiliser des fichiers xlsm, car ce format de fichier permet d'intégrer les macros, que je devrais faire plus tard dans ce fichier.
Désolé pour les petites erreurs dans le code et le nom des fichiers que j'ai transmis, j'ai du le modifier à la va vite, car le vrai fichier excel est un fichier long et lourd avec des données confidentielles. Encore désolé!
C'est vrai que c'est plus intelligent de sauvegarder après la modif dans l'onglet. Je dois pas être dans mon asiette aujourd'hui. Ca fait qu'une semaine que j'ai commencé à apprendre le code VBA pour mes macros Excel, je dois pas être au point encore.
Je clos le sujet, mon problème est résolu. Merci énormément en tout cas Banzai64!
COrdialement