Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/01/2012, 21h50   #1
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 1
Points : 1
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 :
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
Jumanji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 22h51   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 339
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 339
Points : 29 246
Points : 29 246
Salut,

Petit mot d'explication.

Code :
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 :
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.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 20h52   #3
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 1
Points : 1
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 :
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 :
MaDate= Format(ActiveDocument.MailMerge.DataSource.DataFields(52).Value, "dd/mm/yy")
ou encore
Code :
MaDate = Format(Date(.MailMerge.DataSource.DataFields(46).Value), "dd/mm/yy")
Donc , là je séche encore.

Merci pour votre aide.
Jumanji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 07h22   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 339
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 339
Points : 29 246
Points : 29 246
Salut,

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

Ça me surprend.

Je viens de tester :

Code :
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 :
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
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 07h38   #5
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 1
Points : 1
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 :
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
Jumanji est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2012, 10h37   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 339
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 339
Points : 29 246
Points : 29 246
Salut,

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

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

Code :
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
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2012, 15h57   #7
Invité de passage
 
Homme
Inscription : janvier 2012
Messages : 9
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2012
Messages : 9
Points : 1
Points : 1
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 :
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
Jumanji est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h26.


 
 
 
 
Partenaires

Hébergement Web