IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

format de date dans USERFORM [WD-2007]


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 11
    Points : 8
    Points
    8
    Par défaut format de date dans USERFORM
    Bonsoir,
    Je viens chercher un peu d’aide car je bloque sur le formatage d’une date pour obtenir le format court 17/07/11.
    Afin de remplir un document Word à l’aide d’une source de données externe (fichier.txt), j’utilisais dans un premier temps les champs de fusion.
    Pour formater ma date stockée sous la forme dimanche 17 Juillet 2011 j’employais :
    MERGEFIELD MADATE\@''dd/MM/yy'' \*MERGEFORMATpour obtenir 17/07/11
    Pour faciliter mes modifications (fréquentes), enregistrement et impression de ces documents fusionnés j’ai donc opté pour du code et un UserForm.
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     :
    Sub MaFonction ()
              Dim MADATE As String
              Dim ANNEE As String
              With ActiveDocument
                       MADATE = .MailMerge.DataSource.DataFields(46).Value
                       ANNEE = Right(ActiveDocument.MailMerge.DataSource.DataFields(46).Value, 4)
             End With
             With MonFormulaire
                      .TbAnnée.Value = ANNEE
                      .TbMaDate.Value = MADATE
             End With
    End Sub
    Sub RangerMesDonnées
              Application.ScreenUpdating = False
              With ActiveDocument
                       .Bookmarks("Année").Range.Text = TbAnnée.Value
                       .Bookmarks("MaDate").Range.Text = TbMadate.Value
               End With
               Application.ScreenUpdating = True
    End Sub
    Dans mon formulaire j’obtiens bien 2011 pour l’année mais malgré différentes formulations du style
    MADATE = Format(ActiveDocument.MailMerge.DataSource.DataFields(46).Value, "dd/mm/yy")
    Le résultat reste dimanche 17 Juillet 2011.
    J’ai envisagé de remplacer les mois ‘’ Juillet ‘’ par ‘’/07/’’ à l’aide d’une routine puis de sélectionner avec Right( ________,10) convertir en date avec CDate et reformater avec Format( _________,’’dd/mm/yy’’) mais cela me parait un peu capylotracté ( je sais il ne me reste déjà plus beaucoup de cheveux alors pourquoi en arracher plus) d’autant que je bloque sur la routine.
    Par avance merci pour vos réponses.

    PS : Je tente desespérement de mettre des balises de code mais sans effet

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Petit mot d'explication.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Format(MaDate; "dd/MM/yy")
    Va bien renvoyer 16/01/12, mais c'est une chaîne et pas une date.

    Si ru fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MaDate As Date
     
    MaDate = Format(Date(); "dd/MM/yy")
    VBA va opérer un conversion et refaire une date avec ta chaîne eet le format sera à nouveau 16/01/2012

    Donc; si tu veux garder la date en format courtil ne faut pas affecter cette valeur à une date.

    PS : pour les balises de code, c'est le # dans les outils du message.
    Tu peux suivre le lien de ma signature aussi.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci pour cette réponse rapide,
    Pour les balises je m'y colle,
    Pour ce qui est de la date cela ne m'avance pas.
    J'avais déjà cette formulation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MaDate As Date
           MaDate = Format(Date, "dd/mm/yy")
    que j'applique pour la date du jour courrant, mais en ce qui concerne le formatage d'une date différente stockée dans mon fichier texte source de données externes pour la fusion cela bloque toujours.
    Le débogeur m'indique MaDate=''dimanche 17 Juillet 2011'' si je déclare comme chaine(string),
    et il m'indique MaDate = 00:00:00 lorsque je déclare comme date,
    Il bloque donc lorsque j'appelle la valeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaDate= Format(ActiveDocument.MailMerge.DataSource.DataFields(52).Value, "dd/mm/yy")
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaDate = Format(Date(.MailMerge.DataSource.DataFields(46).Value), "dd/mm/yy")
    Donc , là je séche encore.

    Merci pour votre aide.

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Donc, si tu déclares MaDate domme chaîne, tu as une erreur ?

    Ça me surprend.

    Je viens de tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub TestSurDate()
    Dim maDate As String
     
    maDate = Format(Date, " dddd dd MMMM yyyy")
     
    Debug.Print maDate
     
     
    End Sub
    Qui passe sans problème.

    Par contre, en format de date, j'ai bien une incompatibilité de type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub TestSurDate()
    Dim maDate As Date
     
    maDate = Format(Date, " dddd dd MMMM yyyy")
     
    Debug.Print maDate
     
     
    End Sub
    Et ce dernier code ne fonctionne pas.

    Autre question, pourquoi vouloir faire cette "mise en forme" par le code ?

    On peut appliquer un masque au champ de publipostage.

    http://heureuxoli.developpez.com/off.../champs/#LII-E

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Bonjour,
    en déclarant une chaine cela me renvoie bien une date au format
    dddd dd MMMM yyyy ou dd MMMM yyyy en fonction du masque de saisie
    mais comment substituer une date provenant de ma source de données a l'expression Date dans le formatage ? (car Date me renvoie la date courante)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    maDate = Format(Date, " dd MMMM yyyy")
     
    maDate = Format("c'est ici que je dois insérer ma date source", " dd MMMM yyyy")
    Merci encore et bonne journée

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Je ne connais pas ton document ni tes données.

    Voilà le code que j'ai utilisé pour tester le format.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Sub TestDonneesBaseDeDonnees()
    Dim mymergeData As MailMergeDataSource
    Dim myData As MailMergeDataField
     
    Set mymergeData = ActiveDocument.MailMerge.DataSource
    For Each myData In mymergeData.DataFields
    Debug.Print Format(myData.Value, "dddd dd MMMM yyyy")
     
    Next myData
     
     
     
     
    End Sub

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Merci pour ton aide Heureux-oli,
    mais le chemin le plus rapide n'étant pas forcément la ligne droite j'ai donc pris un chemin détourné pour arriver à mes fins.

    Nota : 46 est la position du champ recherché dans mon fichier source au format txt ( au format "dimanche 17 Juillet 2011") que je souhaite convertir à la forme "17/07/11"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Sub ConvertionDateDepart()
            Dim DEP As String
            With ActiveDocument.MailMerge.DataSource.DataFields(46)
                DEP = .Value
                 DEP = Replace(DEP, " Janvier ", "/01/")
                 DEP = Replace(DEP, " Février ", "/02/")
                 DEP = Replace(DEP, " Mars ", "/03/")
                 DEP = Replace(DEP, " Avril ", "/04/")
                 DEP = Replace(DEP, " Mai ", "/05/")
                 DEP = Replace(DEP, " Juin ", "/06/")
                 DEP = Replace(DEP, " Juillet ", "/07/")
                 DEP = Replace(DEP, " Août ", "/08/")
                 DEP = Replace(DEP, " Septembre ", "/09/")
                 DEP = Replace(DEP, " Octobre ", "/10/")
                 DEP = Replace(DEP, " Novembre ", "/11/")
                 DEP = Replace(DEP, " Décembre ", "/12/")
            End With
                 DEPART = Right(DEP, 10)
                 DEPART = Format(DEPART, "dd/mm/yy")
                 MOIS = Format(DEPART, "mmmm")
                 ANNEE = Format(DEPART, "yyyy")
             With MyForm
                 .TbDate1.Value = DEPART
                 .TbMois.Value = MOIS
                 .TbAnnée.Value = ANNEE
            End With
    End Sub
    Voila c'est résolu
    Merci encore pour tout

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Formater Variable Date dans Userform
    Par FouJP dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/07/2012, 23h39
  2. [XL-2003] Format de date dans un UserForm
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 17/04/2009, 14h32
  3. [SQL 9i ] format de date dans un where
    Par booth dans le forum Oracle
    Réponses: 5
    Dernier message: 14/10/2005, 10h23
  4. [oracle][delphi] Problème format de date dans une requete
    Par le_parrain dans le forum Bases de données
    Réponses: 1
    Dernier message: 21/07/2005, 10h12
  5. [VBA] Pb de format des dates dans un état
    Par linda15975 dans le forum IHM
    Réponses: 45
    Dernier message: 21/06/2005, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo