MACRO Excel: Suppr feuille / Name list

Bonjour,
Je souhaiterai créer une macro, mais j'avoues que là je cale. J'ai essayé d'évoluer en prenant soit une macro en "Boucle" soit en commençant par "pour chaque feuille"... mais je cale.

Alors ce que je souhaiterai, c'est supprimer toute les feuilles dont le nom correspondent à une liste dans un tableau de la feuille Date (correspondant aux cellules C13 à C16)
J'ai essayé ça :
Dim Sheet As Worksheet
For Each Sheet In ThisWorkbook.Worksheets
Name = Sheets("Date").Cells("C13:c16")
If Sheet.Name = Sheet("Name") Then Sheet.Delete
Application.DisplayAlerts = True
Next Sheet
Mais il met une erreur
Et avec la boucle, je m'y perds!:!!

Merci d'avance pour votre aide et vos conseils
Configuration: Windows XP
Firefox 3.0.14

6 réponses

  1. ah, le début a été coupé.
    je disais : j'insère une fonction qui détermine le jour de la date en question dans la case G4 de chaque feuille.

    ensuite on compare la date qui est dans G3 aux fins de mois (déclarées en variable type date) dans une boucle for décroissante (afin de ne pas faire d'erreur : si tu supprime on onglet et qu'on compte en croissant, il finit par y avoir une erreur).

    enfin on compare la valeur de "jour" à 2 (dimanche=1, lundi=2) et on supprime si nécessaire.

    voilà !
    0
    1. essaie ça :
      (regarde bien le code : à un moment j'insère

      Sub suppr_feuilles()

      Application.DisplayAlerts = False

      Dim fin_janv As Date
      Dim fin_fév As Date
      Dim fin_mar As Date
      Dim fin_avr As Date
      Dim fin_mai As Date
      Dim fin_juin As Date
      Dim fin_juil As Date
      Dim fin_aou As Date
      Dim fin_sep As Date
      Dim fin_oct As Date
      Dim fin_nov As Date
      Dim fin_déc As Date

      aujourdhui = Date
      année = "2011" 'à changer l'année prochaine !
      fin_janv = "31/01/" & année
      fin_fév = "28/02/" & année
      fin_mar = "31/03/" & année
      fin_avr = "30/04/" & année
      fin_mai = "31/05/" & année
      fin_juin = "30/06/" & année
      fin_juil = "31/07/" & année
      fin_aou = "31/08/" & année
      fin_sep = "30/09/" & année
      fin_oct = "31/10/" & année
      fin_nov = "30/11/" & année
      fin_déc = "31/12/" & année

      'Détermination du jour (donne 1 à 7 sachant que dimanche = 1 et samedi = 7)
      For i = 1 To Sheets.Count
      Sheets(i).Range("G4").FormulaR1C1 = "=WEEKDAY(R[-1]C)"
      Next 'j'ai supposé que ta case G4 est libre (direct en dessous de G3)

      'Boucle décroissante (pour éviter les erreurs lorsqu'on supprime les feuilles)
      For i = Sheets.Count To 1 Step -1

      jour = Sheets(i).Range("G4").Value

      'Contrôle si plus de 8 jours
      If Sheets(i).Range("G3").Value > aujourdhui + 8 Then
      Sheets(i).Delete
      'Contrôle si fin de mois
      ElseIf Sheets(i).Range("G4").Value = fin_janv Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_fév Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_mar Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_avr Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_mai Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_juin Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_juil Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_aou Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_sep Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_oct Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_nov Then
      Sheets(i).Delete
      ElseIf Sheets(i).Range("G4").Value = fin_déc Then
      Sheets(i).Delete
      'Contrôle si c'est un lundi - si pas on supprime
      ElseIf jour <> 2 Then
      Sheets(i).Delete
      End If

      Next

      Application.DisplayAlerts = True

      End Sub

      est ce que c'est ce qu'il te fallait ?
      ed
      0
      1. salut bthenault !

        si je récapitule, tes onglets sont toujours nommés avec "23092009" ou similaire ?
        et dans chaque onglet tu as une case qui contient la date de l'onglet ?

        je suis en train d'essayer quelque chose, je te tiens au jus !

        à bientôt,
        ed
        0
        1. Je cherche à simplifier ce que j'avais créé :
          Application.DisplayAlerts = False
          For Each Sheet In Workbooks("1er Trimestre 2011.xls").Worksheets
          If Sheet.Range("G3") < Date - 8 Then
          If Not Weekday(Sheet.Range("G3")) = 2 Then
          If Not Sheet.Range("G3") = DateSerial(2011, 1 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 2 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 3 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 4 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 5 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 6 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 7 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 8 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 9 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 10 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 11 + 1, 0) Then
          If Not Sheet.Range("G3") = DateSerial(2011, 12 + 1, 0) Then Sheet.Delete
          Else
          End If
          Else
          End If
          Else
          End If
          Else
          End If
          Else
          End If
          Else
          End If
          Else
          End If
          Else
          End If
          Else
          End If
          Else
          End If
          Else
          End If
          Else
          End If
          Else
          End If

          Next Sheet

          Application.DisplayAlerts = True

          je ne sais pas comment imbriquer cela. je réexplique, j'ai une date dans une cellule que chaque feuille. Je dois supprimer les onglets dont la date est supérieure à 8 jours, sauf si c'est le dernier jour du mois ou un lundi...
          0
          1. salut !

            je te réponds rapidement avant de sortir (pas le temps de tester la solution) mais sur le principe il faut que tu changes l'ordre des boucles ou que simplement tu n'en fasses qu'une seule. Je m'explique : si j'ai bien compris ton problème, tu possèdes le nom des onglets à supprimer sur une feuille excel. il faut donc regarder tous ces noms l'un à la suite de l'autre et en conséquence supprimer l'onglet correspondant.

            de tête ça donne du code comme ça :

            Dim plageNoms as Range
            set plageNoms = Range("ta plage qui contient les noms des onglets à supprimer")
            Dim Name as String

            For Each cell In plageNoms
            ' là on affecte le contenu de la cellule à ta variable Name
            Name = cell.Value
            ' et on supprime l'onglet correspondant
            Sheets("Name").Delete
            Application.DisplayAlerts = True

            Next cell

            bon courage (et bonne soirée !)
            ed
            0
            1. Merci Ed
              C'est presque ça. La solution n'est pas loin, j'avais fait plus compliqué lol !
              Le soucis est qu'en effet l'onglet est à la date du jour, mais c'est fait par macro, et la macro nomme le jour de cette manière "2392009" pour une date du 23/09/2009. Forcément le nom de la feuille ne correspond par textuellement à la date. C'est pourkoi j'avais créé un tableau à part sur une autre feuille pour faire les recherches. J'ai indiqué sur chaque page dans la cellule G3 la date de mise à jour.

              Le soucis que j'ai c'est de dire "Supprimer la feuilles dont la cellule G3 est dans PlageNoms"

              Dim plageNoms As Range
              Set plageNoms = Range("c13:c16")
              Dim Sac As Range
              Set Sac = Range("G3")
              Dim Name As String
              For Each Sac In plageNoms

              Sheet.Delete ====>>>> Ne marche pas, il faut nommer la feuille mais comment faire car cela dépend si la cell G3 contient la date...

              Application.DisplayAlerts = True

              Je ne sais pas comment dire cela...
              0
            2. @bthenaultj'ai essayé ça

              Sub dernierjmois()

              Application.DisplayAlerts = False
              For Each Sheet In ThisWorkbook.Worksheets
              If Not Sheet.Range("G3") = DateSerial(2009, 1 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 2 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 3 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 4 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 5 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 6 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 7 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 8 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 9 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 10 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 11 + 1, 0) Then If Not Sheet.Range("G3") = DateSerial(2009, 12 + 1, 0) Then If Not Weekday(Sheet.Range("G3")) = 6 Then If Sheet.Range("G3") < Date - 8 Then Sheet.Delete
              Next Sheet

              Application.DisplayAlerts = True

              End Sub

              La première partie me permet de dire que si la date, n'est pas l'un des dernier jours de chaque mois, si ce n'est pas un vendredi, et enfin si elle n'est pas inférieure à 8 jours, alors la feuille sdoit être supprimée. Mais je conserve le même problème, il me supprime la feuille active, et pas la feuille contenant la date concernée...
              0
          2. Bien sûre les données du tableau évoluent...

            En fait, le tableau ressort les noms des onglets à supprimer. Les onglets sont issus d'une mise à jour qui crée une nouvelle feuille et nomme la feuille à la date de jour. Pour éviter de me retrouver avec 500 feuilles, je veux supprimer les feuilles de la semaine suivante (sauf le vendredi). j'ai donc créé un tableau dans exel, qui me donne les dates (et donc les nom des feuilles) que je ne dois pas garder.
            0
            1. semaine précépdente pardon
              0