Boucle Do Loop erreur

Résolu
Bonjour,

J'ai créé une boucle Do - Loop, à la quel j'ai intégré plusieurs condition.

Z = 1
Sheets(Z).Select

Do Until Z = 12
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(Z).Delete
End If
Z = 1 + 1

Loop

End Sub

En fait chaque feuille contient une date en G3. Si celle-ci n'est pas le dernier jour d'un mois de l'année, ni un vendredi, ni inférieur à 8 jours par rapport à aujourd'hui, alors la feuille doit être supprimée.
Mon problème :
- Quand je lance la macro, elle m'indique une erreur "Loop sans Do", pourtant mon Do existe, j'ai essayé différents alignements, je ne comprends pas pourkoi il ne le retrouve pas. Il doit manquer quelque chos,e le soucis, c'est que je ne trouve rien dans mes doc qui m'indique l'erreur commise...

Merci de m'aider, car cela fait depuis hier que je crise dessus! lol
Merciiiiiiiiiiiii
Configuration: Windows XP
Firefox 3.0.14

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    A la bourre certes mais

    dans chaque feuille par exemple en H3
    =((G3=FIN.MOIS(G3;0))+(JOURSEM(G3)=6)+(G3>AUJOURDHUI()-8))>0
    renvoie vrai si une des conditions de non-destruction existe

    macro
    Sub virer_feuille_si()
    Dim nbre As Byte, z As Byte
    Dim onglet As String, feuille As String
    
    nbre = ThisWorkbook.Sheets.Count
    onglet = Sheets(nbre).Name
    
    z = 1
    feuille = Sheets(z).Name
    While feuille <> onglet
        If Not Sheets(z).Range("H3") Then
            Application.DisplayAlerts = False
            Sheets(z).Delete
            Application.DisplayAlerts = True
        Else
            z = z + 1
            feuille = Sheets(z).Name
        End If
    Wend
    End Sub


    ci joint tite démo
    https://www.cjoint.com/?jDo1PLXrZo
    1. super !!! je m'étais aperçu ce matin qu'il fallait "fermer" les If, mais pour les AND je savais pas ça!!! On fait toujours trop compliker !!!! Merciiiiiiiiiiiiiiiiiii
      1. pardon, j'ai laissé traîner des if...
        If Not Sheet.Range("G3") = DateSerial(2009, 1 + 1, 0) AND _
        Not Sheet.Range("G3") = DateSerial(2009, 2 + 1, 0) AND _
        Not Sheet.Range("G3") = DateSerial(2009, 3 + 1, 0) AND _
        ...
        1. du coup j'ai fait comme ça :
          Application.DisplayAlerts = False
          For Each Sheet In ThisWorkbook.Worksheets
          If Not Sheet.Range("G3") = DateSerial(2009, 1 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 2 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 3 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 4 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 5 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 6 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 7 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 8 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 9 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 10 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 11 + 1, 0) And _
          Not Sheet.Range("G3") = DateSerial(2009, 12 + 1, 0) And _
          Not Weekday(Sheet.Range("G3")) = 6 And _
          Not Sheet.Range("G3") < Date - 8 _
          Then Sheet.Delete _
          Else
          End If

          Next Sheet

          Application.DisplayAlerts = True
          Mais il met dit "END IF" sans If... alors je pige pas
        2. Contributeur
          @bthenaultExcusez-moi d'avoir dérangé en proposant une alternative
          Mais, rassures toi, cela ne se reproduira plus, bthenault...
          Merci car cela me libère du post concernant le publipostage où je terminais une proposition
      2. Bonjour

        Il faut un endif pour chaque if - then (quand le then est à la fin de la ligne), tu es loin du compte...
        VB cherche le 'Do' correspondant à ton Loop à l'intérieur du dernier "if" ouvert.
        Dans ton cas, le plus simple est de mettre des AND à la place des then suivis de if :
        If Not Sheet.Range("G3") = DateSerial(2009, 1 + 1, 0) AND _
        If Not Sheet.Range("G3") = DateSerial(2009, 2 + 1, 0) AND _
        If Not Sheet.Range("G3") = DateSerial(2009, 3 + 1, 0) AND _
        ...