Copier des onglets selon un range défini

nanoo79 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -  
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis entrain de faire une macro VBA qui doit copier différent onglet dans un nouveau classeur si le nom de l'onglet appartient à une range. Pour exemple j'ai une range qui s'appelle Client Prime et dedans il ya les noms des différents clients appartenant à ce Range. Le Range est dans un fichier différent dans un onglet nommé Parameters. Mon code VBA est dans un autre fichier appelé RapportMensuel.xlsm. Les onglets sont à copier du fichier RapportMensuel.xlsm vers un fichier nommé Banque.xlsm

Je souhaitais partir vers un code comme celui indiqué en dessous mais je n'arrive pas a formater avec le range d'un autre fichier

Est-ce que vous avez une idee?
Merci

 For Each ws In Sheets
    If ws.Name Like "MSF**" Then
    ws.Copy After:=Workbooks("Banque.xlsm").Sheets(1)

    End If


A voir également:

3 réponses

ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonsoir Nanoo, bonsoir le forum,

Peut-être comme ça (code non testé) :

Sub Macro1()
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim CH As String 'déclare la variable CH (CHemin d'accès)
Dim CD As Workbook 'déclare la variable CD (Classeur Destination)
Dim OP As Object 'déclare la variable OP (Onglet Parameters)
Dim OS As Object 'déclare la variable OS (OngletS)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)

Set CS = ThisWorkbook 'définit le classeur source CS
CH = CS.Path & "\" 'définit le chemin CH
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set CD = Workbooks("Banque.xlsm") 'définit le classeur destination CD (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 'efface l'erreur
    Workbooks.Open (CH & "Banque.xlsm") 'ouvre le classeur "Banque.xlsm"
    Set CD = ActiveWorkbook 'définit le classeur destination CD
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des erreurs
Set OP = CD.Sheets("Parameters") 'définit l'onglet OP
Set PL = OP.Range("Client Prime") 'définit la plage PL
For Each OS In CS.Sheets 'boucle 1 : sur tous les onglet OS du classeur source CS
    For Each CEL In PL 'boucle 2 : sur toutes les cellules CEL de la plage PL
        'condition : si le nom de l'onglet contient la valeur de la cellule CEL (à adapter)
        If OS.Name Like "*" & CEL.Value & "*" Then
            OS.Copy After:=CD.Sheets(1) 'copy l'onglet dans le classeur CD après le premier onglet de CD
            Exit For 'sort de la boucle 2
        End If 'fin de la condition
    Next CEL 'prochaine cellule de la boucle 2
Next OS 'prochain onglet de la boucle 1
End Sub

0
nanoo79 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour ThauTheme,

Merci pour ton aide. J'ai quelques questions pour être sûre de bien comprendre ton code et ainsi pouvoir l'adapté.

Dans otn code quand tu utilise la variable CS (Classeur source) tu parles du classeur initiale ou sont les onglets à copier?
Est-ce que dans ton code tu pars du principe que l'onglet paramètre est dans le classeur source?

Merci encore pour ton aide. Dès que tu m'auras confirmer j'appliquerai le code à ma macro pour tester.
0
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
Bonjour nanoo, bonjour le forum,

J'ai essayé d'adapter le code a ton environnement... Le classeur source est bien le classeur contenant les onglets à copier. D'après ce que tu avais exposé, ce classeur ne contient pas l'onglet Parameters.
Le classeur destination est le classeur où vont être copiées les onglets. Et dans lequel se trouve l'onglet Parameters contenant la plage nommée Client Prime où se trouve la liste des onglets à copier. Si j'ai bien compris...

Donc le code boucle sur tous les onglets du classeur source et compare leur nom (avec une seconde boucle) au cellules de la plage nommée Client Prime. Si le nom de l'onglet est contenu dans la valeur d'une des cellules de la plage, l'onglet est copié dans le classeur destination.

Mais je me demande à quoi ça sert que je commente mes codes... J'ai une furieuse envie de pisser, tiens passe-moi le violon...

À plus,
ThauTheme
0
nanoo79 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Thautheme,

Merci pour le code et tes détails ça fonctionne bien
0
ThauTheme Messages postés 1442 Date d'inscription   Statut Membre Dernière intervention   160
 
mmm... mon violon !
0