Copier une feuille d'un classeur vers un autre

Résolu
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013 - 19 juil. 2013 à 10:22
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013 - 24 juil. 2013 à 14:44
Bonjour à tous, je sais que le sujet a déjà été évoqué a maintes et maintes reprise, mais à chaque fois que je veux faire ce genre de chose, j'ai un souci :
Workbooks("sauvegardevitrage.xls").Worksheets("Liste").Copy after:=ThisWorkbook.Worksheets("Vitesse")
ce code me retourne un message d'erreur "Argument ou appel de procédure incorrect, alors que je veux juste copier la feuille liste du classeur sauvegardevitrage dans le classeur où est stocké ce code après la feuille "vitesse"
Merci de m'éclaircir sur l'erreur que je fais régulièrement
ce que je comprend pas c'est que :
ThisWorkbook.Worksheets("liste").Copy after:=Workbooks("sauvegardevitrage.xls").Sheets(xlLast)
fonctionne parfaitement


Fabien

16 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
24 juil. 2013 à 14:17
Bonjour,

Il y a forcément quelque chose qui manque dans le code que tu nous donne...
Celui-ci fonctionne très bien chez moi

Au cas où esaye celui-ci et dis moi ce qu'il en est :

Sub copieSheet()
Dim NomClasseur As String
    NomClasseur = "sauvegardevitrage.xls"
Dim Chemin As String
    Chemin = ThisWorkbook.Path & ""

Application.DisplayAlerts = False
Set fs = CreateObject("Scripting.FileSystemObject")
If Not fs.FileExists(Chemin & NomClasseur) Then
    Workbooks.Add
    ActiveWorkbook.SaveAs Chemin & NomClasseur
Else
    MsgBox ("Ce classeur existe déjà")
    Exit Sub
End If
Debug.Print ThisWorkbook.Name
 ThisWorkbook.Activate
If FExist("liste") Then
    ThisWorkbook.Worksheets("liste").Copy after:=Workbooks("sauvegardevitrage.xls").Sheets(xlLast)
    ThisWorkbook.Worksheets("liste").Delete
    
    'on vérifie que la feuille est bien copiée
     Workbooks(NomClasseur).Activate
     If Not FExist("liste") Then
        MsgBox ("La copie ne s'est pas faite")
    Else
        Debug.Print "COPIE >> OK"
     End If
    Workbooks(NomClasseur).Close savechanges:=True
Else
    MsgBox ("Feuille inexistante")
End If
Application.DisplayAlerts = True




End Sub

Function FExist(NomF As String) As Boolean ' test si la feuille existe
 Application.ScreenUpdating = False
 On Error Resume Next
 FExist = Not Sheets(NomF) Is Nothing
 Application.ScreenUpdating = True
End Function



Encore une fois, As-tu testé en mode pas à pas ?
Est-ce que tu as un message d'erreur ?


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
3
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013
24 juil. 2013 à 14:33
Alors je viens de le tester à l'instant et il fonctionne... presque
J'ai isolé le bout de code dans une nouvelle procédure.
Il me crée bien le classeur, et m'insère une feuille nommé "liste" entre la feuil1 et la feuil2, alors que je lui demande de la mettre à la fin et en plus cette feuille "liste" ne contient rien.
je vous remet le code
Sub test()
    chemin = ActiveWorkbook.Path
    Workbooks.Add
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs chemin & "\sauvegardevitrage.xls"
    ThisWorkbook.Worksheets("Liste").Copy after:=Workbooks("sauvegardevitrage.xls").Sheets(xlLast)
'    ThisWorkbook.Worksheets("liste").Delete
    Workbooks("sauvegardevitrage.xls").Close savechanges:=True
    Application.DisplayAlerts = True
End Sub


Fabien
3
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
24 juil. 2013 à 14:33
oui j'ai le message d'erreur suivant : "Argument ou appel de procédure incorrect"

Même avec mon code ?


Dans ton VBE,
Où se trouve ton code ? ( Dans un Module, Dans une feuille )
Quel est le nom de ton SUB ?




Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
3
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
24 juil. 2013 à 14:38
Et ta feuille initiale porte bien le nom : Liste
(même syntaxe, même orthographe, mêmes majuscules/minuscules ? )


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
19 juil. 2013 à 13:52
Bonjour,

J'ai testé toutes les combinaisons possibles...et la syntaxe est la bonne.

- par contre, est-ce que vos deux classeurs sont ouverts ?
- au cas où, le classeur source ne serait-il pas protégé ?

PS: Pour vos prochains messages, merci d'utiliser les balises de CODE !
'exemple:
Workbooks("Classeur2").Worksheets("zzzz").Copy after:=ThisWorkbook.Worksheets(1)


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013
19 juil. 2013 à 16:11
Merci Jordane,
pardon d'avoir oublier la mise en forme du code
le classeur sauvegardevitrage est créé deux lignes de code plus haut et le second est celui qui exécute le code. Pour la protection, non il n'est pas protégé. Enfin quand vous entendez protéger, vous voulez dire dans le menu outils/ protéger le classeur c'est ca ?


Fabien
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
19 juil. 2013 à 16:38
Enfin quand vous entendez protéger, vous voulez dire dans le menu outils/ protéger le classeur c'est ca ?

Oui.

le classeur sauvegardevitrage est créé deux lignes de code plus haut

Peux-tu nous fournir cette portion de code également ?


Si tu effectues la manipulation "manuellement" avec l'enregistreur de macros, est-ce que ça fonctionne ?


Cordialement,
Jordane
_____________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013
22 juil. 2013 à 09:33
Bonjour,
oui bien sûr,
chemin = ActiveWorkbook.Path
Workbooks.Add
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs chemin & "\sauvegardevitrage.xls"
ThisWorkbook.Worksheets("liste").Copy after:=Workbooks("sauvegardevitrage.xls").Sheets(xlLast)
ThisWorkbook.Worksheets("liste").Delete
Workbooks("sauvegardevitrage.xls").Close savechanges:=True
Application.DisplayAlerts = True

Voilà la parti de code qui permettrait (si la copie voulait bien se faire) de copier la feuille liste à la fin du classeur sauvegardevitrage

Fabien
0
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013
22 juil. 2013 à 09:41
D'ailleurs j'ai un nouveau soucis depuis que j'ai voulu exécuter ce code.
En fait la feuille liste contient des plages de données utilisées comme source dans les zones de liste d'un userform.
Depuis que j'ai voulu l'exporter, mes zones de liste ne sont plus renseignées à part une.
Mes plages de données ont toutes un nom, la seule qui fonctionne est la plage dont la première cellule est en A1.
Pour les autres lorsque je clique sur la flèche pour faire apparaitre la liste, il ne m'affiche qu'une ligne blanche.
De plus, lorsque je veux modifier la valeur de "Rowsource" d'une des zones de liste, il me met un message d'erreur "Impossible de définir la propriété Rowsource. Valeur de propriété nom valide". J'essaie de mon coté de trouver le pourquoi du comment, mais si quelqu'un à une idée, je l'écouterais avec plaisir


Fabien
0
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013
22 juil. 2013 à 10:04
C'est bon pour le rowsource, j'ai juste ajouté dans Rowsource devant chaque nom de plage le nom de la feuille qui contient ces plages :
'liste'!plage


Fabien
0
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013
24 juil. 2013 à 13:11
Bonjour à tous,
personne n'a une petite idée du pourquoi ma copie ne fonctionne pas ?


Fabien
0
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013
24 juil. 2013 à 14:24
oui j'ai le message d'erreur suivant : "Argument ou appel de procédure incorrect"


Fabien
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
24 juil. 2013 à 14:28
Bonjour,

Sur quelle ligne apparaît le message ? Le .Copy ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013
24 juil. 2013 à 14:34
salut Mpi, oui enfin non, le message n'apparait plus maintenant mais oui il apparaissait sur copy


Fabien
0
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013
24 juil. 2013 à 14:36
Jordane non avec ton code ca marche presque... c'est juste que la feuille qui est copié est vierge dans le nouveau classeur


Fabien
0
fabiendag Messages postés 21 Date d'inscription mercredi 30 janvier 2013 Statut Membre Dernière intervention 27 août 2013
24 juil. 2013 à 14:44
Oui, mais en fait ca marche, je me suis juste trompé de fichier. J'avais créé un fichier sauvegardevitrage sur mon bureau à partir d'un fichier test. donc quand j'exécutais dans mon programme (qui n'est pas stocké sur le bureau) le bon fichier était stocké au même endroit.
Désolé je suis un boulet par moment :)
Merci en tout cas à tous les 2


Fabien
0
Rejoignez-nous