VBA - Copie d'une feuille d'un classeur dans un autre classeur

nanie13

XLDnaute Nouveau
Bonjour,
Débutante en VBA, je galère pour finaliser mon facturier.
Je possède deux classeurs : 1 classeur "modèles" et 1 classeur "factures".
Je souhaiterais copier la facture du classeur "modèles", dans le classeur "factures".
Ma macro fonctionne si j'indique le numéro de la dernière feuille.
Merci pour votre aide.


Sub Copie_Facture()
'var
Dim nbfeuille As Integer
Dim numfact As Integer
nbfeuille = Sheets.Count 'compte le nombre de feuilles
ActiveSheet.Copy After:=Workbooks("Factures Eric 2007.xls").Sheets(19)
nbfeuille = Sheets.Count
numfact = nbfeuille + 1
Sheets(nbfeuille).Name = "Facture n° " & (numfact)
Range("G3").Value = numfact
Sheets(nbfeuille).Select
End Sub
 

pierrejean

XLDnaute Barbatruc
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

bonjour nanie13

teste cette modif

Code:
Sub Copie_Facture()
'var
[COLOR=red]Dim nbmesfactures As integer[/COLOR]
[COLOR=red]nbmesfactures=Workbooks("Factures Eric 2007.xls").Sheets.count[/COLOR]
Dim nbfeuille As Integer
Dim numfact As Integer
nbfeuille = Sheets.Count 'compte le nombre de feuilles
ActiveSheet.Copy After:=Workbooks("Factures Eric 2007.xls").Sheets([COLOR=red]nbmesfactures[/COLOR])
nbfeuille = Sheets.Count
numfact = nbfeuille + 1
Sheets(nbfeuille).Name = "Facture n° " & (numfact)
Range("G3").Value = numfact
Sheets(nbfeuille).Select
End Sub
 

nanie13

XLDnaute Nouveau
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

bonjour nanie13

teste cette modif

Code:
Sub Copie_Facture()
'var
[COLOR=red]Dim nbmesfactures As integer[/COLOR]
[COLOR=red]nbmesfactures=Workbooks("Factures Eric 2007.xls").Sheets.count[/COLOR]
Dim nbfeuille As Integer
Dim numfact As Integer
nbfeuille = Sheets.Count 'compte le nombre de feuilles
ActiveSheet.Copy After:=Workbooks("Factures Eric 2007.xls").Sheets([COLOR=red]nbmesfactures[/COLOR])
nbfeuille = Sheets.Count
numfact = nbfeuille + 1
Sheets(nbfeuille).Name = "Facture n° " & (numfact)
Range("G3").Value = numfact
Sheets(nbfeuille).Select
End Sub
Bonjour et merci pour votre réponse,
Je viens de tester votre macro, mais elle bloque au niveau de la seconde ligne
 

matthieu33

XLDnaute Occasionnel
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

Bonsoir nanie13, pierrejean et le forum,

Peux-tu essayer avec le code ci-dessous ?

Code:
Sub Copie_Facture()
    'var
    Dim nbfeuille As Integer
    Dim numfact As Integer
    nbfeuille = Sheets.Count 'compte le nombre de feuilles
    ActiveSheet.Copy After:=Workbooks("factures.xls").Sheets(Workbooks("factures.xls").Worksheets.Count)
    nbfeuille = Sheets.Count
    numfact = nbfeuille + 1
    Sheets(nbfeuille).Name = "Facture n° " & (numfact)
    Range("G3").Value = numfact
    Sheets(nbfeuille).Select
End Sub

@+
 

nanie13

XLDnaute Nouveau
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

Bonjour Matthieu 33 et merci,
Je viens d'essayer votre macro, cela ne fonctionne pas, elle bloque au niveau :
ActiveSheet.Copy After:=Workbooks("factures.xls").Sheets(Workbooks("factures.xls").Worksheets.Count)
 

matthieu33

XLDnaute Occasionnel
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

Bonsoir nanie13,

Lorsque cette procédure est lancée, est-ce que le classeur "factures.xls" est ouvert ?
Si ce n'est pas le cas, il faut rajouter l'ouverture du classeur "factures.xls" avant la copie de la feuille du classeur "modèles.xls" dans le classeur "factures.xls" :

Code:
Sub Copie_Facture()
    'var
    Dim nbfeuille As Integer
    Dim numfact As Integer
    nbfeuille = Sheets.Count 'compte le nombre de feuilles
    Workbooks.Open ThisWorkbook.Path & "\" & "factures.xls"
    ActiveSheet.Copy After:=Workbooks("factures.xls").Sheets(Workbooks("factures.xls").Worksheets.Count)
    nbfeuille = Sheets.Count
    numfact = nbfeuille + 1
    Sheets(nbfeuille).Name = "Facture n° " & (numfact)
    Range("G3").Value = numfact
    Sheets(nbfeuille).Select
End Sub

Pour info, j'ai considéré que le classeur "factures.xls" se trouvait dans le même répertoire que le classeur "modèles.xls".
Après si cela ne fonctionne toujours pas, il nous faudra un extrait du fichier pour résoudre le problème.

Merci

@+
 

nanie13

XLDnaute Nouveau
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

Bonjour Matthieu33 et merci,
Cette macro ne fonctionne toujours pas.
Il m'est impossible de vous adresser mes fichiers, ils dépassent tous les deux la limite du forum et je ne sais pas comment faire pour Ajouter un fichier à partir d'une URL
 

nanie13

XLDnaute Nouveau
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

Bonjour,
J'ai changé ma macro, cette fois elle insère bien la facture en dernier, mais elle bloque lorsqu'il faut renommer la facture :confused:
Merci pour votre aide

Sub Copie_Facture()

Dim nbfeuille As Integer
Dim numfact As Integer

nbfeuille = Workbooks("Factures Eric 2007.xls").Sheets.Count
ActiveSheet.Copy After:=Workbooks("Factures Eric 2007.xls").Sheets(nbfeuille)

'La macro bloque à ce niveau
ActiveSheet.Name = "Facture n° " & (nbfeuille - 1)
Range("G3").Value = nbfeuille - 1

'La feuille est renommée "Facture n° ", comment faut il faire pour faire apparaître son numéro
ActiveSheet.Name = "Facture n° "

End Sub
 

matthieu33

XLDnaute Occasionnel
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

Bonjour nanie13,

Il se peut que le n° de facture à attribuer existe déjà.
La variable "nbfeuille" contient le nombre de feuille avant insertion de la nouvelle feuille.
Après insertion de la nouvelle feuille, je dirai que la variable "nbfeuille" vaut "nbfeuille + 1".

Pouvez-vous faire un essai en mettant ?
Code:
nbfeuille = nbfeuille + 1
ActiveSheet.Name = "Facture n° " & (nbfeuille)
Range("G3").Value = nbfeuille

@+
 

pierrejean

XLDnaute Barbatruc
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

re

je pense pour ma part a

nbfeuille = Workbooks("Factures Eric 2007.xls").Sheets.Count
ActiveSheet.Copy After:=Workbooks("Factures Eric 2007.xls").Sheets(nbfeuille)

ActiveSheet.Name = "Facture n° " & (nbfeuille)
Range("G3").Value = nbfeuille

explication: nbfeuille est le nombre de feuilles de Factures Eric.... avant copie
s'il y a une 1ere feuille qui n'est pas une facture, la derniere facture est Facture N° nbfeuille-1
celle que l'on vient de copier sera donc Facture N° nbfeuille
 

nanie13

XLDnaute Nouveau
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

Bonjour,
Je suis enfin arrivée au bout de ma macro, tout fonctionne parfaitement, merci à tous

Dim nbfeuille As Integer
Dim numfact As Integer
nbfeuille = Workbooks("Factures Eric 2007.xls").Sheets.Count
ActiveSheet.Copy After:=Workbooks("Factures Eric 2007.xls").Sheets(nbfeuille)
ActiveSheet.Name = "Facture n° " & (nbfeuille)
Range("G3").Value = nbfeuille
 

Yoann_c

XLDnaute Nouveau
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

Bonjour,

je me permet un déterrage de topic car j'ai un problème assez similaire mais pas la même erreur.
Je suis en train d'écrire une fonction pour pouvoir créer un nouveau classeur en passant un chemin et une feuille mais je bloque la :

Code:
xlSheet1.Move before:=xlBook2.Worksheets(1)

J'ai cette erreur :
La méthode Move de l'objet _worksheet a échoué

J'ai la même erreur avec .copy

Voici mon code complet :

Code:
Function creerFichier(chemin As String, feuille As Worksheet)
Dim xlApp As Excel.Application

'Dim xlBook1 As Excel.Workbook
Dim xlSheet1 As Excel.Worksheet
Dim xlBook2 As Excel.Workbook
Dim xlSheet2 As Excel.Worksheet


    'On créer l'objet Excel
    Set xlApp = CreateObject("Excel.Application")
    'On défini le nombre d'onglets
    xlApp.SheetsInNewWorkbook = 1
    'On ajoute un classeur
    Set xlBook2 = xlApp.Workbooks.Add
    'On donne un nom au classeur
    xlBook2.SaveAs (chemin)
    'On rend le classeur visible
    'xlApp.Visible = True
    
    ' Selection de la feuille source du classeur actif par son nom.
    ' (feuille à copier)
    Set xlSheet1 = feuille
   
    ' Feuille destination
    'Set xlSheet2 = xlBook2.Worksheets("Feuil1")
    Dim nbfeuille  As Integer
    
   nbfeuille = xlBook2.Sheets.Count
   ' ActiveSheet.Copy before:=Workbooks("Factures Eric 2007.xls").Sheets(nbfeuille)
    ' Copie de la feuille.
    xlSheet1.Move before:=xlBook2.Worksheets(1)

End Function

Quelqu'un saurait l'origine de l'erreur et comment y remédier ?
 

YANN-56

XLDnaute Barbatruc
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

Bonsoir nanie, et à tous,

Voici un petit truc que je me suis fait.

Tu pourras le regarder, le temps que je l'adapte concrètement à ta demande.

Pour l'instant, il y a des "Famine" qui hurlent! :D

Amicalement.

Yann
 

Pièces jointes

  • COPIE_FEUILLE.xls
    24 KB · Affichages: 2 533
  • COPIE_FEUILLE.xls
    24 KB · Affichages: 2 758
  • COPIE_FEUILLE.xls
    24 KB · Affichages: 2 840

YANN-56

XLDnaute Barbatruc
Re : VBA - Copie d'une feuille d'un classeur dans un autre classeur

Finalement entre deux apéros: :)

Idée jointe... Hic! :(

8 lignes de codes sans fioritures pour faire "Pro"

Si tu as du mal à l'adapter à ton projet, tu me le dis
(Et si je suis à coté de la plaque, il ne faut pas non plus hésiter)

Amicalement.

Yann
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou