XL 2016 Dupliquer une feuille à partir d'une liste d'un fichier fermé

leeroy

XLDnaute Nouveau
Bonjour,
Je souhaiterais créer un bouton pour dupliquer une feuille à partir d'une liste d'un fichier fermé sans tenir compte des cases vides et en évitant les doublons.
Je voudrais que chaque feuille soit renommée avec le nom de la valeur de extraite de la liste.

Merci par avance,
Leeroï
 

Roland_M

XLDnaute Barbatruc
Bonjour,

si ça peut aider, voir dans ce classeur deux modules exemples
un pour Lire et un autre pour copier Feuilles ou données dans un classeur fermé.

mais il faut maîtriser ce genre de méthode, sinon vous aurez plus vite fait de l'ouvrir !
car cette méthode n'est valable que pour plusieurs fichiers pour un gain de temps conséquent !

EDIT: quand à gérer les doublons voir avec Dictionnary les exemples ne manquent pas voir le site Jacques Boisgontier
 

job75

XLDnaute Barbatruc
Bonjour leeroy, xUpsilon, Roland_M,

Voyez les fichiers joints et la macro du bouton "Dupliquer" :
VB:
Sub Dupliquer()
Dim chemin$, fichier$, nf$, F As Worksheet, s As Object, tablo, d As Object, i&, x As Variant, o As Object
chemin = ThisWorkbook.Path & "/"
fichier = "Source.xlsx"
nf = "Feuil1"
Set F = Feuil1 'CodeName de la feuille à dupliquer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'---RAZ---
For Each s In Sheets
    If s.Name <> F.Name Then s.Delete
Next
'---copie de la feuille source---
With F.[A1:A100] 'à adapter
    .Formula = "='" & chemin & "[" & fichier & "]" & nf & "'!A1" 'formule de liaison
    tablo = .Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
    .ClearContents
End With
'---création des feuilles---
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(tablo)
    x = tablo(i, 1)
    If x <> 0 Then
        If Not d.exists(x) Then
            d(x) = ""
            F.Copy After:=Sheets(Sheets.Count)
            ActiveSheet.Name = CStr(x)
            For Each o In ActiveSheet.DrawingObjects
                If TypeName(o) = "Button" Then o.Delete 'suppression du bouton
            Next
        End If
    End If
Next
F.Activate
End Sub
Comme il s'agit de créer des feuilles elles ne peuvent pas être très nombreuses donc des formules de liaisons font bien l'affaire.

A+
 

Pièces jointes

  • Dupliquer(1).xlsm
    21.9 KB · Affichages: 4
  • Source.xlsx
    8.5 KB · Affichages: 4

Roland_M

XLDnaute Barbatruc
Bonjour tout le monde,

Franchement Job75, partir de ça:
Je souhaiterais créer un bouton pour dupliquer une feuille à partir d'une liste d'un fichier fermé sans tenir compte des cases vides et en évitant les doublons.
Je voudrais que chaque feuille soit renommée avec le nom de la valeur de extraite de la liste.

et arriver à réaliser un code sur une telle base !?
tu es devin c'est pas possible !?
franchement tu m'épates, tu m'épates !!!!!!
 

xUpsilon

XLDnaute Accro
Par simple curiosité, pourquoi set le ScreenUpdating sur false ?
J'ai l'habitude de faire tourner toutes mes macros sans toucher au ScreenUpdating, y a t'il un intéret d'optimisation de la macro ou autre à le couper ?

Bonne journée
 

Roland_M

XLDnaute Barbatruc
Bonjour,

'explications simples (entres autres)
Application.ScreenUpdating = False 'évite le rafraîchissement de l'écran ! gain de temps d'exécution !
Application.ScreenUpdating = True 'remet
Application.Calculation = xlCalculationManual 'évite le recalcul sur les feuilles ! gain de temps d'exécution !
Application.Calculation = xlCalculationAutomatic 'remet (exp en fin de procédure)
Application.EnableEvents = False 'évite le déclanchement des évèvements (exp dans code feuille)
Application.EnableEvents = True 'remet (exp en fin de procédure)
Application.DisplayAlerts = False 'évite le déclanchement d'avertissement d'excel(ex suppr feuil sans confirmation)
Application.DisplayAlerts = True 'remet (exp en fin de procédure)
 

Discussions similaires

Statistiques des forums

Discussions
315 097
Messages
2 116 186
Membres
112 679
dernier inscrit
Yupanki