End If sans Bloc If [Résolu/Fermé]

Signaler
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
-
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
-
Bonjour,
Je ne vois pas pourquoi il met mets l'erreur (classique certes) End If sans bloc IF


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

Merci pour votre aide !!!!
A voir également:

12 réponses

Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
850
Bonjour,

Je n'ai aucune idée du langage dans lequel tu programmes, mais à mon avis, l'erreur est affichée parce que tu n'as aucune instruction dans ton bloc 'Else', ou alors parce que cette ligne de code est mal terminée (caractère obligatoire de fin de ligne peut-être ?)

Puisque tu ne fais rien de ton cas 'Else', supprime cette ligne et passe directement à ton 'EndIf', ça ne devrait plus marquer l'erreur.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
j'ai déjà essayé
c avec Visual Basic
Bonjour

Sais-tu ce que veut dire le _ à la fin de la ligne ?
il veut dire que la ligne suivante doit être mise au bout de la précédente, et non pas considérée comme une ligne différente. C'est comme si tu avais écrit du if ... jusqu'au else sur une seule ligne
Quand le if et les instructions qui le suivent sont sur une seule ligne en VB, il ne faut pas de endif.

Tu as le choix entre les deux options
1 - instructions sur la même ligne logique que le if, pas de endif
If Not Sheet.Range("G3") = DateSerial(2009, 1 + 1, 0) And _
...
Not Sheet.Range("G3") < Date - 8 _
Then  Sheet.Delete _
Else     ' ce "else" est sur la même ligne logique que tout ce qui précède

2 - instructions sur une ligne logique différente de celle du if, il faut un endif
If Not Sheet.Range("G3") = DateSerial(2009, 1 + 1, 0) And _
...
Not Sheet.Range("G3") < Date - 8 _
Then 
Sheet.Delete ' cette instruction n'est pas sur la même ligne logique que le if.. then
Else       ' donc le else doit aussi être sur une ligne différente
End If   'et il faut un endif


Il est inutile de mettre un else vide. Si tu choisis la variante 1, n'oublie pas d'enlever le _ après SheetDelete sinon la ligne suivante sera mise à la suite
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
J'ai compris ce que tu as mis, je te remercie. Malheureusement j'ai essayé les deux ça ne marche pas, alors je remet ici parce que je comprends pas l'erreur :
Sub SupprOnglet()

'Suppression des onglets dont la date de mise à jour est : Supérieure à 8 jours pa rapport à la date dajou'dhui, n'est pas un vendredi, n'est pas le dernier jour d'un mois de l'année

Application.DisplayAlerts = False
For Each Sheet In ThisWorkbook.Worksheets
If Not Sheet.Range("G3") = DateSerial(2009, 1 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 2 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 3 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 4 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 5 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 6 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 7 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 8 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 9 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 10 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 11 + 1, 0) Or _
Not Sheet.Range("G3") = DateSerial(2009, 12 + 1, 0) Or _
Not Weekday(Sheet.Range("G3")) = 6 Or _
Not Sheet.Range("G3") < Date - 8 _
Then Sheet.Delete

Next Sheet

Application.DisplayAlerts = True


End Sub

Je m'excuse mais je trouve pas....
Il m'indique une erreur sur le Then apparement mais j'ai tout essayé
Quel message d'erreur as-tu ?
Car chez moi ça marche, Je crée un classeur vide avec 3 feuilles, il m'efface toutes mes feuilles (mais plante sur la dernière car il faut obligatoirement en laisser une)
Messages postés
125
Date d'inscription
mercredi 26 août 2009
Statut
Membre
Dernière intervention
20 octobre 2009
10
Bonjour,

D'après le code que tu postes, il te manque un End If.
Je vois le IF, je vois le THEN, mais il manque le END IF.
Non, il ne manque pas de endif. Voir message 3
Messages postés
125
Date d'inscription
mercredi 26 août 2009
Statut
Membre
Dernière intervention
20 octobre 2009
10
En effet, je n'avais jamais essayé de l'écrire sans le end if, je viens de faire un test et ça marche.
Toutes mes excuses, ça m'apprendra à survoler les posts :s !
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
quand je la teste dans une fichier vierge avec que la date en G3, mais dès que je l'applique à mon fichier il me bloque sur "Not Sheet.Range("G3") < Date - 8 _ " ... je crois que j'ai assez mangé de ça aujourd'hui, je rataque demain !!!! ça m'agace!
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
850
Etant donné ce qu'à dit Le_père dans son post 3, je dirai qu'il faut que tu vire le caractère '_' en fin d'instruction dans ton IF, sinon ça concatène la ligne suivante qui est le THEN. C'est bien comme ça que ça marche ?
Le then DOIT être sur la même ligne que le if, donc non seulement il n'y a pas d'inconvénient à le concaténer mais c'est obligatoire.
Par contre, c'est entre le then et l'instruction qui suit qu'il peut y avoir ou non une coupure de ligne. Mais les deux sont autorisés, le programme du post 4 ne présente aucune erreur à ce sujet
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
850 > le père
ok merci :)
>
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013

de rien :)
Tu ne m'as toujours pas dit quel était le message d'erreur...
Effectivement, avec un fichier non vide j'ai reproduit un problème d'incompatibilité de type. Si G3 contient autre chose qu'une date (un texte en particulier), il ne peut pas faire la comparaison. Si c'est ton cas, utilise isdate() pour savoir si G3 contient une date, avant de faire la comparaison.
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
comment on utilise isdate ? je ne connais pas?
Messages postés
4088
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
850
Est-ce que tu as fais la modification indiquée dans le post 10 ?
Comme pour toutes les fonction VB, tu écris isdate dans un module et tu fais F1 dessus :) L'aide t'explique tout.
Dans ce cas, très simplement isdate(qqchose) te rend true si qqchose est une date, et false si qqchose n'est pas une date. Ensuite, à toi de ne faire des comparaisons avec des dates que si Isdate t'a rendu true.
En supposant que ton problème est bien celui que j'ai reproduit, car tu ne m'as toujours donné aucun message d'erreur.
Messages postés
55
Date d'inscription
mercredi 22 juillet 2009
Statut
Membre
Dernière intervention
8 juin 2011
1
c'était ça en fait j'avais des anciennes feuilles sur lesquelles il y avait des nombres et pas des dates... pfiouuu !!
Merci du coup de main !!

Pour les erreurs moi ça me met juste débodage, et tout en jaune ce qui pose pb.

Maintenant c'est ok!
Merci