Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Macro d'export de donnée : erreur 1004

V.MAOT

XLDnaute Nouveau
Bonjour à tous,

Suite à la réalisation d'une macro, je me retrouve face à une problématique que je n'arrive à résoudre. Ainsi je me permets de solliciter l'aide de la communauté pour y répondre et trouver une solution.

Voici le code concerné:
Code:
Sub Export_Equipe()
Dim NewBook As Workbook
Dim Template_Tal As String
Dim Team As String
Dim Template As String
Dim Ligne As Integer
Dim Path As String
Dim File As Variant

Application.ScreenUpdating = False

'Calage nom du fichier actuel
Template_Tal = ActiveWorkbook.Name

'Recopie sur nouveau fichier
Set NewBook = Workbooks.Add
NewBook.SaveAs FileFormat:=xlExcel8
Ligne = 4

'Boucle sur la liste des membres de l'equipe
'### Attention liste temporaire constituee sur onglet Setup ###
Workbooks(Template_Tal).Activate
Worksheets("Export").Activate

    '### Attention calage en dur de la colonne F ###
    Do While Range("C" & Ligne).Value <> ""
    Template = Range("C" & Ligne).Value

    'Preparation de l'onglet individuel
    Range("C_ACTEUR").Value = Template
    Calculate

    'Transfert sur nouveau fichier
    ThisWorkbook.Sheets("Template_form").Copy Before:=NewBook.Sheets(1)

    'Recopie en valeur sur un nouveau formulaire
    Range("A1:V63").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues
    Application.CutCopyMode = False

    Range("P30").Select
    Formule = "=IF(R27=""High"",""Yes"",""No"")"
    ActiveCell.Formula = Formule

    'Calage nom onglet pour l'individu
    NewBook.Activate
    NewBook.Sheets(1).Name = Template

    'Fin de boucle
    Workbooks(Template_Tal).Activate
    Worksheets("Export").Activate
    Ligne = Ligne + 1
    Loop

'Purge onglet non requis
NewBook.Activate
Ligne = ActiveWorkbook.Sheets.Count

If Ligne > 1 Then
Application.DisplayAlerts = False
NewBook.Sheets(Ligne).Delete
Application.DisplayAlerts = True

Else
Application.ScreenUpdating = True
MsgBox ("None")
Application.ScreenUpdating = False
End If

'Sauvegarde et fermeture nouveau fichier 
Path = CreateObject("WScript.Shell").SpecialFolders("Desk top") & "\" & ActiveWorkbook.Name
File = Application.GetSaveAsFilename(Thepath, "MicrosoftExcel,*.xls")
If File = False Then Exit Sub
Application.DisplayAlerts = False
NewBook.SaveAs File
Application.DisplayAlerts = True
NewBook.Close
Workbooks(Template_Tal).Activate
Worksheets("Export").Activate
Range("C4").Activate

'Message de confirmation
Application.ScreenUpdating = True
MsgBox (" - File available - ")

End Sub

Le fichier excel se compose de trois onglets:
  1. Template_form = formulaire d'évaluation
  2. Report = onglet de base de données qui alimente Template_form pour certaines informations
  3. Export = onglet d'export, où l'utilisateur copie les noms des personne évaluées et lance la macro

La macro a pour objectif de créer un fichier avec un onglet par personnes évaluées (formulaire rempli avec les données de l'onglet "Report").


Le problème:

Lorsque j’exécute la macro, une erreur apparaît :
" Erreur d'exécution 1004 : Excel ne parvient par à insérer les feuilles dans le classeur de destination car il contient moins de lignes et de colonnes que le classeur source. Pour déplacer ou copier les données vers le classeur de destination, vous pouvez les sélectionner, puis utiliser les commandes copier et coller pour les insérer dans les feuilles d'un autre classeur."

D'autre part, le code suivant est mis en surbrillance:
Code:
'Transfert sur nouveau fichier
    ThisWorkbook.Sheets("Template_form").Copy Before:=NewBook.Sheets(1)

Ce que je comprends c'est que le format n'est pas le bon et qu'il peut s'agir d'une erreur de compatibilité.
J'ai essayé de changer le format du nouveau classeur, mais sans succès. Je n'arrive vraiment pas à résoudre ce problème même avec l'aide de google.

Merci d'avance pour votre aide.
Victor
 

Pièces jointes

  • 160309 - Exemple_form.xlsm
    42.2 KB · Affichages: 46
Dernière modification par un modérateur:

Roland_M

XLDnaute Barbatruc
Re : Macro d'export de donnée : erreur 1004

bonjour,

je n'ai pas regardé car ton explication serait un peu trop longue à assimiler

mais ici, il faut d'abord destination du workbook seulement après Before ou autre !

à essayer:
ThisWorkbook.Sheets("Template_form").Copy Destination:=NewBook, Before:=NewBook.Sheets(1)
 

V.MAOT

XLDnaute Nouveau
Re : Macro d'export de donnée : erreur 1004

Bonjour,

Merci pour ta réponse.
Cela ne fonctionne pas, cependant le message d'erreur est différent : "Erreur définie par l'application ou par l'objet"

La ligne du code est toujours en surbrillance.

Victor
 

Roland_M

XLDnaute Barbatruc
Re : Macro d'export de donnée : erreur 1004

re

tu dois avoir une erreur dans l'attribution de tes variables !?
as-tu essayé d'afficher avec MsgBox ce que valent tes variables !?

ThisWorkbook.Sheets("Template_form").Copy Destination:=NewBook, Before:=NewBook.Sheets(1)

"Template_form" < est-ce bien ce nom là ?!

NewBook < est il bien défini ?! pour ici il faut seulement le nom du workbook ! pas de chemin et autre !

ne serait ce pas plutôt: (très probablement !?)
ThisWorkbook.Sheets("Template_form").Copy Destination:=WorkBooks(NewBook.Name), Before:=WorkBooks(NewBook.Name).Sheets(1)

ceci doit fonctionner:
ThisWorkbook.Sheets("NomFeuil").Copy Destination:=WorkBooks("NomDuClasseur"), Before:=WorkBooks("NomDuClasseur").Sheets(1)

encore faut il que ce classeur soit chargé !
 
Dernière édition:

V.MAOT

XLDnaute Nouveau
Re : Macro d'export de donnée : erreur 1004

Bonjour Roland,

Merci pour ta réponse.

Ce code déclare correctement Newbook, mais peut-être que je me trompe.

Code:
NewBook = Workbooks.Add

Qu'entends-tu par chargé ?

Merci pour ton aide.
Victor
 

Roland_M

XLDnaute Barbatruc
Re : Macro d'export de donnée : erreur 1004

re

je veux dire qu'il est chargé dans excel, mais il est chargé puisque je viens de voir ceci
Set NewBook = Workbooks.Add

bien entendu s'il n'est pas clos, et donc c'est bien là l'erreur !
si tu as fait Set NewBook = Workbooks.Add

alors c'est bien NewBook.Name qu'il faut mettre !

soit comme ceci:

WorkBooks(NewBook.Name)
 
Dernière édition:
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…