VBA qupprimer une feuille sur un classeur non

Résolu/Fermé
zewriggles Messages postés 11 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 30 avril 2009 - 30 avril 2009 à 14:57
 zewriggles - 4 mai 2009 à 17:18
Bonjour,
Je dois faire un programme pour faciliter le travail d'un camarade. Ce programme est simple il suffit de marquer le numéro d'une semaine et un type de fichier (ici excel) et appuyer sur le bouton valider. Après tout doit se faire tout seul. Maintenant mon seul probléme est que pour les deux fichiers xls que j'ouvre je veux supprimer certaines feuille sauf celle s'appelant "sem16" (par exemple) ou "Feuil1". Le probléme est que mes lignes de code sont bonne mais, elle ne supprime pas les feuilles de mes classeurs mais celle de mon classeur où se trouve mon bouton. voici les lignes de code que j'ai faites.Aidez-moi s'il vous plait!!!


Dim appExcel As excel.Application 'Application Excel
Dim wbExcel As excel.Workbook 'Classeur Excel
Dim wsExcel As excel.Worksheet 'Feuille Excel
Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open("B:\Texte et excel\Fichier excel\recap_042009.xls")
nbrfeuille = wbExcel.Worksheets.Count
MsgBox ("nbrfeuille = " & nbrfeuille)

i = 1
Do While i <> nbrfeuille
wbExcel.Activate
nbrfeuille = wbExcel.Worksheets.Count
Set wsExcel = wbExcel.Worksheets(i)
MsgBox ("nbrfeuille = " & nbrfeuille)
If wsExcel.Name <> "sem" & sem And wsExcel.Name <> "Feuil1" Then
wsExcel.activate
'nomfeuille = wbExcel.Worksheets(i)
wsExcel.Delete
Worksheets(i).Delete
Else
i = i + 1
wsExcel.Name = "Feuil1"
End If
Loop

2 réponses

Utilisateur anonyme
30 avril 2009 à 18:41
Bonjour,

Est-ce que votre code est dans un module ou derrière une feuille !

J'aurais tendance a penser que le code est derrière une feuille, puisque tu dis
qu'il est appeller par un bouton.

Or pour travailler sur plus d'une feuille, il faut être dans un module.

Exemple type :

Derrière la feuille:
Option Explicit

Private Sub CommandButton1_Click()
    Call Module1.Validation
End Sub
'


Dans un module [Module1] :
Option Explicit

Sub Validation()

    Dim wbExcel As Workbook
    Dim wsExcel As Worksheet

    'Ouverture d'un fichier Excel
    Workbooks.Open ("B:\Texte et excel\Fichier excel\recap_042009.xls")
    Set wbExcel = ActiveWorkbook
    
    nbrfeuille = wbExcel.Worksheets.Count
    'MsgBox ("nbrfeuille = " & nbrfeuille)
    
    For Each wsExcel In wbExcel.Worksheets
        If wsExcel.Name <> "sem" & sem And wsExcel.Name <> "Feuil1" Then
            wsExcel.Delete
        End If
    Loop

End Sub
'


Lupin
0
Bonjour,

Je viens d'essayer ce que tu m'a proposé Luîn, il est vrai que mes codes était sous une feuille maintenant il est sou un module comme tu me l'a dit et tout le monde me dit que c'est mieux. merci
parc ontre, les feuilles ne se supprime toujours pas et j'ai beau réfléchir et faire toute les tentative désespéré rien ne fonctionne. Est-ce que vous auriez une autre idéé?peut-être que mes fichiers ne sont pas bien ouvert?Est-ce qu'il serait possible de rendre visible que le fichier qui m'intéresse et après supprimer les feuilles par un activeworkbook?


PS : Juste une petite erreur sur ton code Lupin, c'est un next pour le for each, j'en suis sure que tu le savais toi même
0
Utilisateur anonyme
4 mai 2009 à 13:38
re:

J'ai initialisé les variables et le code fonctionne chez moi ???

Option Explicit

Sub Validation()

    Dim wbExcel As Workbook
    Dim wsExcel As Worksheet
    Dim sem As Long

    'Ouverture d'un fichier Excel
    Workbooks.Open ("C:\Document\Excel\Test.xls")
    Set wbExcel = ActiveWorkbook
    
    sem = 1
    For Each wsExcel In wbExcel.Worksheets
        If wsExcel.Name <> "sem" & sem And wsExcel.Name <> "Feuil1" Then
            Application.DisplayAlerts = False
            wsExcel.Delete
            Application.DisplayAlerts = True
        End If
    Next wsExcel

End Sub
'


Lupin
0
J'ai trouver une façon qui m'aller très bien je te la donne si ça peut te servir à toi ou a d'autres

Workbooks.Open ("cheminfichier")
ch = ActiveWorkbook.FullName
MsgBox ch
nbrfeuille = Sheets.Count
MsgBox ("nbrfeuille = " & nbrfeuille)
i = 1
Do While i <> nbrfeuille
nbrfeuille = Sheets.Count
Set maFeuille = Worksheets(i)
If maFeuille.Name <> "sem" & sem And maFeuille.Name <> "Feuil1" Then
Application.DisplayAlerts = False
maFeuille.Delete
Application.DisplayAlerts = True
Else
i = i + 1
maFeuille.Name = "Feuil1"
End If
Loop
'Sauvegarde et fermeture du fichier
Application.DisplayAlerts = False
ActiveWorkbook.Save
Application.DisplayAlerts = True
ActiveWorkbook.Close
0