comparer deux dates

jsl72

XLDnaute Junior
Bonjour à tous,

Les fonctions Then GoTo Else et End if me triturent l'esprit, le tout étant de les placer au bon endroit.

Sujet: Comparaison de la date du jour "Aujourd'hui()" avec une date prédéterminée dans la macro.
Si la date du jour est supérieure à la date prédéterminée, il faut effacer le contenu du fichier excel.XLS
en cours de traitement et afficher une boîte de dialogue " DATE DÉPASSÉE"

Dans le cas contraire continuer à traiter le fichier excel.XLS.

'Si aujourd'hui > au 01/01/2017, alors aller à "depassee"
If Date > Date Sérial (2017,1,1) Then
GoTo depassee
Else
'Si la date n'est pas dépassé on continu le traitement normal
End If
depassee
'Sélectionne toutes les cellules de la feuille de calcul et les supprime
Cells.Select
Selection.Delete Shift:=xlUp
Application.ScreenUpdating = True
'affichage de la boîte de dialogue
MsgBox " DATE DÉPASSÉE !! ", vbInformation, " MISE EN GARDE "
End Sub

Merci pour vos propositions.

Joël
 

chris

XLDnaute Barbatruc
Re : comparer deux dates

Bonjour

Ne JAMAIS utiliser GOTO

Seule la gestion d'erreur nous l'impose, hélas :mad:, mais pour tout le reste, le GOTO n'existe pas

Soit intégrer ce qui est sous l'étiquette depassée entre le then et le Else, soit créer une sous procédure et l'appeler quand nécessaire.
 

jsl72

XLDnaute Junior
Re : comparer deux dates then else

Bonjour Chris,

Merci pour cette avancée.

Si j'ai bien compris ça donnerait ce qui suit

'Si aujourd'hui > au 01/01/2017, alors
If Date > Date Sérial (2017,1,1) Then
'Sélectionne toutes les cellules de la feuille de calcul et les supprime
Cells.Select
Selection.Delete Shift:=xlUp
Application.ScreenUpdating = True
'affichage de la boîte de dialogue
MsgBox " DATE DÉPASSÉE !! ", vbInformation, " MISE EN GARDE "
Else
'Si la date n'est pas dépassé on continu le traitement normal
End If
End Sub

Merci bonne soirée.

Joël
 

JCGL

XLDnaute Barbatruc
Re : comparer deux dates

Bonjour à tous,
Salut Chris,

Peux-tu essayer avec :
VB:
Private Sub Workbook_Open()
If Date > DateSerial(2017, 1, 1) Then
GoTo Dépassée
Else
End If
Exit Sub 'ou la suite de la procédure
Dépassée:
MsgBox " DATE DÉPASSÉE !! Les valeurs vont être effacées. ", vbInformation, " MISE EN GARDE "
Cells.Delete
End Sub

Bise à Chris
A+ à tous
 

Modeste geedee

XLDnaute Barbatruc
Re : comparer deux dates

Bonsour®
l'utilisation de l'instruction GoTo est antinomique avec la notion de programmation structurée...
on appelle cela : programmation spaghetti !!! :rolleyes:

il y a toujours moyen de programmer plus proprement.
cependant une tolérance est admise au sein d'une procédure de taille inférieure au code alternatif
:rolleyes:
tolérance et intégrisme ;)
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : comparer deux dates

Bonjour à tous,
Bonjour

Ne JAMAIS utiliser GOTO

je l'ai souvent vu et entendu mais je ne suis pas du tout d'accord .
GoTo n'est pas une arme dangereuse à mettre en œuvre le problème est que bien souvent, par précipitation ou ignorance, certains oublient de mettre l'Exit Sub qui va souvent avec.

Voici un exemple qui se solutionne facilement avec l'utilisation de GoTo

111a.jpg............ mais très peu de programmeurs passent encore par la réalisation préalable d'un tel diagramme qui s'avère BIEN UTILE lorsque le code devient kilométrique et encore PLUS UTILE lorsque des modifications ultérieures doivent être faites par une autre personne que le programmeur initial


La solution apportée par Jean-Claude fonctionne parfaitement Salut l'ami !
Pour ma part, j'aurais plutôt vu:
Code:
Private Sub Workbook_Open()
Select Case Date
Case Is > DateSerial(2017, 1, 1)
MsgBox " DATE DÉPASSÉE !! Les valeurs vont être effacées. ", vbInformation, " MISE EN GARDE "
Cells.Delete
End Select
' éventuellement la suite du code
' ------------------------------
' ------------------------------
End Sub

à+
Philippe
 

Pièces jointes

  • 111a.jpg
    111a.jpg
    11 KB · Affichages: 96

chris

XLDnaute Barbatruc
Re : comparer deux dates

Bonjour

C'est un reliquat des premiers basics qui n'avaient pas de endif et encore moins de structure de boucle.

Avec un langage évolué comme VBA, on a tout ce qu'il faut pour ne pas utiliser ce vieux truc.
Je rage assez de ne pas avoir le choix pour la gestion d'erreur...

Les diagrammes j'en suis fan et si réalisés pour l'ensemble d'une application, ils permettent justement de voir tout ce qui peut faire l'objet d'une sous-procédure...
Au passage, si vous avez des conseils pour en faire de bons sur l'évènementiel, j'achète.

J'ai même vu des programmes en C remplis de GOTO : c'était inmaintenable.

Mais si vous l'aimez...
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : comparer deux dates

Re,
Bonsour®

;)
ton "IF" à 3 alternatives sans "Else IF"
s'apparente furieusement en effet à un "Select Case"
:D
........ Oui, mais chaque traitement prenait souvent des dizaines, voire des centaines de lignes d'instructions

L'exemple donné dans mon post précédent s'appliquait à un programme réalisé pour une aléseuse à commande numérique.

Le test "If" se faisait à l'aide d'un palpeur qui renvoyait la position et la dimension d'un trou percé dans une pièce (et ne pouvait se faire qu'au début du programme et uniquement avec l'outil de palpage) et en fonction du résultat, il fallait réaliser la dernière phase d'usinage, les deux dernières phases ou les trois phases et toujours dans le même ordre.

Les lignes de codes sont composées:
- du code N suivi d'un chiffre (comme dans le Basic ancestral)
- de divers codes ( G, M, T, R, S, F, ....... ) suivis d'une valeur allant de 0 à 99
- tout cela combiné avec des positions (x, y, z, w, b, .......)

Le GoTo se fait en appelant le numéro de ligne N
La possibilité d'utiliser End If, Select Case, GoSub, Return fait cruellement défaut, et toutes les fonctions connues actuellement avec VB n'existent pas.

à+
Philippe
 

job75

XLDnaute Barbatruc
Re : comparer deux dates

Bonjour à tous,

Puisque GoTo <étiquette> existe je ne vois vraiment pas pourquoi on ne l'utiliserait pas.

Perso je l'utilise de temps en temps.

Il évite le En If donc une ligne de code et peut rendre le code plus compréhensible quand le bloc End/If est grand.

L'instruction If xxxx Then Exit Sub fait la même chose, bien sûr sans étiquette.

Bonne soirée.
 

Discussions similaires

Réponses
5
Affichages
367
Compte Supprimé 979
C

Statistiques des forums

Discussions
311 733
Messages
2 082 019
Membres
101 872
dernier inscrit
Colin T