format cdate + texte en vba

  • Initiateur de la discussion Initiateur de la discussion fr832
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fr832

XLDnaute Occasionnel
format cdate ou texte dans textbox

Bonjour à tous, j'ai ce code dans un userform qui fonctionne trés bien, mais je souhaite qu'il m'affiche soit un format date (cdate) soit "non conforme".

Le code actuel plante si il y a "non conforme" , merci pour vos lumières, amitiés😉

Code:
Compteur = 0
      For I = 1 To 28 'à 25 si tu ne prends pas en compte TB_26, TB_27 et TB_28
        Dat = Me.Controls("TB_" & I)
            If Dat <> "" Then Dat = [COLOR="RoyalBlue"]CDate(Dat)[/COLOR]
                If Dat <= Date Then
                    Me.Controls("TB_" & I).BackColor = &HFF& 'ici
                    Compteur = Compteur + 1
                    Me.TB_29 = Compteur
                End If
        Next
End With
End Sub
 
Dernière édition:
Re : format cdate + texte en vba

Voici une validation possible des dates
Peut être écrit en fonction :

Option Explicit
Sub Extraction()
Dim Jour As String
Dim Journée As String, Mois As String, Année As String
Dim Msg As String, MaxJourMois As String
Msg = ""
Jour = InputBox("date", "Saisir", "30/02/2010")
'Filtre1 numéro de jour
Journée = Left(Jour, InStr(1, Jour, "/") - 1)
If Val(Journée) > 31 Or Val(Journée) < 1 Then Msg = "Numéro de jour impossible"
'Filtre numéro de mois
Mois = Mid(Jour, InStr(1, Jour, "/") + 1)
Mois = Left(Mois, InStr(1, Mois, "/") - 1)
If Val(Mois) > 12 Or Val(Mois) < 1 Then Msg = "Numéro de mois impossible"
'Filtre cadre de l'année
Année = Right(Jour, InStrRev(Jour, "/") - 2)
If Val(Année) > 2200 Or Val(Année) < 1980 Then Msg = "Année hors du cadre de traitement"
If Msg = "" Then
'Filtre2 numéro du jour
If Val(Mois) < 12 Then
MaxJourMois = Day(DateAdd("d", -1, DateAdd("m", 1, "01/" & Mois & "/" & Année)))
Else
MaxJourMois = Day(DateAdd("d", -1, DateAdd("m", 1, "01/01/" & Année + 1)))
End If
If Val(Journée) > Val(MaxJourMois) Then Msg = "Numéro de jour pour ce mois impossible"
End If
' Affichage du message d'erreur
If Msg <> "" Then MsgBox Msg
End Sub

J'espère que cela correspond à tes attentes ...
 
Re : format cdate + texte en vba

Bonjour çamarchepas, merci pour ton aide mais en fait j'ai un userform qui indique des date d'échéances dans une base de données, ça fonctionne impéccable.
Mon problème est que sur certains matériels ils sont non-conforme.

Grace à l'aide de BrunoM45 il m'a donné une formule qui marque "non conforme" lorsque dans la base de donné il y a NC

Et depuis ce temps vba plante si dans l'userform il y a "non conforme" dans une textbox.

Merci pour vos lumières
 
Re : format cdate + texte en vba

Bonjour,

essaye peut être de tester au préalable avec la fonction "IsDate", de toute évidence la fonction "cdate" renvoie un message d'erreur, lorsque la valeur testée n'est pas une date...

bonne journée
@+
 
Re : format cdate + texte en vba

😕bonjour çamarchepas, pierrot93 merci pour vos conseils je vais chercher sur la fonction "isdate" , car effectivement avec cdate si ce n'est pas une date il y a erreur.
Quelle erreur y a t'il entre isdate et cdate?
Merci par avance.
 
Re : format cdate + texte en vba

Re,

"IsDate" teste si la valeur est bien une date...
"CDate" convertie la valeur en une date

A noter, dans l'éditeur vba, touche de fonction F1 sur les mots, t'affichera l'aide visual basic...

@+
 
Re : format cdate + texte en vba

Re pierrot 93, super sa fonctionne, je suis vraiment largué mais j'ai réussi grace à ton aide .
Je pensais qu'il fallait refaire des lignes de codes et j'ai recherché plein de choses sans vraiment comprendre lol.

Et là j'ai simplement remplacé le mot CDate par Isdate et ça fonctionne merci infiniement.

Amitiés et bonne journée.
 
Re : format cdate + texte en vba

RE, toujours moi, voila donc mon code
Code:
[Compteur = 0
      For I = 1 To 28 'à 25 si tu ne prends pas en compte TB_26, TB_27 et TB_28
        Dat = Me.Controls("TB_" & I)
            If Dat <> "" Then Dat = IsDate(Dat)
                If Dat <= Date Then
                    Me.Controls("TB_" & I).BackColor = &HFF& 'ici
                    Compteur = Compteur + 1
                    Me.TB_29 = Compteur
                End If
        Next
End With
End Sub/CODE]
Le fait d'avoir mis IsDate le fond de ma textbox se mettait en rouge lorsque la date d'échéance était dépassée.

Maintenant le fond de la textbox est toujours rouge .

Comment modifié ce code afin que le fond de la textbox ne se mette en rouge que si l'échéance est dépassée.

Merci d'avance
 
Re : format cdate + texte en vba

Re

en lieu et place de ces lignes :

Code:
If Dat <> "" Then Dat = IsDate(Dat)
If Dat <= Date Then

tu mets :

Code:
If Not IsEmpty(TextBox1) And IsDate(TextBox1) Then
    If CDate(TextBox1) <= Date Then

en ayant remplacé "textbox1" par "dat"...
 
Re : format cdate + texte en vba

rebonsoir et merci pour l'aide pierrot voila tout mon code mais il plante à hauteur de next.
Pourrais je avoir des solutions merci encore par avance
Code:
Private Sub Bn_Afficher_Click()
  Dim Lig As Long, VPathFic As String
  Lig = Me.ComboBox1.ListIndex + 4
  With Sheets("rp 12")

    Me.TB_1 = .Range("C" & Lig)
    Me.TB_2 = .Range("E" & Lig)
    Me.TB_3 = .Range("G" & Lig)
    Me.TB_4 = .Range("I" & Lig)
    Me.TB_5 = .Range("L" & Lig)
    Me.TB_6 = .Range("N" & Lig)
    Me.TB_7 = .Range("Q" & Lig)
    Me.TB_8 = .Range("T" & Lig)
    Me.TB_9 = .Range("V" & Lig)
    Me.TB_10 = .Range("X" & Lig)
    Me.TB_11 = .Range("Z" & Lig)
    Me.TB_12 = .Range("AB" & Lig)
    Me.TB_13 = .Range("AD" & Lig)
    Me.TB_14 = .Range("AF" & Lig)
    Me.TB_15 = .Range("AH" & Lig)
    Me.TB_16 = .Range("AJ" & Lig)
    Me.TB_17 = .Range("AL" & Lig)
    Me.TB_18 = .Range("AN" & Lig)
    Me.TB_19 = .Range("AP" & Lig)
    Me.TB_20 = .Range("AR" & Lig)
    Me.TB_21 = .Range("AS" & Lig)
    Me.TB_22 = .Range("AU" & Lig)
    Me.TB_23 = .Range("AW" & Lig)
    Me.TB_24 = .Range("AY" & Lig)
    Me.TB_25 = .Range("AZ" & Lig)
    Me.TB_26 = .Range("J" & Lig)
    Me.TB_27 = .Range("O" & Lig)
    Me.TB_28 = .Range("R" & Lig)
    Me.TB_majrp12 = .Range("F14")

    
    Compteur = 0
      For I = 1 To 28 'à 25 si tu ne prends pas en compte TB_26, TB_27 et TB_28
        Dat = Me.Controls("TB_" & I)
            'If Dat <> "" Then Dat = IsDate(Dat)
                'If Dat <= Date Then
                If Not IsEmpty(Dat) And IsDate(Dat) Then
                 If CDate(Dat) <= Date Then
                    Me.Controls("TB_" & I).BackColor = &HFF& 'ici
                    Compteur = Compteur + 1
                    Me.TB_29 = Compteur
                End If
        [COLOR="Red"]Next[/COLOR]
End With
End Sub
 
Re : format cdate + texte en vba

Re,

il manque un "end if" :

Code:
If Not IsEmpty(Dat) And IsDate(Dat) Then
                 If CDate(Dat) <= Date Then
                    Me.Controls("TB_" & I).BackColor = &HFF& 'ici
                    Compteur = Compteur + 1
                    Me.TB_29 = Compteur
                End If
         [B][COLOR="Blue"]End If[/COLOR][/B]

@+
 
Re : format cdate + texte en vba

Bonsoir pierrot super un grand merci tu m'enlèves une épine du pied. Pourtant j'avais esdsayé end if mais il me semble que je n'avais pas mis de majuscule, est ce que ça peut empécher de fonctionner?

En tout cas super et encore merci amitiés😎
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
903
Réponses
17
Affichages
2 K
M
Réponses
3
Affichages
2 K
MONADESIGN82
M
Retour