Transfert de pages

bonjour

j'ai ecris le petit code suivant qui consiste à transferet les feuilles d'un classeur B vers un classeur C à la condition que les noms des feuilles de B se retrouvent sur la plage B21:B100 d'un classeur A en feuille 1

j'y ai inclus mes etapes en explication

au depart le classeur A est ouvert

sub transfert()
dim C as workbook
dim xcell as string
dim ws as string
Dim xlApp As Excel.Application

'jouvre le classeur B :

Application.Workbooks.Open "C:\B.xls"

'j'effectue une coomparaison entre les feuilles du classeur B et la plage b21:b100 feuille 1 du classeur A :

For Each xcell In workbooks("A").Sheets("Feuil1").Range("B21:B100")  
For Each ws In workbooks("B").sheets
        If xcell = ws.name then 

'je copie les feuilles trouvées  vers un classeur C que je crée :
Set C = xlApp.Workbooks.Add
C.SaveAs ("C.xls")
ws.Copy after:=C.Sheets(C.Sheets.Count)

'je retire tout les boutons se trouvant sur les feuilles à copier dans C  :

ActiveSheet.DrawingObjects.Delete

end if 
next xcell
next ws

Workbook("B.xls).Close True

end sub

cela vous semble t il suffisant ? il y a t il des choses à corriger ?

Merci pour vos réponses

Bonsoir,

Avec quelques petites corrections mais attention, je n'ai fait aucun test (voir en pas à pas (F8) pour voir la 1ère fois ce qui se passe) :

Sub transfert()

    Dim C As Workbook
    Dim ws As Worksheet
    Dim xcell As Range

    'jouvre le classeur B :
    Application.Workbooks.Open "C:\B.xls"

    'j'effectue une coomparaison entre les feuilles du classeur B et la plage b21:b100 feuille 1 du classeur A :
    For Each xcell In Workbooks("A").Sheets("Feuil1").Range("B21:B100")

        'ici "Worksheets" pour ne parcourir que les feuilles de calculs car avec "Sheets"
        'tu passe aussi sur les feuilles graphiques et là, une erreur se produira
        For Each ws In Workbooks("B").Worksheets

            If xcell = ws.Name Then

                'je copie les feuilles trouvées  vers un classeur C que je crée :
                'ici, il faut contrôler si il existe déjà sinon, il va en créer autant
                'de fois que xcell = ws.Name sera True
                On Error Resume Next

                Set C = Workbooks("C.xls")

                If Err.Number <> 0 Then

                    Set C = Workbooks.Add '<xlApp> pas nécessaire de dire au compilateur qu'il est dans Excel, il le sais déjà ;o))
                    C.SaveAs ("C.xls")

                End If

                ws.Copy after:=C.Sheets(C.Sheets.Count)

                'je retire tout les boutons se trouvant sur les feuilles à copier dans C  :
                C.Sheets(C.Sheets.Count).DrawingObjects.Delete

            End If

        Next xcell

    Next ws

    'enregistre les modifs
    Workbook("C.xls").Save

    Workbook("B.xls").Close True

End Sub

Hervé.

Merci infiniment pour avoir repris et corrigé mon code , il reste cependant un bug que j'ai egalement rencontré

à la ligne

Next xcell 

avec l'information : "référence de variable de contrôle incorrecte dans Next sans pouvoir

en comprendre la raison ...

Salut le forum

Selon la logique, il faut inverser les deux Next

   For Each xcell . . . 
       For Each ws . . . 

       Next ws
  Next xcell

Mytå

c'est ok , j'ai remédié à ce soucis , en tout cas merci pour cette rédaction


c'est tout à fait ca Myta , ce que j'ai fais ! merci

Rechercher des sujets similaires à "transfert pages"