42
Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion des enregistrements

Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

Embed Size (px)

Citation preview

Page 1: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

Cours VB 2007/2008 1

Chapitre 6

Les Bases de Données en VB

Intéraction avec les données dans une base de données Microsoft

Jet/Microsoft Access Et

gestion des enregistrements

Page 2: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

2 Cours VB – ISG 2007/2008

Le modèle ADO

Modèle ADOActiveX Data Object

Modèle DAOData Access Object

L’objet Connection

La collection Errors

L’objet RecordSet

L’objet Commmand

• Le modèle ADO est une bibliothèque d’instructions qui permet de gérer de nombreux paramètres pour se connecter et de manipuler des sources de données.

• DataEnvironment se base sur l’utilisation du modèle ADO mais offre plus de possibilités (exemple: possibilité de faire plusieurs connections)

Page 3: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

Cours VB 2007/2008 3

Objet Connection

Page 4: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

4 Cours VB – ISG 2007/2008

L’objet Connection

L’objet Connection est utilisé pour établir une connexion avec une source de données : par exemple une base de données Access ou une base orientée Client-Serveur de type SQL Server ou Oracle.

Différents paramètres peuvent être indiqués à l’objet Connection : Le fournisseur de données Le nom utilisateur Le mot de passe Les autorisations d’accès

Page 5: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

5 Cours VB – ISG 2007/2008

Création d'une connexion à

un fichier de BD Access (1)

Lorsque vous travaillez avec les données d'une base Microsoft Access, vous devez commencer par créer une connexion vers un fichier de base de données Microsoft Jet/Microsoft Access :

1. Ajoutez à votre projet un concepteur Data Environment (Ajouter Data Environnement dans Plus de connexion Activex dans le menu Projet.) ou ouvrir un projet de données (ProjetData).

2. Remarque : Si le concepteur d'environnement de données n'est pas disponible dans le menu Projet, ajoutez-le à votre environnement Visual Basic. Cliquez sur Composants dans le menu Projet, cliquez sur l'onglet Concepteurs, puis activez la case à cocher correspondant à son nom dans la liste des concepteurs.

Page 6: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

6 Cours VB – ISG 2007/2008

Création d'une connexion à un fichier de BD Access (2)

2. Définissez les propriétés de connexion pour le concepteur. cliquez à l'aide du bouton droit de la souris sur l'objet Connection dans votre concepteur Data Environment, puis choisissez Propriétés depuis le menu contextuel :

Sélectionnez un fournisseur JET 4.0 OLE DB sur l'onglet Fournisseur de la boîte de dialogue.

Puis cliquez sur Suivant et entrez le chemin d'accès au fichier de la base de données

Remarque Vous pouvez définir les propriétés supplémentaires de connexion en cliquant sur les onglets Paramètres avancés ouTous, ou tester la connexion en cliquant sur Tester la connexion.

Page 7: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

7 Cours VB – ISG 2007/2008

Recap

BDAccess

Projet VB

1 ou ++

Data Environnement

JET 4.0 OLE DB

Page 8: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

Cours VB 2007/2008 8

Objets commandesObjets Recordset

Page 9: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

9 Cours VB – ISG 2007/2008

L’objet Command

Dans la hiérarchie ADO l’objet Command se place après l’objet Connection et détermine le type de tables ou les requêtes SQL qui interpelleront les tables.

En fonction des différents fournisseurs de données ces paramètres peuvent varier : Table Vue Texte d’une requête SQL Relation Regroupement Type de position du curseur Type de verouillage ..

Page 10: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

10 Cours VB – ISG 2007/2008

Création d'un objet Command d'environnement de données

Une fois créée la connexion à votre BD, vous pouvez utiliser le concepteur Data Environment pour créer les objets Command qui vous donneront accès aux données. Par exemple, vous pouvez créer un objet Command simple qui vous donne accès aux données d'une table et un autre objet Command, plus complexe, basé sur une requête.

Pour créer un objet Command d'environnement de données simple:

1. Ouvrez un concepteur Data Environment

2. Créez l'objet Command Data Environment bouton droit sur la connexion Ajouter une commande bouton droit sur l'objet Command Propriétés spécifier le nom de l'objet Command, la connexion qu'il utilise et la source de ses données dans la boîte de dialogue Propriétés de Command.

Page 11: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

11 Cours VB – ISG 2007/2008

Objet commande basée sur une table

Par exemple, pour créer un objet Command basé sur la table Clients de la base Les comptoirs, définissez les propriétés suivantes :

 

Page 12: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

12 Cours VB – ISG 2007/2008

Objet commande basée sur une requête

Ouvrir un concepteur Data Environment existant ou en créer un nouveau.

Créez l'objet Command mais au lieu de sélectionner un objet base de données spécifique comme base de la commande, sélectionnez comme source de la commande Instruction SQL. Ensuite, cliquez sur le bouton Générateur SQL pour ouvrir le Concepteur de requêtes dans lequel vous spécifiez les tables, les champs et les critères de la requête.

Page 13: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

13 Cours VB – ISG 2007/2008

Exemple – Client français

Créez une requête qui retourne des informations sur les clients français

1. Glisser la table Client de la fenêtre Fenêtre Données (disponible dans le menu Affichage)

2. Cliquez sur la case à cocher à côté des champs que vous voulez inclure dans la requête.

3. Spécifiez les critères de la requête en entrant « France » dans la case Critère du champ Pays dans la grille du Concepteur de requêtes. Lorsque vous spécifiez les champs et les critères, le Concepteur de requêtes crée automatiquement l'instruction SQL sous-jacente de la requête 

Pour afficher les résultats de la requête, cliquez avec le bouton droit de la souris sur le Concepteur de requêtes et sélectionnez exécuter. Le Concepteur de requêtes affiche le résultat produit.

Page 14: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

14 Cours VB – ISG 2007/2008

Exemple – Client français

SELECT Adresse, `Code client`, `Code postal`, Contact, Fax, Fonction, Région, Société, Téléphone, VilleFROM ClientsWHERE (Pays = 'france')

Page 15: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

15 Cours VB – ISG 2007/2008

Exemple – Commandes des Client français

Exemple: Créez une requête qui retourne des informations sur les commandes des clients français 1. Glisser les tables Clients et Commandes 2. Cliquez sur la case à cocher à côté des champs que vous voulez inclure dans la requête.3. Spécifiez les critères de la requête en entrant « France » dans la case Critère du champ Pays dans la grille du Concepteur de requêtes.

Page 16: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

16 Cours VB – ISG 2007/2008

Exemple – Commandes des Client français

Pour créer une grille de données qui affiche les commandes des clients français:

1. Sélectionnez l'objet Command ClientsFrancais.2. Glissez l'objet Command vers une feuille vide

à l'aide du bouton droit de la souris: Visual Basic affiche un menu contextuel dans

lequel vous choisissez de créer une grille de données (DataGrid) ou un contrôle dépendant. Lorsque vous sélectionnez DataGrid, Visual Basic crée automatiquement une grille de données qui affiche les enregistrements du jeu d'enregistrements de la commande.

Lorsque vous exécutez la feuille, Visual Basic affiche les enregistrements retournés par l'objet Command ClientsFrancais dans une grille de données.

 

Page 17: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

17 Cours VB – ISG 2007/2008

L’objet Recordset (1)

A chaque objet Command est associé un objet Recordset qui représente les enregistrements retournés par ce dernier

L'objet Recordset utilise le même nom que l'objet Command mais lui ajoute un préfixe «rs» (Recordset).

Exemple: lorsque le concepteur d'environnement de données crée la commande TableClients, il crée aussi un objet Records et nommé "rsTableClients."

Chaque ligne d’un objet Recordset comprend un ou plusieurs champs représentant un ou plusieurs objet Field.

Page 18: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

18 Cours VB – ISG 2007/2008

L’objet Recordset (2)

Le Recordset se base sur l’utilisation de quatre types de curseurs définis dans ADO :

Curseur dynamique (=2): permet de visualiser les ajouts, les modifications et les suppressions effectués par d'autres utilisateurs. Il permet également tout type de déplacement ne nécessitant pas l'utilisation de signets dans l'objet Recordset. Ce type de curseur permet l'utilisation de signets si le fournisseur est en mesure de les prendre en charge.

Curseur à jeu de clés (=1) : son fonctionnement est identique à celui d'un curseur dynamique mais il ne permet pas de visualiser les enregistrements ajoutés par d'autres utilisateurs ou d'accéder aux enregistrements qu'ils ont supprimés. Les modifications effectuées sur les données par les autres utilisateurs sont néanmoins visibles. Ce type de curseur prend toujours en charge les signets et il permet donc tout type de déplacement dans l'objet Recordset.

Page 19: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

19 Cours VB – ISG 2007/2008

L’objet Recordset (3)

Curseur statique  (=3) : fournit une copie statique d'un jeu d'enregistrements que vous pouvez utiliser pour rechercher des données ou créer des rapports. Il permet l'utilisation de signets et rend donc possible tout type de déplacement dans l'objet Recordset. Les ajouts, modifications et suppressions effectués par d'autres utilisateurs ne sont pas visibles. Ce type de curseur est le seul autorisé si vous ouvrez un objet Recordset côté client .

Curseur à défilement en avant  (=0) : son fonctionnement est identique à celui d'un curseur dynamique, mais vous pouvez uniquement parcourir les enregistrements vers l'avant. Ce type de curseur permet d'obtenir de meilleures performances lorsque vous devez parcourir une seule fois un objet Recordset.

Page 20: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

20 Cours VB – ISG 2007/2008

L’objet Recordset (4)

Important : Vous pouvez faire référence à l'objet Command dans le code comme à une commande du Data Environment, et faire référence à son jeu d'enregistrements comme à une propriété du Data Environment. Exemple: si vous créez la commande TableClients dans un DataEnvironment nommé DataEnvironment1, vous pouvez faire référence à la commande dans le code de la façon suivante :

DataEnvironment1.TableClients Vous pouvez faire référence au jeu d'enregistrements sous-jacent de l'objet Command de la façon suivante :

DataEnvironment1.rsTableClients   

Page 21: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

21 Cours VB – ISG 2007/2008

Recap

BDAccess

Projet VB

1 ou ++

Data Environnement

JET 4.0 OLE DB

Objet command RecordSet

.

.

.

Objet command RecordSet

.

.

.

Page 22: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

Cours VB 2007/2008 22

Création d'une feuille dépendante des données simple

Page 23: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

23 Cours VB – ISG 2007/2008

Création d'une feuille dépendante des données simple(1)

Glissez un objet Command (basé sur une table ou une requête) du concepteur Data Environment vers une feuille vide. Visual Basic créée automatiquement des contrôles TexBox pour afficher les données à partir du Recordset de l'objet Command et définit des propriétés de données qui lient les contrôles aux champs du Recordset.

On dit, il crée des champs dépendants

Page 24: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

24 Cours VB – ISG 2007/2008

Création d'une feuille dépendante des données simple(2)

Si vous regardez dans les propriétés de ces différents champs, dans la catégorie "Données" vous remarquerez 3 propriétés intéressantes qui sont:

Datasource Datamember Et datafieldDans l'exemple de la Table Clients, les 2

premiers champs ont les valeurs suivantes:

Datasource = DataEnvironment1DataMember = TableClients Puis, pour chaque champ de saisie, la

propriété Datafield va variée et prendre le nom du champ auquel il est lié.

Exemple: Pour le champ 'tctCodeClient' la propriété Datafield = 'Code Client'

Page 25: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

25 Cours VB – ISG 2007/2008

Création d'une feuille dépendante des données simple(3)

Page 26: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

26 Cours VB – ISG 2007/2008

Création d'une feuille dépendante des données simple (4)

Remarque: Si une feuille contient des contrôles

dépendants alors si on modifie la valeur d’un champ puis on navigue dans les enregistrements alors c’est comme si on a fait update

Deux solutions sont possibles: bloquer les zones textes dépendantes

(locked=true) et ajouter un bouton modifier

ne pas utiliser les contrôles dépendants et utiliser les fields avant le update

Page 27: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

27 Cours VB – ISG 2007/2008

Ouverture des recordsets

Il faut lors du chargement de la feuille ouvrir les objets commandes concernés et les fermer à la fin

Exemple:DataEnvironment1.rsCTProduitsCritères.O

pen ……. …….DataEnvironment1.rsCTProduitsCritères.Cl

ose

Remarque: Si un objet commande est lié à des contrôles alors ils sont ouverts par défaut

Page 28: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

28 Cours VB – ISG 2007/2008

Consultationou

Navigation

Page 29: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

29 Cours VB – ISG 2007/2008

Navigation dans les enregistrements

Un RecordSet offre plusieurs méthodes qui permettent de naviguer dans les enregistrements :

MoveFirst déplacement vers le premier enregistrement

MoveLast déplacement vers le dernier enregistrement

MoveNext déplacement vers l’enregistrement suivant

MovePrevious déplacement vers l’enregistrement précédent

Page 30: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

30 Cours VB – ISG 2007/2008

Exemple de navigation dans les enregistrements (1)

Private Sub CmdPremier_Click()If DataEnvironment1.rsTableClients.RecordCount > 0 Then DataEnvironment1.rsTableClients.MoveFirstEnd IfEnd Sub

Private Sub CmdDernier_Click()If DataEnvironment1.rsTableClients.RecordCount > 0 Then DataEnvironment1.rsTableClients.MoveLastEnd IfEnd Sub

Page 31: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

31 Cours VB – ISG 2007/2008

Private Sub CmdPrécédent_Click() With DataEnvironment1.rsTableClients If .RecordCount > 0 Then .MovePrevious If .BOF = True Then .MoveLast End If End If End WithEnd Sub

Private Sub CmdSuivant_Click() With DataEnvironment1.rsTableClients If .RecordCount > 0 Then .MoveNext If .EOF = True Then .MoveFirst End If End If End WithEnd Sub

Exemple de navigation dans les enregistrements (1)

Page 32: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

32 Cours VB – ISG 2007/2008

Ajout

Page 33: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

33 Cours VB – ISG 2007/2008

Ajout

La méthode AddNew ajoute un nouvel enregistrement au recordset (vide)

Remarque: il faut que la propriété locktype de la commande soit différente de lecture seule (exemple Optimiste)

Syntaxe : recordset.AddNew [FieldList, Values]

Où FieldList et Values sont des paramètres facultatifs permettant d'entrer directement des valeurs dans le nouvel enregistrement.

Dès l'appel de AddNew, l'enregistrement créé devient l'enregistrement en cours.

Nouveau (AddNew) vide les champs puis Valider (Update) valide l'ajout ou Annuler (CancelUpdate) annule l'ajout

Page 34: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

34 Cours VB – ISG 2007/2008

Exemple

With DataEnvironment1.rsTableClients

.AddNew .Fields(“Code client") = “C1"

.Fields("Société") = "RABILLOUD"

.Fields("Ville") = "Paris"

.Fields("Code postal") = 750014

.UpdateEnd With

With DataEnvironment1.rsTableClients.AddNew

![Code client] = “C1"![Société] = "RABILLOUD"![Ville] = "Paris"![Code postal] = 750014.Update

End With

ou

Page 35: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

35 Cours VB – ISG 2007/2008

Ajout

Si on appelle AddNew avec paramètres le Update est lancé implicitement.

Exemple:

DataEnvironment1.rsProduits.addnew array("Réf produit", "Nom du produit"), array(144, "Ordinateur")

Permet d'ajouter directement le nouveau enregistrement dans la table produits

Page 36: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

36 Cours VB – ISG 2007/2008

Modification

Page 37: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

37 Cours VB – ISG 2007/2008

Modification

La méthode Update sauvegarde les modifications apportées à l'enregistrement en cours.

Syntaxe : recordset.Update [Fields,

Values ] Où Fields et Values sont la

liste des champs et des valeurs à modifier (facultatif).

Remarque: on ne peut pas modifier la clé

Page 38: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

38 Cours VB – ISG 2007/2008

Annulation

La méthode CancelUpdate annule les modifications apportées à l'enregistrement en cours (annule aussi l'ajout si l'enregistrement en cours vient d'être créé)

Syntaxe : recordset.CancelUpdate

Remarque: si les MAJ sont directement faite sur un datagrid CancelUpdate ne marche pas donc si on a une feuille qui contient des champs dépendants et datagrid on peut lier les champs dépendants à un objet commande et le datagrid à un autre objet commande. Ou bien on peut utilisé l’instruction Cancelbatch.

Page 39: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

39 Cours VB – ISG 2007/2008

Exemple

Private Sub Cmdvalider_Click() DataEnvironment1.rsCTProduits.Update SSTab1.Enabled = TrueEnd Sub

Private Sub CmdAnnuler_Click() DataEnvironment1.rsCTProduits.CancelUpdate SSTab1.Enabled = TrueEnd Sub

Page 40: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

40 Cours VB – ISG 2007/2008

Suppression

Page 41: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

41 Cours VB – ISG 2007/2008

Suppression

La méthode Delete permet de supprimer l’enregistrement courant

Syntaxe recordset.Delete

Remarque: On ne peut pas supprimer des enregistrements liés (intégrité référentielle) il faut dans ce cas supprimer les enregistrements connexes avant (il faut parcourir ces tables en supprimant les enregistrements connexes )

Page 42: Cours VB 2007/2008 1 Chapitre 6 Les Bases de Données en VB Intéraction avec les données dans une base de données Microsoft Jet/Microsoft Access Et gestion

42 Cours VB – ISG 2007/2008

Private Sub cmdsupprimer_Click()If MsgBox("Voulez vous supprimer", vbYesNo + vbQuestion, "GSC") = vbNo ThenExit SubEnd IfDataEnvironment1.rsTCentre.DeleteIf DataEnvironment1.rsTCentre.RecordCount > 0 ThenDataEnvironment1.rsTCentre.MovePreviousElseDataEnvironment1.rsTCentre.AddNewDataEnvironment1.rsTCentre.CancelUpdateEnd If

End Sub

Exemple