Copies de feuilles d'un classeur VBA

Résolu/Fermé
vba_debutant Messages postés 2 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 4 août 2009 - 28 juil. 2009 à 10:46
vba_debutant Messages postés 2 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 4 août 2009 - 4 août 2009 à 09:03
Bonjourà toutes et tous,
le but de ma macro est :
à la fermeture d'un fichier type fichier_test.xls, demander si l'utilisateur veut enregistrer, si oui alors :
enregistrer les feuilles "Recap_test", "Test1", "Test2" et "Test3" dans un fichier qui s'appellera "fichier_test_date.xls" (le créé s'il n'existe pas), si les feuilles existent alors il copie le contenu, sinon il les créé et copie le contenu.
j'ai en fait un problème de formalisme.
la gestion de la fermeture se fait bien, le test/création du fichier "fichier_test_date.xls" fonctionne.
j'essaye de tester si la feuille existe dans le nouveau fichier et là ça bloque :
j'utilise une fonction de gestion d'erreur type:
Function FeuilleExiste(wk As Workbook, stFeuille) As Boolean
On Error Resume Next
FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing)
End Function
quand j'appelle ma fonction, j'ai une erreur d'execution "9", l'indice n'appartient pas à la selection :
Dim wb As Workbook
If FeuilleExiste(wb, "Test1") Then ...
j'ai essayé en donnant à wb le chemin + nom +.xls, chemin + nom, nom + .xls, nom et toujours la même erreur :s

autres questions :
- est-ce qu'un workbooks(wb).sheets("Test1").add fonctionnerait pour créer une feuille dans le nouveau classeur ?
- pour ce qui est de la copie des feuilles est-ce que la déclaration suivante suffit ?:
target = "c:\....fichier_test_date.xls"
source = ActiveWorkbook
Workbooks.Open target, 0, ReadOnly:=False
Workbooks(source).Sheets("Test1").Copy Workbooks(target).Sheets("Test1")

Merci d'avance de vos réponses

2 réponses

melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
2 août 2009 à 12:16
Bonjour,

a chaque test de si ta feuille existe :

Dim xlSheet As Worksheet
dim a as variant
For Each xlSheet In ThisWorkbook.Worksheets ' à chaque feuille du classeur ouvert
if activesheets.name = ("nomdetafeuillecherchée") then

a=1
end if
Next xlSheet

if a=0 then
copie ton code si la feuille n'existepas
else
copie ton code si la feuille existe
end if



- est-ce qu'un workbooks(wb).sheets("Test1").add fonctionnerait pour créer une feuille dans le nouveau classeur ? oui ca marche
- pour ce qui est de la copie des feuilles est-ce que la déclaration suivante suffit ?:
target = "c:\....fichier_test_date.xls"
source = ActiveWorkbook
Workbooks.Open target, 0, ReadOnly:=False
Workbooks(source).Sheets("Test1").Copy Workbooks(target).Sheets("Test1")

C'est possible que cela marche mais j'ai plutot l'habitude de faire ainsi :
workbooks(source).activate
sheest("test1").select
cells.copy
workbooks(target).activate
sheets("test1").select
activesheet.paste
0
vba_debutant Messages postés 2 Date d'inscription mardi 28 juillet 2009 Statut Membre Dernière intervention 4 août 2009
4 août 2009 à 09:03
Merci de votre réponse, je l'essayerais dès que possible.

J'ai opté pour un solution que je considère moins satisfaisante, mais utile dans le cas que je traite.
0