Boucle Do Loop erreur

Résolu/Fermé
bthenault - 29 sept. 2009 à 10:52
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 30 sept. 2009 à 12:05
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

4 réponses

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
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
bthenault Messages postés 55 Date d'inscription mercredi 22 juillet 2009 Statut Membre Dernière intervention 8 juin 2011 1
30 sept. 2009 à 11:57
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > bthenault Messages postés 55 Date d'inscription mercredi 22 juillet 2009 Statut Membre Dernière intervention 8 juin 2011
30 sept. 2009 à 12:05
Excusez-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
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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
29 sept. 2009 à 14:33
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