Microsoft 365 VBA : extract date

VBA_dev_Anne_Marie

XLDnaute Occasionnel
Bonjour,

Je souhaite savoir comment réécrire cette condition en VBA :

VB:
year(datepart(sousc.D_VALO))=2021
 and month(datepart(sousc.D_VALO))=12  and day(datepart(sousc.D_VALO))=31

En faite, je sais comment récupérer l'année : extract(year from sousc.D_VALO)
Je ne sais pas comment récupérer la date, par exemple, je voudrais garder que les ligne où la date=31/12/2021 :
extract( "date" from sousc.D_VALO)=31/12/2021 ?

Merci pour votre aide !
 

patricktoulon

XLDnaute Barbatruc
bonsoir

mise en application exemple
VB:
Sub test()
chaine = "year(datepart(sousc.D_VALO))=2021 and month(datepart(sousc.D_VALO))=12  and day(datepart(sousc.D_VALO))=31"
nb = GetNumOnText(chaine)
MsgBox nb(0) & vbCrLf & nb(1) & vbCrLf & nb(2)


End Sub
Function GetNumOnText(ByVal T As String, Optional Index As Long = -1, Optional ConvertNum As Boolean = False)
    Dim I&, TbL
    If ConvertNum Then T = Replace(T, ",", ".")
    I = 1
    For I = I To Len(T)
        If Mid(T, I, 1) Like "[!0-9|.|,]" Then Mid(T, I, 1) = " "
        If Mid(T, I, 1) Like "[.|,]" Then If Mid(T, I - IIf(I > 1, 1, 0), 1) Like "[!0-9|]" Or Mid(T, I, 1) Like "[!0-9,.]" Then Mid(T, I, 1) = " "
    
    Next

    With Application
        If TypeName(.Caller) = "Range" Then
            'si la fonction a été appelée par une formule
            If Index = -1 Then 'si pas d'index demandé c'est une matricielle
                If .ThisCell.Offset(1).Formula = .ThisCell.Formula Then 'si matricielle verticale
                    GetNumOnText = .Transpose(Split(Application.Trim(T) & Application.Rept(" ", 1000)))
                Else
                    GetNumOnText = Split(Application.Trim(T) & Application.Rept(" ", 1000), " ") ' si matricielle horizontal

                End If
            Else
                'si index demandé et si le text n'est pas vide  return  de l'item demandé
                If T = "" Then GetNumOnText = "" Else GetNumOnText = Split(Application.Trim(T) & Application.Rept(" ", 1000), " ")(Index)
            End If

        Else
            ' si la fonction a été appelée par VBA
            If Index = -1 Then
                GetNumOnText = Split(Application.Trim(T), " ")
            Else
                GetNumOnText = Split(Application.Trim(T), " ")(Index)
            End If

        End If
    End With
End Function
 

dysorthographie

XLDnaute Accro
Bonsoir Marie et bonsoir Patrick,
On parle de requête SQL Oracle ?

Si oui ça doit être un truc comme ça !
Code:
SELECT EXTRACT(YEAR FROM SYSDATE),
EXTRACT(MONTH FROM SYSDATE),
EXTRACT(DAY FROM SYSDATE)
FROM DUAL;
Code:
EXTRACT(YER From sousc.D_VALO)=2021 AND
EXTRACT(MONTH From sousc.D_VALO)=12 AND
EXTRACT(DAY From sousc.D_VALO)=31
Pour moi le mieux c'est de reformater les dates le temps de la session et de faire une close Where traditionnelle !
Code:
SQL="ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MON-DD'" & vbCRLF
SQL = SQL & "Select * From
sousc Where sousc.D_VALO='2021-12-31';"
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
420
Réponses
3
Affichages
169