Bonjour à tous,
J'aimerais avoir de l'aide afin de concevoir une macro qui me permettra de copier toutes les feuilles visibles d'un classeur (nom quelconque, *.XLS*, classeur source) contenant uniquement les caractères "Équipement :" en "B3" dans un classeur cible actif ouvert (nom quelconque). La feuille nommée "MODEL" du classeur source sera exclue de la copie. La macro sera exécutée à partir du classeur cible. Je joins un exemple de classeur source (nombre de feuilles variable). En fonction des critères précédemment déterminés, une fois la macro exécutée, seules les feuilles jaunes devraient être copiées dans le classeur cible.
J'ai écris ci-dessous une exquise de macro pour effectuer ce que je désire. Les lignes "x" sont à compléter. Si vous pourriez modifier ou améliorer les lignes de programme déjà écrites, cela serait très apprécié.
********************************************************************************************************
Sub Fichier_source()
' Ouvre un classeur source
Dim wb As Workbook
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.Title = "Choisir un classeur source (feuilles à copier)"
.Filters.Clear
.Filters.Add "Excel files", "*.XLS*"
If .Show = 0 Then
MsgBox "Pas de classeur sélectionné": Exit Sub
Else
For i = 1 To .SelectedItems.Count
Set wb = Workbooks.Open(.SelectedItems(i), , True) 'ouverture en lecture seule
Call Copier_classeur_source_vers_classeur_cible(wb)
' MsgBox "Transfert des feuilles" & wb.Name & " effectué"
wb.Close (False)
Next i
End If
End With
Application.DisplayAlerts = False
' ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End Sub
'
'
Sub Copier_classeur_source_vers_classeur_cible(classeur_IST As Object)
For Each Ws In classeur_IST.Worksheets
If Ws.Range("B3") = "Équipement :" _
And Ws.Name <> "MODEL" Then ' feuille données
x
x
x
x
x
x
x
x
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
Set wsa = Nothing
End Sub
********************************************************************************************************
Merci à l'avance pour votre précieuse collaboration,
Renaud22.
J'aimerais avoir de l'aide afin de concevoir une macro qui me permettra de copier toutes les feuilles visibles d'un classeur (nom quelconque, *.XLS*, classeur source) contenant uniquement les caractères "Équipement :" en "B3" dans un classeur cible actif ouvert (nom quelconque). La feuille nommée "MODEL" du classeur source sera exclue de la copie. La macro sera exécutée à partir du classeur cible. Je joins un exemple de classeur source (nombre de feuilles variable). En fonction des critères précédemment déterminés, une fois la macro exécutée, seules les feuilles jaunes devraient être copiées dans le classeur cible.
J'ai écris ci-dessous une exquise de macro pour effectuer ce que je désire. Les lignes "x" sont à compléter. Si vous pourriez modifier ou améliorer les lignes de programme déjà écrites, cela serait très apprécié.
********************************************************************************************************
Sub Fichier_source()
' Ouvre un classeur source
Dim wb As Workbook
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = True
.Title = "Choisir un classeur source (feuilles à copier)"
.Filters.Clear
.Filters.Add "Excel files", "*.XLS*"
If .Show = 0 Then
MsgBox "Pas de classeur sélectionné": Exit Sub
Else
For i = 1 To .SelectedItems.Count
Set wb = Workbooks.Open(.SelectedItems(i), , True) 'ouverture en lecture seule
Call Copier_classeur_source_vers_classeur_cible(wb)
' MsgBox "Transfert des feuilles" & wb.Name & " effectué"
wb.Close (False)
Next i
End If
End With
Application.DisplayAlerts = False
' ActiveWindow.SelectedSheets.Delete
Application.DisplayAlerts = True
End Sub
'
'
Sub Copier_classeur_source_vers_classeur_cible(classeur_IST As Object)
For Each Ws In classeur_IST.Worksheets
If Ws.Range("B3") = "Équipement :" _
And Ws.Name <> "MODEL" Then ' feuille données
x
x
x
x
x
x
x
x
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
Set wsa = Nothing
End Sub
********************************************************************************************************
Merci à l'avance pour votre précieuse collaboration,
Renaud22.