Boucle Do Loop erreur
Résolu
bthenault
-
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 18903 Date d'inscription Statut Contributeur Dernière intervention -
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
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
A voir également:
- Boucle Do Loop erreur
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Iptv erreur de lecture - Forum TV & Vidéo
- Erreur t32 ✓ - Forum Livebox
- Erreur 0x80070643 - Accueil - Windows
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 :
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 _
...
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 _
...
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
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
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
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
ci joint tite démo
https://www.cjoint.com/?jDo1PLXrZo
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