Convertion d'une Valeur en Date

Bonjour à tous,

Je crée un calendrier par Macro VBA sur Excel.

Mon classeur est composé de la façon suivante :

Une feuille par mois et une contenant 2 tableaux.

Un tableau avec les date d'anniversaire des membres de la famille.

Et un tableau avec les vacances scolaires, dont les 3 colonnes sont :

- Nom Vacances

- Début vacances

- Fin vacances

Lors de la création de mon calendrier, je vérifie dans un 1er temps si la date que je crée actuellement est égale à la date d'un aniversaire.

Puis je vérifie si cette date est comprise dans une période de vacance.

Voici le code que j'utilise :

MaFeuille, MaLigne, et MaColonne désigne la feuille et la cellule dans la quel j'écris.

Dim i As Long
Dim Tbl_VACANCES() As Variant
Dim Tbl_Dates() As Variant
Dim Feuille_Vac As Worksheet

Set Feuille_Vac = ActiveWorkbook.Worksheets("Dates")
Tbl_Dates = Feuille_Vac.ListObjects("Tbl_DATES").DataBodyRange
Tbl_VACANCES = Feuille_Vac.ListObjects("Tbl_VACANCES").DataBodyRange

For i = 1 To UBound(Tbl_VACANCES, 1)
    If Year(Tbl_VACANCES(i, 3)) = Year(Tbl_VACANCES(i, 2)) Then
        If ActiveWorkbook.Sheets(MaFeuille).Cells(MaLigne, MaColonne).Value2 >= Day(Tbl_VACANCES(i, 2)) And MaFeuille = Month(Tbl_VACANCES(i, 3)) Then
            If ActiveWorkbook.Sheets(MaFeuille).Cells(MaLigne, MaColonne).Value2 <= Day(Tbl_VACANCES(i, 3)) And MaFeuille = Month(Tbl_VACANCES(i, 3)) Then
                With ActiveWorkbook.Sheets(MaFeuille).Shapes.AddConnector(msoConnectorStraight, Cells(MaLigne, MaColonne).Left, Cells(MaLigne, MaColonne).Top + Cells(MaLigne, MaColonne).Height / 2, Cells(MaLigne, MaColonne).Left + Cells(MaLigne, MaColonne).Width, Cells(MaLigne, MaColonne).Top + Cells(MaLigne, MaColonne).Height / 2)
                    .Visible = msoTrue
                    With .Line
                        .Weight = 3
                        .ForeColor.RGB = RGB(255, 0, 0)
                    End With
                End With
            End If
        End If
    End If
Next i

Le problème de ce genre de code est que, si mes vacance s'étale sur 2 mois, je suis fichu.

Vue que je connais le jours, le mois, et l'année.

Je me demandais s'il étais possible de convertir le tout en date afin de la comparé, ce qui serais plus simple.

J'ai pensé à ça :

Date(Annee,ActiveWorkbook.Sheets(MaFeuille),ActiveWorkbook.Sheets(MaFeuille).Cells(MaLigne, MaColonne).Value2)

Mais ça ne fonctionne pas.

Aurriez vous une idée ?

Je reste à votre disposition.

Salutation

Bonjour,

pour converir en date en vba vous avez :

Cdate("argument")

https://msdn.microsoft.com/en-us/library/2dt118h2(v=vs.84).aspx

Bonjour,

Je ne vois pas MaFeuille, MaLigne, MaColonne définies avant utilisation ?

Donc variables de type variant (non déclarées) vides...

nb- Reproduire les Sub et End Sub permet aussi de fixer les bornes...

Mille excuses MFerrand,

Elles ont été défini au préalable dans une autre Sub ^^

J'ai essayé Cdate ça n'a rien donné.

Je vais essayer avec DateSerial.

Je vous tiens au courant.

Normal que CDate ne donne rien en utilisant Value2... !

Tu dis : définies dans une autre Sub (que tu ne montres pas), et tu n'indiques pas déclarées où ?

Oui c'est ce que j'ai vu.

J'ai trouvé la solution que voici :

Private Sub Ecriture_Evenement(MaLigne As Long, MaColonne As Long, MaFeuille As Long, Annee As Long)

Dim i As Long
Dim Tbl_VACANCES() As Variant
Dim Tbl_Dates() As Variant
Dim Feuille_Vac As Worksheet
Dim Val_Celules As Long
'a sup
Dim Mois As Long
Dim Li_Tbl As Long
Dim Co_Tbl As Long

Set Feuille_Vac = ActiveWorkbook.Worksheets("Dates")
Tbl_Dates = Feuille_Vac.ListObjects("Tbl_DATES").DataBodyRange
Tbl_VACANCES = Feuille_Vac.ListObjects("Tbl_VACANCES").DataBodyRange

For i = 1 To UBound(Tbl_VACANCES, 1)
Val_Celules = ActiveWorkbook.Sheets(MaFeuille).Cells(MaLigne, MaColonne).Value2
    If DateSerial(Annee, MaFeuille, Val_Celules) >= Tbl_VACANCES(i, 2) Then
        If DateSerial(Annee, MaFeuille, Val_Celules) <= Tbl_VACANCES(i, 3) Then
            With ActiveWorkbook.Sheets(MaFeuille).Shapes.AddConnector(msoConnectorStraight, Cells(MaLigne, MaColonne).Left, Cells(MaLigne, MaColonne).Top + Cells(MaLigne, MaColonne).Height / 2, Cells(MaLigne, MaColonne).Left + Cells(MaLigne, MaColonne).Width, Cells(MaLigne, MaColonne).Top + Cells(MaLigne, MaColonne).Height / 2)
                .Visible = msoTrue
                With .Line
                    .Weight = 3
                    .ForeColor.RGB = RGB(255, 0, 0)
                End With
            End With
        End If
    End If
Next i

Avec DateSerial ça marche tout seul.

Mon souci venais du fais que j'essayé de convertir un date (cotenu dans le tableau vacance) en .... date.

Donc forcément ça marchais pas.

Voilà.

MERCI beaucoup à vous

Rechercher des sujets similaires à "convertion valeur date"