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
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
A voir également:
- Boucle Do Loop erreur
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur de lecture reconnecté en 3s - Forum TV & Vidéo
- Erreur 5000 france tv - Forum iPhone
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 _ ...
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
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
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
>
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
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
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
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
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
29 sept. 2009 à 14:33
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
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