Supprimer des onglets en VBA
Bonjour,
Je travaille avec Excel 2007.
Mon programme effectue une copie du fichier Excel qui le contient (nommé "Fichier.xlsm") pour générer un nouveau fichier nommé "Fichier2.xlsm".
Le fichier d'origine comporte 12 onglets portant les noms suivants : "Mars 2014", "Avril 2014", ..., "Janvier 2015","Février 2015"
J'ai un tableau (tabMois) contenant des noms de mois sur le même modèle ("Avril 2014", "Mai 2014" etc).
Comme ce tableau ne contient pas le mois de Mars 2014, je voudrais supprimer l'onglet "Mars 2014" dans la copie du fichier que j'ai effectuée. Or quand je cherche à suoprimer cet onglet, je n'ai aucun message (alors qu'il parait que sans utilisation de "Application.DisplayAlerts = False" je devrais avoir une demande de confirmation) et je constate ensuite que l'onglet est toujours dans le fichier et n'a pas été supprimé.
J'ai vérifié que le contenu de mon tableau était correct, et que je passais bien dans la fonction de suppression de l'onglet. J'ai même ajouté un "On Error Goto" mais sans qu'aucune erreur ne soit signalée lors de l'exécution du programme.
Quelqu'un a t-il une idée de la raison pour laquelle l'onglet n'est pas supprimé ? Merci de votre aide.
PS : Le tableau tabMois est une variable globale. Dans les deux fichiers, il existe un premier onglet dont le nom est "Paramétrage" et qui doit toujours être conservé.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
Sub btnMAJ()
On Error GoTo Err_btnMAJ
Dim filePath As String
Dim newFilePath As String
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
Dim feMois As Variant
Dim feSheet As Variant
Dim ongletTrouve As Boolean
Dim objFSO As Object
Dim nomOnglet As String
Dim numAnnee As Integer
Dim mois As clsMois
Dim i As Integer
Dim compteur As Integer
' Initialise la liste des mois pour le nouveau classeur
InittabMois
' Génération du nouveau classeur et de ses onglets (1 an glissant)
filePath = ActiveWorkbook.Path + "\Fichier.xlsm"
newFilePath = ActiveWorkbook.Path + "\Fichier2.xlsm"
' On effectue la copie du fichier
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile filePath, newFilePath, True
'On accède au nouveau fichier pour lire les noms de ses onglets
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open(newFilePath)
boucle:
For Each feSheet In xlBook.Worksheets
ongletTrouve = False
If feSheet.Name <> "Paramétrage" Then
For Each feMois In tabMois
If LCase(feSheet.Name) = LCase(feMois.LibelleMois) Then
ongletTrouve = True
End If
Next
' Si l'onglet recherché ne figure pas dans le tableau tabMois, on le supprime du fichier
If ongletTrouve = False Then
feSheet.Delete
End If
End If
Next
Fin_btnMAJ:
xlBook.Save
xlBook.Close
xlApp.Quit
Exit Sub
Err_btnMAJ:
MsgBox Err & ": " & Error(Err)
GoTo Fin_btnMAJ
End Sub |