VBA copier onglet dans un autre classeur via un bouton

Résolu/Fermé
vico31 - Modifié par vico31 le 18/07/2013 à 14:08
 Klaradoc - 23 juin 2014 à 11:31
Bonjour tous le monde,

Je suis sur excel 2003, en stage et débutant en VBA et je souhaite réaliser quelque chose de simple, de prime abord......

Je souhaite grâce à mon bouton "Extraction de données", extraire l'onglet d'un classeur "wbSource" pour le copier dans un autre classeur "wbRecap", je souhaite copier l'onglet en entier car il ne contient que des données, et les classeurs dont je souhaite réaliser l'importation sont fermés.




Voici le code que j'utilise, je l'ai pris d'un ami que j'ai ensuite recyclé pour mon compte (Bidouille).

Private Sub CommandButton1_Click()
Dim wbRecap As Workbook 'fichier recap
Dim wsRecap As Worksheet 'feuille où on écrit les données
Dim wbSource As Workbook 'fichier à ouvrir
Dim wsSource As Worksheet 'feuille où on cherche les données
Dim DernLign As Integer 'ligne où on écrit les données
Dim vFichiers As Variant 'noms des fichiers
Dim LaFeuille As Worksheet
Dim i As Integer, ListeAcopier
Dim k As Integer
Dim rgRecap As Range 'plage où on copie les données

Set wbRecap = ThisWorkbook 'Fichier récapitulatif


' --- Ouvrir boite de dialogue pour sélectionner les fichiers à ouvrir
vFichiers = Selectionner_Fichiers("Sélectionner les fichiers à compiler") 'Appel de Fonction pour ouvrir fichiers

' --- Vérifier qu'au moins un fichier à été sélectionné
If Not IsArray(vFichiers) Then
Debug.Print "Aucun fichier sélectionné."
MsgBox "Erreur! Aucun/Mauvais fichier sélectionné."
Exit Sub
End If
On Error Resume Next

Application.ScreenUpdating = False

' --- Boucle à travers les fichiers
For k = 1 To UBound(vFichiers)
Application.StatusBar = ">> Lecture du fichier #" & k & "/" & UBound(vFichiers)

' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
' C'est ici qu'on écrit les instructions
Set wbSource = Workbooks.Open(vFichiers(k)) 'on ouvre le fichier
Set wsSource = wbSource.Sheets(1) 'On copie les données de la feuille 4
Set wsRecap = wbRecap.Sheets(2).Add
Set wsSource.Copy After =Workbooks("Absentéisme automatisation.xls").Sheets(1)



' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Next k

Application.ScreenUpdating = True
Application.StatusBar = False



End Sub

Function Selectionner_Fichiers(sTitre As String) As Variant
Dim sFiltre As String, bMultiSelect As Boolean

sFiltre = "Fichiers XYZ (.xls)(.xlsm), *.xls*"
bMultiSelect = True 'Permet de choisir plusieurs fichiers à la fois
Selectionner_Fichiers = Application.GetOpenFilename(Filefilter:=sFiltre, Title:=sTitre, MultiSelect:=bMultiSelect)
End Function


En sachant que mon problème ce situe à ce niveau:

C'est ici qu'on écrit les instructions
Set wbSource = Workbooks.Open(vFichiers(k)) 'on ouvre le fichier
Set wsSource = wbSource.Sheets(1) 'On copie les données de la feuille 4
Set wsRecap = wbRecap.Sheets(2).Add
Set wsSource.Copy After =Workbooks("Absentéisme automatisation.xls").Sheets(1)






Effectivement le fichier que je souhaite importer s'ouvre mais ne se copie pas dans le classeur "wbRecap".

De, plus un message d'erreur apparait au niveau du AFter

Merci pour l'aide que vous pourrez m'apporter j'ai chercher tout et n'importe quoi sur internet mais je ne trouve pas la solution .....
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 juil. 2013 à 14:39
Bonjour,

On va essayer...
Remplace tes 4 lignes :
Set wbSource = Workbooks.Open(vFichiers(k)) 'on ouvre le fichier
Set wsSource = wbSource.Sheets(1) 'On copie les données de la feuille 4
Set wsRecap = wbRecap.Sheets(2).Add
Set wsSource.Copy After =Workbooks("Absentéisme automatisation.xls").Sheets(1) 

par :
Set wbSource = Workbooks.Open(vFichiers(k)) 'on ouvre le fichier
Set wsSource = wbSource.Sheets(1) 'On copie la feuille
wsSource.Copy After:=wbRecap.Sheets(1)


1
C'est exactement ce que je veux faire. Par contre je ne comprends pas la différence entre ces deux lignes...
0
Et bien Pijaku un grand merci c'est pile ce que je souhaitais faire et ca fonctionne parfaitement.

Par contre, n'aurais tu pas une autre ligne de code pour fermer le classeur wbsource après avoir copier l'onglet

Thanks tu peux pas savoir comment j'ai galéré merciiiiii^^
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 juil. 2013 à 14:57
wbSource.Close

peut être
0
Oui ca tombe sous le sens, je réfléchi pas assez^^
Tout marche merci pour tout
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
18 juil. 2013 à 15:07
mais de rien pour tout.
A+ n'hésite pas!
0