End If sans Bloc If
Résolu
bthenault
Messages postés
55
Date d'inscription
Statut
Membre
Dernière intervention
-
bthenault Messages postés 55 Date d'inscription Statut Membre Dernière intervention -
bthenault Messages postés 55 Date d'inscription Statut Membre Dernière intervention -
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 !!!!
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:
- Bloc if sans end if
- Bloc-notes (windows) - Télécharger - Traitement de texte
- Code bloc - Télécharger - Langages
- Exemple planning 1 week-end sur 3 - Télécharger - Outils professionnels
- Branchement bloc de secours sans télécommande - Forum Matériel & Système
- Planning pour 3 salariés avec 1 week-end sur 3 ✓ - Forum Excel
12 réponses
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.
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.
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
2 - instructions sur une ligne logique différente de celle du if, 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
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
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é
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é
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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)
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)
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.
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.
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 !
Toutes mes excuses, ça m'apprendra à survoler les posts :s !
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!
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
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
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.
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.
comment on utilise isdate ? je ne connais pas?
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.
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.