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 = True

L'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 Sub

Merci 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é!

48classeur1.xlsx (8.45 Ko)

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 Sub

J'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

Rechercher des sujets similaires à "creation nouveau fichier"