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

  1. 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 _
    ...
    0
    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 _
      ...
      0
      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
        0
      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
        0
    2. 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
      0
      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
        0