Format date dans un formulaire

Bonsoir à tous,

Je sais que la question a du vous être posée environ 157 289 213 fois mais voilà mon problème :

J'ai créé un formulaire et dans une case j'ai besoin de rentrer la date et l'heure pour la prise d'un rendez-vous. Mais voilà que quand je teste mon formulaire et que je veux taper une date j'obtiens un :

"Erreur de compilation :

Projet ou bibliothèque introuvable"

Ce qui est, vous pensez bien, pas ce que je veux !

Voici la partie du code qui se retrouve mis en évidence :

Private Sub TextBox10_AfterUpdate()

End Sub

Au tout début de mon code j'explique bien où est ce que l'information doit aller dans mon tableau de base.

L = Sheets("Listing").Range("a65536").End(xlUp).Row + 1

End Sub

Merci pour tous les conseils que j'ai pu trouvé ici en tant que visiteur masqué !

Je débute dans la VBA et je dois dire que j'aime beaucoup ça, donc c'est surement un truc bête qui ne fonctionne pas, mais si vous pouviez me l'expliquer je ne dis pas non... Autant apprendre de ses erreurs n'est ce pas ?

D'avance, MERCI BEAUCOUP pour votre aide !

A très vite,

CPkz

Bonjour,

s.v.p. montrez-nous ce que vous inscrivez dans le texbox.

Bonjour, Salut Isabelle !

Ta proc. TextBox10_AfterUpdate est à peu près totalement inutile !

Une TextBox contient du texte... pour convertir en texte une valeur date en lui appliquant un format de date [ce que fait Format], il faut disposer d'une valeur date, donc qu'elle ait été spontanément convertie par VBA... quand ça ne marche pas, c'est qu'on n'a pas une date !... Il conviendrait donc préalablement de tester si la saisie est convertible en date, avec IsDate, si elle l'est, on peut la mettre au format (qu'elle risque d'ailleurs déjà d'avoir, ou pas loin, sinon comment pourrait-elle être reconnue... si elle ne l'est pas, renvoyer l'utilisateur à sa saisie (et BeforeUpdate serait alors mieux adaptée)... Mettre un format n'a par ailleurs que peu d'importance tant qu'on applique un format qui n'empêchera pas la chaîne d'être reconnue comme littéral date, ce qui en a par contre c'est de penser à convertir le contenu de la TextBox en date lors de l'affectation, pour éviter des surprises en la matière...

Sur un autre plan...

Je débute dans la VBA

Ne zappe pas le chapitre sur les boucles, ni celui qui indique l'intérêt de renommer ses contrôles dans un Userform... cela évitera de longues énumérations et présentera un code plus agréable à lire.

Cordialement.

Hello !

Merci pour votre retour.

Isabelle dans ma Textbox j'inscris ma date comme ça : 24/02/2018

Je peux aussi faire en sorte qu'après les deux premiers chiffres le "/" apparaisse et encore après les deux suivant... (héhé ! ça je sais le faire)

Pourquoi il y a plus le calendrier lié sur la version 2016 ?

C'était trop cool comme outils !

MFerrand, tu dis

Ta proc. TextBox10_AfterUpdate est à peu près totalement inutile !

Et bien merci. Au moins ça c'est fait ! (J'aime la franchise surtout quand ça me permet d'avancer donc c'est pas négatif hein!)

Pour ce qui est du reste, j'ai essayé de suivre des tutos comme il y en a. Puis des potes m'ont demandé de les aider alors tant qu'à faire autant appliquer ce que je peux lire sur ce site et d'autres et dans mes bouquins sur un fichier qui me parle plus.

Comme j'ai rien compris à ton pavé, je vais me pencher sur le chapitre sur les boucles et je vais voir ce que ça donne

Enfin je vais tout de même essayer. Si j'écris :

"Me.TextBox10.Vaue=IsDate"

ça peut fonctionner ?

Bonne journée à tous

Re,

Ne mélangeons pas tout ! Les boucles et le reste concernait ce que j'ai vu du reste de ton code, question posée mise à part... J'y ajoute volontiers que pour travailler correctement sur du code il est indispensable de l'indenter, et sur le Forum judicieux de le mettre sous balises Code pour qu'il soit lisible, comme tu le verras...

Revenons aux dates : une date est dans Excel comme VBA, un nombre qui peut être saisi sous forme texte... Lorsqu'on saisit une date dans une cellule, soit du texte avec un format de date correspondant aux formats reconnus (cf. paramètres régionaux de Windows), Excel reconnaît un littéral date, convertit ce texte en date (soit en nombre, forme sous laquelle il est stocké), et si la cellule est au format Standard, modifie automatiquement ce format de cellule pour le faire correspondre au format date correspondant au type de saisie.

VBA fait un petit peu la même chose, quand il voit du texte qu'il peut identifier comme date, il convertit en date, à ceci près que s'il le fait de lui-même, il le fera selon ses paramètres natifs de reconnaissance qui sont américains ! (d'où le problème récurrent d'inversion mois/jour lorsqu'on travaille en paramètres FR), mais si on le lui fait faire, il se réfèrera comme Excel aux paramètres régionaux de Windows (soit paramètres FR).

S'agissant de la TextBox10, une saisie telle que : 24/02/2018 n'a aucune raison de provoquer l'erreur de compilation que tu signales. Celle-ci provient donc d'autre chose, qui éventuellement se situe ailleurs qu'à l'emplacement signalé... Ce sera à voir de plus près si le problème persiste.

J'ai dit que c'était inutile car une saisie sous cette forme est identifiable comme date et se trouve déjà au format dans lequel tu veux la mettre, et tu ne peux la mettre que dans un format qui restera identifiable comme format de date, sinon tu cours le risque qu'elle ne soit plus par la suite reconnue comme date... Donc à ce stade (saisie) :

Private Sub TextBox10_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox10.Value = "" Then Exit Sub
    If Not IsDate(TextBox10.Value) Then
        MsgBox "Saisir une date valide !", vbCritical, "Date invalide"
        Cancel = True
    Else
        TextBox10.Value = Format(CDate(TextBox10.Value), "dd/mm/yyyy")
    End If
End Sub

Voilà qui aurait été cohérent ! Mais l'important dans l'affaire est de savoir si on a une date valide (soit reconnue comme telle), son format est alors secondaire... Mais ne jamais perdre de vue que Format renvoie toujours une valeur texte, son utilisation pour alimenter une TextBox (qui ne contient que du texte) ne pose donc aucun problème, mais son utilisation pour affecter une valeur de type date à une cellule est absolument à proscrire !

Et lors de l'affectation:

    With Sheets("Listing")
        '...
        .Range("L" & L) = CDate(TextBox10.Value)
        '...
    End With

NB- Cela me chiffonnerait vraiment d'écrire Range non précédé d'un point qui la fasse référer explicitement à une feuille, car le code non qualifié (dépourvu de qualificateur d'objet) est toujours moins fiable et plus lent...

Ceci étant, le point important lors de l'affectation d'une valeur de type date à Excel est de la convertir systématiquement en Date, afin d'éliminer tout risque d'inversion mois/jour. Quant au format, il relève du format de cellule et en aucun cas d'une mise en forme de texte...

Cordialement.

Merci pour ses explications !!!

Je suis au travail là, mais je regarde ça ce soir !

Je comprends mieux maintenant. ça me partait toujours un peu compliqué, mais à force ça va venir

Merci beaucoup, je vous tiendrai au courant

Belle journée !

CPkz

Bonjour Cpkz, Salut MFerrand !

vous pouvez télécharger Date Picker Add-in pour Excel 2007-2016 pour Windows

ici:

http://www.rondebruin.nl/win/addins/datepicker.htm

Bonjour Cpkz, Salut MFerrand !

vous pouvez télécharger Date Picker Add-in pour Excel 2007-2016 pour Windows

ici:

http://www.rondebruin.nl/win/addins/datepicker.htm

Géniaaaaaal !!!

Je vais vous vénérer toi et MFerrand !

Merci Cpkz pour ce retour, au plaisir!

si le problème est résolu, s.v.p. pour clôturer le fil, cliquer sur le bouton V vert du post à coté du bouton EDITER, merci!

Merci Cpkz pour ce retour, au plaisir!

si le problème est résolu, s.v.p. pour clôturer le fil, cliquer sur le bouton V vert du post à coté du bouton EDITER, merci!

Je regarde ces bons conseils ce soir et si c'est ok pour moi cloture le sujet. Encore merci !

Bonsoir,

J'ai essayé ce que tu m'as dis MFerrand. Et j'ai le même message d'erreur et la meme partie du code qui est surligné.

Private Sub TextBox10_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox10.Value = "" Then Exit Sub
    If Not IsDate(TextBox10.Value) Then
        MsgBox "Saisir une date valide !", vbCritical, "Date invalide"
        Cancel = True
    Else
        TextBox10.Value = Format(CDate(TextBox10.Value), "dd/mm/yyyy")
    End If
End Sub

Décidemment...

je vais essayer avec le calendrier lié. Si ça fonctionne ça m'arrangerait parce que je trouve ça plus intuitif ainsi

Merci pour votre aide. Je vous tiens au courant

Bonsoir,

L'erreur que tu as signalée au départ ne peut pas venir de ce code, ni du tien initial d'ailleurs...

Tu as indiqué :

"Erreur de compilation :

Projet ou bibliothèque introuvable"

Il convient de vérifier dans l'éditeur VBA : Outils > Références, que tu n'as pas de référence déclarée manquante (auquel cas il faut commencer par la décocher...)

Cordialement.

Ah oui ! J'avais déjà vu cette aide avant. J'ai bien une référence manquante mais quand je veux la décocher ça me dit "Impossible de supprimer le contrôle ou la référence; en cours d'utilisation"

J'ai pu télécharger l'Add-In...

Je vais voir si je peux le faire avec ça, comme c'est ce que j'avais fait à la base sur ma version 2007

En tout cas merci pour tous vos conseils. Je continue les cours VBA proposé pour en apprendre toujours plus

Bonne soirée à tous !

Bonjour Cpkz,

Dans ton message du 13/02 à 00:22, tu as mis une partie de code VBA (dont nom de Sub et test If inconnus).

Je t'en propose cette optimisation :

Private Sub X()
  Dim L As Long, i As Byte

  If ... Then
    L = Worksheets("Listing").Cells(Rows.Count, 1).End(xlUp).Row + 1
    ' Pour les 12 TextBox
    For i = 1 To 12
      Cells(L, i - 2 * (i > 9)) = Controls("TextBox" & i)
    Next i
    ' Pour les 3 ComboBox
    Cells(L, 10) = ComboBox1
    Cells(L, 11) = ComboBox2
    Cells(L, 15) = ComboBox3
  End If
  MsgBox "Nouveau client ajouté à la base"
End Sub

NB : pas besoin de parenthèses pour le texte de MsgBox

Cordialement,

dhany

Rechercher des sujets similaires à "format date formulaire"