Création de fichiers .xlsx à partir d'une copie d'un onglet

Bonjour,

je débute en macro, je tâtonne. j'ai un fichier contenant plusieurs onglets interagissant entre eux. dont un onglet contenant une liste (71 000 lignes).

j'ai dedans, un onglet (onglet: ficheenquete) qui est une fiche d'enquête (FE), en indiquant un numéro de fiche dans une cellule, cette fiche va chercher des informations dans la liste pour se remplir (principalement avec des formules rechercheV).

j'ai voulu créer une macro qui me permet de générer une quantité de fiches (fiche FE). le but est d'indiquer un numéro de départ, un numéro de fin, et la macro va générer chaque numéro dans la cellule qui permet à la fiche de se mettre à jour, puis va copier l'onglet et le coller dans un nouveau classeur qui portera un nom spécifique en fonction d'un élément de la fiche (création d'une fiche FE seule). le tout en cliquant sur un bouton.

ce qui donne ceci :

Sub Bouton1_Cliquer()
Dim FE_depart As Integer, FE_fin As Integer, duree_de_boucle As Integer, chemin As String, nom As String
' génération boite pour demander numéro de FE de départ et final
FE_depart = Application.InputBox("Entrer le numéro de la première FE à génerer", Type:=1)
FE_fin = Application.InputBox("Entrer le numéro de la denière FE à génerer", Type:=1)
' boucle de création
duree_de_boucle = FE_fin - FE_depart + 1
For i = 1 To duree_de_boucle
    Range("J4").Value = FE_depart ' copie du numéro de FE dans sa case
    chemin = ThisWorkbook.Path & "\"
    nom = "FE " & [J4].Value & "(" & [Q3].Value & ").xlsx" 'nom sous forme FE 1289 (ref doc)
    With ActiveWorkbook
        Application.DisplayAlerts = False  ' enleve le message d'alerte car il enregistre sou format xlsx
        .SaveAs Filename:=chemin & nom
        .Close
    End With
    FE_depart = FE_depart + 1  ' incrémentation
Next
End Sub

cette macro fonctionne. (youpi!!)

par contre, la macro copie tout avec les formules et donc les liaisons ce qui alourdi chaque fiche et peut causer des soucis. j'aimerais donc copier l'onglet et le coller avec les valeurs brutes (pastevalues).

j'ai donc eu l'idée de créer un second onglet qui servira à recevoir les données brutes et qui ne contiendra pas le bouton qui déclenche la macro (onglet: ficheenquete2). et de copier cet onglet pour le coller dans un nouveau classeur.

j'ai donc voulu rajouter ce bout de code :

Worksheets("Ficheenquete").Range("A1:L48").Copy Worksheets("Ficheenquete2") _
    .Range("A1:L48").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

ce qui donne ceci :

Sub Bouton1_Cliquer()
Dim FE_depart As Integer, FE_fin As Integer, duree_de_boucle As Integer, chemin As String, nom As String
' génération boite pour demander numéro de FE de départ et final
FE_depart = Application.InputBox("Entrer le numéro de la première FE à génerer", Type:=1)
FE_fin = Application.InputBox("Entrer le numéro de la denière FE à génerer", Type:=1)
' boucle de création
duree_de_boucle = FE_fin - FE_depart + 1
For i = 1 To duree_de_boucle
    Range("J4").Value = FE_depart ' copie du numéro de FE dans sa case
    Worksheets("Ficheenquete").Range("A1:L48").Copy Worksheets("Ficheenquete2") _
    .Range("A1:L48").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    chemin = ThisWorkbook.Path & "\"
    nom = "FE " & [J4].Value & "(" & [Q3].Value & ").xlsx" 'nom sous forme FE 1289 (ref doc)
    With ActiveWorkbook
        Application.DisplayAlerts = False  ' enleve le message d'alerte car il enregistre sous format xlsx
        .SaveAs Filename:=chemin & nom
        .Close
    End With
    FE_depart = FE_depart + 1  ' incrémentation
Next
End Sub

malheureusement, j'ai un "erreur de compilation attendu:fin d'instruction" situé sur le Paste de Paste:=xlPasteValues

quelqu'un aurait il la solution ?

je peux fournir le fichier mais il fait 17 MO et il faudrait que je le purge en grande partie car il y a pas mal de données.

je précise que excel indique une version 2005 (ce qui m'étonne car je fonctionne en office 365 avec onedrive)

je vous remercie d'avance pour l'aide que vous pourrez m'apporter :)

Bonjour nighty, le forum,

Peut-être ainsi:

.PasteSpecial(xlPasteValues)
 Worksheets("Ficheenquete").Range("A1:L48").Copy
 Worksheets("Ficheenquete2") _
    .Range("A1").PasteSpecial (xlPasteValues), Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

Cordialement,

génial, ça à l'air de fonctionner (il ne me fait plus le message d'erreur).

par contre j'ai des cellules fusionnées, normalement identiques dans les deux onglets. et pourtant j'ai un nouveau message d'erreur :

erreur d’exécution '1004': pour ce faire, la taille des cellules fusionnées doit être identique.

j'ai pourtant créé le second onglet en dupliquant le premier (je vais creuser un peu)

edit: ça semble venir justement du fait d'avoir des cellules fusionnées. mais sans fusionner, impossible d'avoir un document présentable...

voici à quoi ressemble ma fiche

capture

Bonjour,

Et avec

Worksheets("Ficheenquete2").Range("A1:L48").value = Worksheets("Ficheenquete").Range("A1:L48").value

?

Sinon, si les fusions ne sont pas à la verticale, tu peux toujours t'en passer en faisant plutôt centrer sur plusieurs colonnes. La manipulation est quasi la même de base, ne fait aucune différence esthétiquement, mais n'explose pas toute ta structure et ne te pose pas de soucis plus tard !

merci JoyeuxNoel, dire que les valeurs d'un onglet sont les valeur d'un autre, ça fonctionne.

chose étrange tout de même : une date dans le premier onglet 06/02/2012 devient dans le deuxième onglet 02/06/2012 (et zut !)

par contre, maintenant il ne veut plus m'enregistrer l'onglet sous le format .xlsx alors qu'avant il le faisait (!?!) j'avais déjà créé pas mal de fiches en .xlsx

erreur 1004 : impossible d'utiliser cette extension avec le type de fichier sélectionné. Modifiez l'extension du fichier dans la zone Nom du fichier ou sélectionnez un autre type de fichier dans la zone Type de fichier.

(je n'ai plus trouvé comment éditer mon message...)

hourra, j'ai trouvé, il suffit d'indiquer

.SaveAs Filename:=chemin & nom, FileFormat:=xlOpenXMLWorkbook

par contre je n'ai toujours pas d'explication pourquoi en indiquant que les valeurs du second onglet sont les les valeurs du premier, j'ai certaines dates qui s'inversent.

une date dans le premier onglet 06/02/2012 devient dans le deuxième onglet 02/06/2012 (une date en 14/02/2017 restera 14/02/2017)

voici mon code actuel

Sub Bouton1_Cliquer()
Dim FE_depart As Integer, FE_fin As Integer, duree_de_boucle As Integer, chemin As String, nom As String
' génération boite pour demander numéro de FE de départ et final
FE_depart = Application.InputBox("Entrer le numéro de la première FE à génerer", Type:=1)
FE_fin = Application.InputBox("Entrer le numéro de la denière FE à génerer", Type:=1)
' boucle de création
duree_de_boucle = FE_fin - FE_depart + 1
For i = 1 To duree_de_boucle
    ' copie du numéro de FE dans sa case (pour mettre à jour la fiche)
    Range("J4").Value = FE_depart

    'copie les valeurs du premier onglet dans le second
    Worksheets("Ficheenquete2").Range("A1:L48").Value = Worksheets("Ficheenquete").Range("A1:L48").Value

    ' configure le nom et chemin d'enregistrement en utilisant le premier onglet
    chemin = ThisWorkbook.Path & "\"
    nom = "FE " & [J4].Value & "(" & [Q3].Value & ").xlsx" 'nom sous forme FE 1289 (ref doc)
    Worksheets("Ficheenquete2").Copy 'copie l'onglet avec les valeurs

    With ActiveWorkbook
        Application.DisplayAlerts = False  ' enleve le message d'alerte car il enregistre sous format xlsx
        .SaveAs Filename:=chemin & nom, FileFormat:=xlOpenXMLWorkbook 'enregistre l'onglet au format xlsx
        .Close
    End With
    FE_depart = FE_depart + 1  ' incrémentation
Next
End Sub

si quelqu'un a la solution.

note: dans le premier onglet, la cellule qui indique la date vient prendre l'info ailleurs par un rechercheV (ou Vlookup).

edit: trouvé ... la valeur d'origine est en format standard et pas en format date.

tout est résolu, il me reste à indiquer que c'est résolu :)

Rechercher des sujets similaires à "creation fichiers xlsx partir copie onglet"