XL 2016 Copier onglet vers autre classeur via macro

loicoss

XLDnaute Junior
Bonjour le Forum,

N'étant toujours pas performant pour la création de code vba je fais à nouveau appel à vos lumières.
J'ai essayé de bricoler un code après plusieurs recherches mais je ne m'en sort pas.

A partir d'un classeur (Export.xlsm) Je souhaiterai par une macro en cliquant sur un bouton, importer les données de 2 onglets d'un premier classeur (Données.xlsx) dans les 2 onglets de ce classeur (Export.xlsm).
J'aimerai que cette tâche s'exécute en arrière plan et que mon classeur export.xlsm reste ouvert après l'exécution de cette macro.

Voici les 2 fichiers en exemple.

En vous remerciant par avance.

Bonne journée
 

Pièces jointes

  • Données.xlsx
    11.8 KB · Affichages: 19
  • Export.xlsm
    9.3 KB · Affichages: 10
Solution
Bonjour Loïc, bonjour le forum,

Ce nouveau code commence par supprimer les onglets différent de Accueil, dans le classeur destination, avant d'ajouter les nouveaux. Remplace l'ancien code par celui-ci :

VB:
Private Sub CommandButton1_Click()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim O As Worksheet 'déclare la variable O (Onglet)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
Application.DisplayAlerts = False 'masque les messages d'Excel
For Each O In CD.Sheets 'boucle sur tous les onglets O du...

Robert

XLDnaute Barbatruc
Bonsoir Loicoss, bonsoir le forum,

J'ai modifié ton classeur Export.xlsm avec un onglet Accueil et le bouton Export.
Le code du bouton :

VB:
Private Sub CommandButton1_Click()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim O As Worksheet 'déclare la variable O (Onglet)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
CA = CD.Path & "\" 'définit le chemin d'accès CA
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligbe suivante)
Set CS = Workbooks("Données.xlsx") 'définit le classeur source CS (génère une erreur si ce classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    Set CS = Workbooks.Open(CA & "Données.xlsx") 'définit le classeur source en l'ouvrant
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
For Each O In CS.Sheets 'boucle sur tous les onglets O du classeur source
    O.Copy After:=CD.Sheets(CD.Sheets.Count) 'copy l'onglet de la boucle en dernière position dans le classeur destintion
Next O 'prochain onglet de la boucle
CD.Save 'sauve le classeur destination
CS.Close False 'ferme le classeur source sans enregistrer
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
 

Pièces jointes

  • Export.xlsm
    20.9 KB · Affichages: 10

loicoss

XLDnaute Junior
Bonjour Robert et bonjour le forum,

Merci pour cette réponse.
Le résultat est là, cependant, je mets à jour cet export mensuellement, et je souhaiterai que ces onglets copiés remplacent les précédents.
Actuellement à chaque import il est créé des nouveaux onglets.

Dans l'attente d'une proposition.

Merci à vous.
 

Robert

XLDnaute Barbatruc
Bonjour Loïc, bonjour le forum,

Ce nouveau code commence par supprimer les onglets différent de Accueil, dans le classeur destination, avant d'ajouter les nouveaux. Remplace l'ancien code par celui-ci :

VB:
Private Sub CommandButton1_Click()
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim O As Worksheet 'déclare la variable O (Onglet)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CD = ThisWorkbook 'définit le classeur destination CD
Application.DisplayAlerts = False 'masque les messages d'Excel
For Each O In CD.Sheets 'boucle sur tous les onglets O du classeur destination
    If O.Name <> "Accueil" Then O.Delete 'si le nom de l'onglet n'est pas "Accueil", supprime l'onglet
Next O 'prochain onglet de la boucle
Application.DisplayAlerts = True 'affiche les messages d'Excel
CA = CD.Path & "\" 'définit le chemin d'accès CA
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligbe suivante)
Set CS = Workbooks("Données.xlsx") 'définit le classeur source CS (génère une erreur si ce classeur n'est pas ouvert)
If Err <> 0 Then 'condition : si une erreur a été générée
    Err.Clear 'supprime l'erreur
    Set CS = Workbooks.Open(CA & "Données.xlsx") 'définit le classeur source en l'ouvrant
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
For Each O In CS.Sheets 'boucle sur tous les onglets O du classeur source
    O.Copy After:=CD.Sheets(CD.Sheets.Count) 'copy l'onglet de la boucle en dernière position dans le classeur destintion
Next O 'prochain onglet de la boucle
CD.Save 'sauve le classeur destination
CS.Close False 'ferme le classeur source sans enregistrer
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
292 827
Messages
1 926 638
Membres
183 155
dernier inscrit
pi2@