convertion des dates avec VBA fr <=> us

fredd

XLDnaute Occasionnel
Arf par un malheureux ctrl w, je viens de fermet l'onglet de mon message.
Je recommence

Suis débutant VBA et pour m'entrainer un peu, je viens de fnir un fichier pour editer des devis ou des facture pour mon frere artisant

J'ai suivis à la lettre ses besoins et adapter à la sauce VBA mais lorsque j'édite un document j'ai un petit soucie de date car il veux absolument choisir la date de l'édition et
quand je rentre la date du 17/04/2008 il en ressort la date du 17/04/2008
mais
quand je rentre la date du 02/04/2008 il en ressort la date du 04/02/2008
Je n'arrive pas à faire la convertion en date française.
J'ai besoin de conseil.
Je joint le doc complet, ne soyez pas trop dur, c'est mon tout premier programme un peu réfléchit
merci :D
 

Pièces jointes

  • Editeur.zip
    46.9 KB · Affichages: 73
  • Editeur.zip
    46.9 KB · Affichages: 67
  • Editeur.zip
    46.9 KB · Affichages: 78

ROGER2327

XLDnaute Barbatruc
Re : convertion des dates avec VBA fr <=> us

Bonjour fredd
Problème que ces dates...
J'ai complété le code en ajoutant ce qui est en rouge :
Code:
Sub editeur()

On Error GoTo GestionErreur
'formatage date
jjr = Format(Now(), "dd")
mois = Format(Now(), "mm")   ' donner le mois actuel dans la variable mois
an = Format(Now(), "yyyy")   ' donner l'année actuel dans la variable an
calend = jjr + "/" + mois + "/" + an 'variable du calendrier

' Date de la facturation
    jour = InputBox("Choix de la date de facturation", "Date", calend)
    'Selection.NumberFormat = "mmmm yyyy"
    
    [COLOR="Red"][B]x = Split(jour & "/" & an, "/")
    jour = DateSerial(x(2), x(1), x(0))[/B][/COLOR]
    
        Range("f18").Select
        ActiveCell.FormulaR1C1 = jour
La suite est inchangée.
Sur mon poste, c'est correct.
Essayez, et si ça fonctionne, faites-le moi savoir. Merci d'avance.​
Bonne journée.
ROGER2327
__________________
_
P.s. : Vous pouvez saisir 4/2/2009 ou 4/2. Si l'année manque, elle sera ajoutée.
 
Dernière édition:

fredd

XLDnaute Occasionnel
Re : convertion des dates avec VBA fr <=> us

Merci, ça fonctionne, c'est incroyable. Par contre "x" est une autre constant avec laquel on compare le "jour" ?

J'ai encore un petit problème, j'aimerais mettre une validation dans la boite "Bdsaisie" au niveau des unités qui doivent ce trouver en dessous de I21.
Je n'ai pas encore fais et je ne sais pas par quel bout y prendre.
Un petit tuyau, merci.
 

vbacrumble

XLDnaute Accro
Re : convertion des dates avec VBA fr <=> us

Bonjour

Pour ce qui concerne la date de facturation
Pourquoi ne pas simplement utiliser ceci ?

Code:
' Date de la facturation
jour = InputBox("Choix de la date de facturation", "Date", Date)
Range("F18") = jour
 

vbacrumble

XLDnaute Accro
Re : convertion des dates avec VBA fr <=> us

Re



Non le code de mon précédent message
affiche comme valeur par défaut de l'inputbox la date du jour
et inscrit cette date dans la cellule F18 (ou la date saisie manuellement dans l'inputbox)
 

fredd

XLDnaute Occasionnel
Re : convertion des dates avec VBA fr <=> us

C'est OK, ça fonctionne.

j'ai épurer de quelques lignes et virer les variables qui ne servent plus du coup
J'ai meme trouvé ma liste de validation, il suffisais de mettre le chemin des élément de la combobox dans row source 'Facturation'!H21:H48
Merci.
 

ROGER2327

XLDnaute Barbatruc
Re : convertion des dates avec VBA fr <=> us

Bonjour à tous
Compte tenu de l'interprétation très variable selon les applications et les configurations des machines, compte tenu aussi des conseils donnés dans l'aide d'Excel
Cdate, fonction, exemple
Cet exemple utilise la fonction CDate pour convertir une chaîne en Date. En règle générale, il n'est pas recommandé de programmer les dates et les heures sous la forme de chaînes développées (comme dans cet exemple). Utilisez plutôt des littéraux date et heure tels que #2/12/1969# et #4:45:23 PM#.

Dim MyDate, MyShortDate, MyTime, MyShortTime
MyDate = "12 février 1969" ' Définit la date.
MyShortDate = CDate(MyDate) ' Convertit en type Date.

MyTime = "4:35:47 PM" ' Définit l'heure.
MyShortTime = CDate(MyTime) ' Convertit en type Date.
j'ai donné la solution avec la fonction Split couplée avec DateSerial qui est clairement paramétrée. Bien entendu la solution avec CDate est plus concise. Reste à savoir si elle donne le résultat correct dans tous les cas de figure...
Chez moi :
Code:
Sub toto()
   Range("A1") = CDate("13/12")
   Range("A2") = CDate("12/13")
End Sub
renvoie 13/12 dans les deux cas !
L'un des deux devrait provoquer une erreur pour incompatibilité de type.
Cet exemple prouve que lorsqu'on utilise CDate("param1/param2"), on ne sait pas si param1 est le mois ou le quantième du jour.​
Cordialement,
ROGER2327
 
Dernière édition:

vbacrumble

XLDnaute Accro
Re : convertion des dates avec VBA fr <=> us

Bonjour Roger2327

Dans ce cas, Why not ?
Code:
x = Split(Date, "/")
jour = DateSerial(x(2), x(1), x(0))
MsgBox jour
(EDITION : Houps, désolé en relisant le fil, je viens de répondre à ma question )
Reste à savoir si elle donne le résultat correct dans tous les cas de figure...
Mon but n'était pas de me préoccuper de cette contrainte ;)

PS: fredd ne semblant pas pour le moment vouloir effectuer une vérification de la saisie d'une date valide dans l'inputbox, le cdate me satisfait pour l'instant.

Un essai de vérification de la validité d'une date
(Pour le fun et en attendant une solution plus élégante)
Code:
Sub verifdate()
jour = InputBox("date?", "Date", Date)
check = InStr(jour, "/") + InStr(StrReverse(jour), "/") + InStr(Mid(jour, 4, 9 ^ 9), "/")
If check = 11 And IsDate(jour) Then
MsgBox "date valide"
Else
MsgBox "date invalide"
End If
End Sub
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : convertion des dates avec VBA fr <=> us

Re...
Bonjour Roger2327


Dans ce cas, Why not ?

Code:
x = Split(Date, "/")
jour = DateSerial(x(2), x(1), x(0))
MsgBox jour



Mon but n'était pas de me préoccuper de cette contrainte ;)


PS: fredd ne semblant pas pour le moment vouloir effectuer une vérification de la saisie d'une date valide dans l'inputbox
Bicoze je veux que l'entrée soit aussi bien 4/2/2009 que 4/2.
- Et que se passe-t-il si l'entrée est 4/2 ?
- Il se passe que la fonction Split("4/2, "/") renvoie dans x un tableau de valeurs x(0), x(1).
- Et alors ?
- Et alors la ligne suivante plante misérablement faute de trouver un x(2).​
Pour le moment..., oui. Mais ça ne saurait tarder !
Mieux vaut prévenir que guérir.​
Cordialement,
ROGER2327
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : convertion des dates avec VBA fr <=> us

Re... (On se croise beaucoup sur ce forum)
Pour ce qui est du contrôle de validité d'une date, j'utilise ça :
Code:
Function contrôle_la_date(d As String)
[COLOR="SeaGreen"][B]'d est supposée être au format j/m ou j/m/a.[/B][/COLOR]
Dim i As Byte, x, y
   x = Split(Replace(Replace(Replace(d, "-", "/"), ".", "/"), ",", "/") & "/" & Year(Now()), "/")
   contrôle_la_date = DateSerial(x(2), x(1), x(0))
   y = Split(contrôle_la_date, "/")
   For i = 0 To 2
      If CInt(y(i)) <> CInt(x(i)) Then Exit For
   Next i
   If i < 3 Then contrôle_la_date = "date invalide"
End Function
A vbacrumble :
J'ai transformé votre procédure en fonction et je joins un classeur de comparaison des résultats de nos solutions et de la fonction CDate.
Dites-moi ce que vous en pensez.​
Bonne soirée,
ROGER2327
 

Pièces jointes

  • CONTROLE_DE_DATES.zip
    8.1 KB · Affichages: 74

Discussions similaires

Statistiques des forums

Discussions
312 836
Messages
2 092 644
Membres
105 476
dernier inscrit
hilt