Date ComboBox dans cellule

Adr11

XLDnaute Nouveau
Bonjour le Forum,

Je réalise un programme de gestion de budget dans lequel j'ai besoin de faire correspondre ma ComboBox_Mois dans l'USF "rechercher" à mes cellules au format date et je n'y arrive pas.
J'ai besoin de l'affichage suivant : mmm.yyyy

Mon code fonctionne mais, Excel stock le changement au format texte.

Merci pour votre aide

Adr
 

Pièces jointes

  • budget-vtest (2).xlsm
    121.7 KB · Affichages: 31

patricktoulon

XLDnaute Barbatruc
bonjour a tous
@soan l'erreur se produit quand une date est pris en long comme tel
c'est a dire dd divisé par mm divisé par yyyy

et cela dans l'ordre de la demande

a moindre incidence, cette erreur provoque un "##############" interminable dans les cellules car le chiffre est trop grand et faux bien entendu
 

patricktoulon

XLDnaute Barbatruc
Bonjour,

Vous avez une solution avec ma problématique de texte ?

Je ne trouve pas je pense que je cherche trop compliqué

Merci

Adr
dte = cdate(Sheets("PARAM").Range("MOIS").Cells(ComboBox_Mois.ListIndex + 1, 1))

cela dit vu les problèmes rencontrés peut être vaudrait il mieux de mettre un garde fou
plutôt que planter vba et perdre d’éventuelles données non enregistrées
VB:
' Pour les dates du combo items de 0 à 11
Dim xdte
If ComboBox_Mois.ListIndex > -1 And ComboBox_Mois.ListIndex < 12 Then
  xdte = Sheets("PARAM").Range("MOIS").Cells(ComboBox_Mois.ListIndex + 1, 1)
If IsDate(xdte) Then dte = CDate(xdte) Else MsgBox ("date non valide dans la combo"): Exit Sub
'ou
'If IsDate(xdte) Then dte = datevalue(xdte) Else MsgBox ("date non valide dans la combo"): Exit Sub
' Pour l'item "Encours"
ElseIf ComboBox_Mois.Value = "Encours" Then
   ' date du mois en cours
   dte = DateSerial(Year(Date), Month(Date), 1)
End If
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Patrick, (réponse à ton post #16)

merci pour ton info.

* je crois bien que tu parles de l'erreur « Mémoire insuffisante pour afficher en entier. »

* je sais que des dièses "#######" sont affichés si un nombre ne tient pas dans une
cellule pas assez large ; mais ça m'affiche pas le message d'erreur ci-dessus.

* et donc ça serait ce que tu as écrit à propos de la date et des divisions qui cause
cette erreur ; erreur qui survient juste en faisant Alt F11 pour aller sur l'éditeur
VBA, ou juste en affichant le UserForm.


soan
 

Adr11

XLDnaute Nouveau
dte = cdate(Sheets("PARAM").Range("MOIS").Cells(ComboBox_Mois.ListIndex + 1, 1))

Bonjour Patrick,

Merci pour la réponse ! Cependant je suis pas sur de comprendre, ceci ne va pas faire afficher textuellement "Encours" dans la cellule en sortie de combobox si ?

cela dit vu les problèmes rencontrés peut être vaudrait il mieux de mettre un garde fou
plutôt que planter vba et perdre d’éventuelles données non enregistrées
VB:
' Pour les dates du combo items de 0 à 11
Dim xdte
If ComboBox_Mois.ListIndex > -1 And ComboBox_Mois.ListIndex < 12 Then
xdte = Sheets("PARAM").Range("MOIS").Cells(ComboBox_Mois.ListIndex + 1, 1)
If IsDate(xdte) Then dte = CDate(xdte) Else MsgBox ("date non valide dans la combo"): Exit Sub
'ou
'If IsDate(xdte) Then dte = datevalue(xdte) Else MsgBox ("date non valide dans la combo"): Exit Sub
' Pour l'item "Encours"
ElseIf ComboBox_Mois.Value = "Encours" Then
' date du mois en cours
dte = DateSerial(Year(Date), Month(Date), 1)
End If

Effectivement c'est plus sage d'ajouter un garde corps si la date n'est pas valide.

Merci pour la contribution
 

patricktoulon

XLDnaute Barbatruc
re

Merci pour la réponse ! Cependant je suis pas sur de comprendre, ceci ne va pas faire afficher textuellement "Encours" dans la cellule en sortie de combobox si ?
biensur que non dte est une date
si tu veux voir atterrir"En cours" dans ta cellules c'es dans le else qui faut afficher "encours"
après tu donne trop peu d'information pour aller plus loin
parce que jusqu'a preuve du contraire dte est une variable mais comme je vois pas sa déclaration ca peut etre une date, une cellule ,un variant ,etc....
bref brouillon tout ça ;)
 

Adr11

XLDnaute Nouveau
re


biensur que non dte est une date
si tu veux voir atterrir"En cours" dans ta cellules c'es dans le else qui faut afficher "encours"
après tu donne trop peu d'information pour aller plus loin
parce que jusqu'a preuve du contraire dte est une variable mais comme je vois pas sa déclaration ca peut etre une date, une cellule ,un variant ,etc....
bref brouillon tout ça ;)

re,

Dte est effectivement une variable date, je dois la déclarer en Variant ? Déclarer une variable String dans le Else et faire correspondre avec le texte "encours" ?

Je suis légèrement perdu j'avoue ..

Merci

Adr

VB:
Private Sub CommandButton2_Click()
    Dim dte As Date
    If Me.ComboBox1 = "" Or Me.TextBox10 = "" Or Me.TextBox5 = "" Then
        MsgBox ("Il manque des informations!")

    Else
        Dim xdte
If ComboBox_Mois.ListIndex > -1 And ComboBox_Mois.ListIndex < 12 Then
  xdte = Sheets("PARAM").Range("MOIS").Cells(ComboBox_Mois.ListIndex + 1, 1)
If IsDate(xdte) Then dte = CDate(xdte) Else MsgBox ("date non valide dans la combo"): Exit Sub

' Pour l'item "Encours"
ElseIf ComboBox_Mois.Value = "Encours" Then
   ' date du mois en cours
   dte = DateSerial(Year(Date), Month(Date), 1)
End If
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 2) = Me.TextBox10
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 3) = Me.ComboBox1
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 4) = Me.ComboBox2
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 5) = Me.TextBox3
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 6) = Me.ComboBox3.Value
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 7) = Me.TextBox5.Value
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 8) = Me.TextBox6.Value
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 9) = Me.ComboBox_devise
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 10) = Me.ComboBox_Facture
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 11) = dte
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 12) = Me.TextBox7
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 13) = Me.TextBox8
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 14) = Me.TextBox9

        Range("tableau1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("DATA").Range("Z2:Z3"), CopyToRange:=Sheets("DATA").Range("AB2:AP2"), Unique:=False
        Me.ListBox1.RowSource = "decal"
        ThisWorkbook.RefreshAll
        ThisWorkbook.Save

    End If

End Sub
 

patricktoulon

XLDnaute Barbatruc
re
dte est un variant et c'est soit une date(celle la date de la combo) soit un string"encours"
c'est cela que tu veux?
VB:
Private Sub CommandButton2_Click()
    Dim dte As Variant
    If Me.ComboBox1 = "" Or Me.TextBox10 = "" Or Me.TextBox5 = "" Then
        MsgBox ("Il manque des informations!")

    Else
        Dim xdte
        If ComboBox_Mois.ListIndex > -1 And ComboBox_Mois.ListIndex < 12 Then
            xdte = Sheets("PARAM").Range("MOIS").Cells(ComboBox_Mois.ListIndex + 1, 1)
            If IsDate(xdte) Then dte = CDate(xdte) Else MsgBox ("date non valide dans la combo"): Exit Sub
            'ou
            'If IsDate(xdte) Then dte = datevalue(xdte) Else MsgBox ("date non valide dans la combo"): Exit Sub
            ' Pour l'item "Encours"
        ElseIf ComboBox_Mois.Value = "Encours" Then
            ' date du mois en cours
            dte = ComboBox_Mois.Value    'DateSerial(Year(Date), Month(Date), 1)
        End If
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 2) = Me.TextBox10
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 3) = Me.ComboBox1
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 4) = Me.ComboBox2
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 5) = Me.TextBox3
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 6) = Me.ComboBox3.Value
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 7) = Me.TextBox5.Value
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 8) = Me.TextBox6.Value
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 9) = Me.ComboBox_devise
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 10) = Me.ComboBox_Facture
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 11) = dte
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 12) = Me.TextBox7
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 13) = Me.TextBox8
        Sheets("DATA").ListObjects(1).DataBodyRange(Me.Rowid, 14) = Me.TextBox9

        Range("tableau1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets("DATA").Range("Z2:Z3"), CopyToRange:=Sheets("DATA").Range("AB2:AP2"), Unique:=False
        Me.ListBox1.RowSource = "decal"
        ThisWorkbook.RefreshAll
        ThisWorkbook.Save

    End If

End Sub
 

Discussions similaires

Réponses
2
Affichages
324
Réponses
13
Affichages
413

Statistiques des forums

Discussions
312 499
Messages
2 089 002
Membres
104 002
dernier inscrit
SkrauzTTV