VBA copier onglet dans un autre classeur via un bouton

[Résolu/Fermé]
Signaler
-
 Klaradoc -
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 .....

2 réponses

Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 642
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42854 internautes nous ont dit merci ce mois-ci

C'est exactement ce que je veux faire. Par contre je ne comprends pas la différence entre ces deux lignes...
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^^
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 642
wbSource.Close

peut être
Oui ca tombe sous le sens, je réfléchi pas assez^^
Tout marche merci pour tout
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 642
mais de rien pour tout.
A+ n'hésite pas!