Rapport de message :*
 

Re: Format date MDF Xlcalendar dans Userform

Titre du sujet : Re: Format date MDF Xlcalendar dans Userform
par myDearFriend! le 18/08/2009 05:04:44

Bonsoir Alragorn, merci du compliment et bienvenue sur XLpages.com

Tout d'abord, ATTENTION lorsque tu fournis un fichier en pièce jointe STP : ton classeur crée une barre d'outils, mais ne la supprime pas à la fermeture !

Pour les visiteurs qui auraient testé ce fichier, fermer cette barre n'est pas suffisant, pour la supprimer complètement il convient de passer par le menu de personnalisation des barres d'outils d'Excel. Et pour ceux qui ne sauraient pas faire, on peut aussi procéder comme ça :

- Avec Excel ouvert, ALT + F11 pour basculer sur VBA
- CTRL + G pour afficher la fenêtre d'exécution
- Dans cette fenêtre d'exécution, taper :
Application.CommandBars("Projet Outil").Delete
- Puis, valider par Entrée.


Revenons maintenant à tes questions :


1 - Si j'ai bien compris ton intention, voici comment régler le problème :

DANS LE MODULE DE CODE DU USERFORM

Je remets le code des évènements DblClick() comme tu souhaitais le faire, c'est à dire (dd/mm/yyyy) :
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Cancel = True
    mDFXLcalShow CalCtrl:=TextBox1, CalFormat:="dd/mm/yyyy", CalLang:="FR"
End Sub

Private Sub TextBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Cancel = True
    mDFXLcalShow CalCtrl:=TextBox2, CalFormat:="dd/mm/yyyy", CalLang:="FR"
End Sub

C'est dans l'évènement OKButton_Click(), qui gère le transfert de la donnée du TextBox vers la feuille de calcul qu'il convient d'agir :
   Cells(LigneSuivante, 2) = CDate(TextBox1.Text)
    Cells(LigneSuivante, 3) = CDate(TextBox2.Text)

Explication :

On retrouve dans ce cas toute la subtilité (déroutante) des formats de données...

De par la nature des contrôles TextBox, les données contenue dans ces derniers sont de type String (chaine de caractères). Dans ton cas, ces données représentent certes des Dates, mais il n'empêche que l'expression contenue reste de type Stringet ce, quelque soit la façon dont on a saisi ces éléments (avec ou sans le XLcalendar, la donnée d'un TextBox reste une chaine de caractères).

Tes cellules, elles, s'attendent à recevoir une donnée de type Date.

Si tu te contentes de transférer dans une telle cellule, une valeur de type chaine de caractères, Excel va automatiquement chercher à convertir l'expression texte en une expression de type Date. L'ennui, c'est qu'Excel n'a pas été conçu par des gaulois ... et donc, tu te retrouve avec des dates au format... anglo-saxon !

Le moyen simple que j'ai appliqué ici, c'est de forcer cette conversion de String en Date dès le départ, grâce à la fonction de conversion CDdate(), et pour empêcher Excel de le faire lui même avec sa procédure automatique douteuse...


2 - Concernant l'affichage du XLcalendar sur un seul clic dans le TextBox, il n'y a pas d'évènement Click() ou même RightClick() pour ce contrôle ActiveX. Pour ma part, je préfère le Double-clic, toutefois si tu le souhaites vraiment, tu peux faire aussi comme ça :
Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If Button = 1 Then
        mDFXLcalShow CalCtrl:=TextBox1, CalFormat:="dd/mm/yyyy", CalLang:="FR"
    End If
End Sub
ou même encore autrement :
Private Sub TextBox1_Enter()
    mDFXLcalShow CalCtrl:=TextBox1, CalFormat:="dd/mm/yyyy", CalLang:="FR"
End Sub
Cette dernière méthode à l'avantage (ou l'inconvénient) de fonctionner même si on utilise la touche TAB pour naviguer entre les contrôles du Userform...

Cordialement,