VBA supprimer des feuilles [Résolu]

Signaler
Messages postés
11
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
30 avril 2009
-
Messages postés
11
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
30 avril 2009
-
Bonjour, je suis débutant dans le VBA même si j'ai eut quelques cours il date de longtemps donc c'est comme si il n'y avait rien . J'ai un programme qui ouvre deux fixhiers excel dans lesquels je dois retirer plusieurs feuille mais ne garder que les feuilles qui s'apelle soit "sem16" ou "Feuil1" et de renomer ces derniéres par "Feuil1" quand c'est pas déjà le cas. bref voici mon code dîtes moi quel est le pb SVP (vous verrez qu'il y a quelques essais en commentaires mais ce n'est qu'une légére partie de tout ce que j'ai pu tester)
        Dim wbExcel As excel.Workbook 'Classeur Excel
        Dim wsExcel As excel.Worksheet 'Feuille Excel
        Set wbExcel = appExcel.Workbooks.Open("cheminfichier")
        i = 1
        nomfeuille = ""
        nbrfeuille = wbExcel.Worksheets.Count
        Do While i - 1 <> nbrfeuille
        nbrfeuille = wbExcel.Worksheets.Count
        MsgBox ("nbrfeuille = " & nbrfeuille)
            Set wsExcel = wbExcel.Worksheets(i)
            If wsExcel.Name <> "sem" & sem And wsExcel.Name <> "Feuil1" Then
                'nomfeuille = wbExcel.Worksheets(i)
                wsExcel.Delete
                'nomfeuille = nomfeuille & ", " & i
                Worksheets(i).Delete
            Else
                wsExcel.Name = "Feuil1"
                wbExcel.Sheets("Feuil1").Copy
            End If
                i = i + 1
        Loop

Le pb est surtout que je n'arrive a bien activé les feuilles que je veux supprimer car ce programme marche sur ma feuille où se trouve mon bouton.

a envie de chocolat

3 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Salut
Essaye un truc du genre (que tu arrangeras à ta sauce) :
    Dim maFeuille As Worksheet
    For Each maFeuille In Sheets
        If maFeuille.Name <> "Feuil1" Then maFeuille.Delete
    Next

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
11
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
30 avril 2009

Avec ce que tu m'avais proposé, j'ai écrit ceci :

        i = 1
        Dim maFeuille As Worksheet
        For Each maFeuille In wbExcel.Worksheets
        Set wsExcel = wbExcel.Worksheets(i)
        nbrfeuille = wbExcel.Worksheets.Count
        MsgBox ("nbrfeuille = " & nbrfeuille)
            If wsExcel.Name = "sem" & sem Then
                wsExcel.Name = "Feuil1"
            End If
            If maFeuille.Name <> "Feuil1" And maFeuille.Name <> "sem" & sem Then
                maFeuille.Delete
            Else
                i = i + 1
            End If
        Next

le probléme est que ma messagebox m'écrit qu'il y a toujours 6 feuille dans mon classeur alors qu'il devrait diminuer pratiquement à chaque tour pour atteindre le chiffre 1. Est-ce que tu saurais pourquoi?

a envie de chocolat
Messages postés
11
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
30 avril 2009

Je viens de comprendre mon probléme j'espére que vouspourrez répondre à celui-ci, j'ai écrit ces lignes de prog pour faire des tests et le probléme vient du fait que mon classeur que j'ai ouvert n'est pas actif donc ces lignes supprime les feuilles où se trouve mon boutton de lancement du programme. Est-ce que vous seriez comment activer un classeur que l'on vient d'onvrir??   

Dim appExcel As excel.Application 'Application Excel
Dim wbExcel As excel.Workbook 'Classeur Excel
Dim wsExcel As excel.Worksheet 'Feuille Excel
Set wbExcel = appExcel.Workbooks.Open("[null \\dataserverSaran\.............\Home\DECISIONNEL\Programme] SAS\Charlie\Dossier\Fichier excel\recap_042009.xls")
     i = 1
        Do While i <> nbrfeuille
            nbrfeuille = wbExcel.Worksheets.Count
            Set wsExcel = wbExcel.Worksheets(i)
            If wsExcel.Name <> "sem" & sem And wsExcel.Name <> "Feuil1" Then
                'nomfeuille = wbExcel.Worksheets(i)
                wsExcel.Delete
                'nomfeuille = nomfeuille & ", " & i
                Worksheets(i).Delete
            Else
                i = i + 1
                wsExcel.Name = "Feuil1"
            End If
        Loop

a envie de chocolat