Champs Word /Date - VB/VBA/VBS - Programmation
Marsh Posté le 22-07-2011 à 16:14:02
Il faut savoir que Word est tres nul en calcul... Et que si tu veux tomber juste, il faut faire des calculs astronomiques comme j'ai pu en faire, mais c'est la misère...
Voila pour le mois précédent... Mais ca ne marchera pas en Janvier... Faudrait tester si le mois =1 et a ce moment enlever 1 à l'année en cours...
On insere un code de champ avec Ctrl+F9
Le retour à la ligne dans un champ se fait avec Shift + Entrée
{ QUOTE
{ DATE \@ "dd/" }
{ ={DATE \@ MM }-1 \#00}
{ DATE \@ "/yyyy" }
Pour l'histoire de janvier on verra apres, la c'est le we
Marsh Posté le 25-07-2011 à 14:45:59
Salut dje69,
Merci pour ta réponse.
J'ai vu le "code astronimique" en fin de page que tu as écrit... effectivement ça fait peur.
J'ai essayé le code que tu m'a passé mais quand je le rentre dans les crochet aprés avroi fait ctrl F9 et que je bascule les code de champs, il ne m'inscrit pas de texte.Juste une sorte de zone de texte vide.
Dans l'absolu je ne souhaite que le mois d'avant (en lettre si possible) , donc
{ QUOTE { ={DATE \@ MM }-1 \#00}
devrait suffir nan ?
J'ai trouvé une astuce sur
http://office.microsoft.com/fr-ca/ [...] 86186.aspx
ou il propose le code suivant
{ QUOTE { IF { DATE \@ "M" } = 1 "12" " {= { DATE \@ "M" } -1 } " }/1/03 \@ "MMMM" }
Mais pareil quand je bascule en code champs, il me mets du texte blanc, un peu comme un espace que je peux selectionner. Je peux rebasculer les codes de champs pour réobtenir le code , en cliquant droit sur cet interval de texte vide....
C'est assez étrange. Je pense que je dois mal m'y prendre pour inserer le code dans le champs
Tu as peut être une idée de là ou ça pourrait venir ?
Merci bcp,
G.
Marsh Posté le 25-07-2011 à 14:51:54
J'ai une idée en effet...
Une fois le code de champ 'basculé' (d'un coté ou de l'autre) ne pas oublier de cliquer sur "Mettre à jour les champs"...?
Pour le code proposé par Microsoft.Office, ca devrait le faire...
Marsh Posté le 25-07-2011 à 15:17:07
En fait j'actualise le champs. C'est même quand j'actualise qu'il me mets ça en texte "vide". Ou parfois il me mets : Erreur ! Trop de commutateurs d'image définis.
Par exemple, je fais ctrl F9 et je copie le code suivant : QUOTE { IF { DATE \@ "M" } = 1 "12" " {= { DATE \@ "M" } -1 } " }/1/03 \@ "MMMM"
entre les crochets il me met
Erreur ! Trop de commutateurs d'image définis
Quand je fais ctrl F9 et je copie le code suivant :
QUOTE
{ DATE \@ "dd/" }
{ ={DATE \@ MM }-1 \#00}
{ DATE \@ "/yyyy" }
Et que je bascule le champs et que j'actualise, il me mets aussi Erreur ! Trop de commutateurs d'image définis.
Ces codes marches quand tu les essayes dans un doc word ?
Merci,
G.
Marsh Posté le 25-07-2011 à 16:54:40
Deja on ne colle pas du code de champ, on le tape...
Ou on passe par l'assistant... Mais un copier/coller ca ne marche pas...
Si je donne un morceau de code, c'est testé, sinon je le précise.
Solution MS « adaptée » qui fonctionne :
{ QUOTE { IF{ DATE \@ M } = 1 "12" "{ ={ DATE \@ M }-1 \# 00} "} }
Résultat : 06
Solution MS adaptée pour avoir le 1er du mois précédent { QUOTE "01/" { IF{ DATE \@ M } = 1 "12" "{ ={ DATE \@ M }-1 \# 00}"} "/"{ IF{ DATE \@ M } = 1"{ DATE \@ yyyy }-1 \# 0000}""{ DATE \@ yyyy }"}
Résultat : 01/06/2011
Autre maniere de trouver le mois et l’année, mais la ca demande un peu de connaissance sur les calculs de date et les modulos :
{ QUOTE { SET DELAIS 1 } { =MOD({ DATE \@ MM }-DELAIS;12) } }
Résultat : 6
{ QUOTE { SET DELAIS 1 } { ={ DATE \@ yyyy}+INT((DELAIS+{ DATE \@ M }-1)/12)} }
Résultat : 2011
On peut donc en jouant avec les formats, en passant donc par un format « numérique » intermediaire arrivé à : { QUOTE { SET DELAIS 1 } { SET m{=MOD({DATE \@ MM }-DELAIS-1;12)+1 } } { SET a{={ DATE \@ yyyy }+INT((DELAIS+{ DATE \@ M }-1)/12) } } { =(m*10000+a) \# "00'-'0000"}}
Résultat : 06-2011
Grace à ce format intermediaire, on peut donc jouer sur les formats pour arriver au format final souhaité : MOIS ANNEE
{ QUOTE { SET DELAIS 1 } { SET m{=MOD({DATE \@ MM }-DELAIS-1;12)+1 } }
{ SET a{={ DATE \@ yyyy }+INT((DELAIS+{ DATE \@ M }-1)/12) } } { =(m*10000+a) \# "00'-'0000"} \@ "MMMM yyyy"}
Résultat : juin 2011
Et comme je suis de bonne humeur car il fait super beau pour un mois d'octobre :
http://dje69r.free.fr/Guillaume394.doc
Si après vous n'achetez pas une Peugeot, vous êtes vraiment des enc*lés !
Marsh Posté le 25-07-2011 à 17:06:17
Le DELAIS te permet de choisir le nombre de mois precedents.
Marsh Posté le 25-07-2011 à 18:10:03
Franchement dje,
Merci bcp !!
C'est exactement ce que je cherchais et ça fait qq temps que j'esperai qu'une bonne ame m'aide.
Le word, c'est la cerise sur le gateau. Franchement merci !
Bon par contre histoire de pas mourrir idiot, j'aimerai bien comprendre deux trois choses. (Si tu trouves que je commence à abuser, t'embetes meme pas à répondre, tu m'a deja bien aidé).
J'ai tapé le code QUOTE { IF { DATE \@ "M" } = 1 "12" " {= { DATE \@ "M" } -1 } " }/1/03 \@ "MMMM" et il ne fonctionne pas. Le code est-il correct ?
Ensuite, j'ai une ou deux questions pratiques : Si je veux la première ligne en majuscules, il faut que je tape : \* Firstcap au bout de mon champs, n'est ce pas ? Mais est ce que je peux l'insérer tel quel ou faut-il que je fasse un renvoi à la ligne ou qqch comme ca ? Y a t-il un ordre de priorité dans le code avec le \@ "MMMM" ?
En fait je cherche a savoir à peu prés comment fonctionne la régle de casse des champs (retour à la ligne). Un truc trés simple mais qu'on trouve pas dans les tutoriels, un peu comme les evidences du style "copier/coller dans un champs ca ne marche pas..."' que je n'aurai jamais deviné tout seul.
Merci encore,
G.
Ps vive le mois d'octobre...
Marsh Posté le 25-07-2011 à 19:00:37
Je ne suis plus devant un ordi, mais de ce que je vois, il devrait te retourner pour juillet : 6/1/03
Or, ceci n'est pas une date... Et au pire, si c'etait formaté comme il faut, il renverrai Janvier. La date est sous forme "mois/1/03"... Ca coince forcement.
Je suppose que tu as pris cet exemple sur un site en anglais/americain
De memoire, tu dois pouvoir cumuler les formats. Je verifierai. Ca faisait "longtemps" que j'avais pas fait ca...
Le retour a la ligne, c'est juste pour la lisibilité du "code". Sauf si tu le mets dans une expression ou dans des guillemets.
Et les {} idem, on ne les tapes pas. On fait Ctrl+F9
Marsh Posté le 26-07-2011 à 09:49:53
Nan, Nan pas du tout, je l'ai pris sur le site office.microsoft en français.
http://office.microsoft.com/fr-ca/ [...] 86186.aspx
Aprés ils ont peut etre gardé les formules avec le format US.
En tt cas ce n'est pas grave puisque ta dernière formule fonctionne parfaitement. Merci !
Dernière question : les champs sont paramétrés pour s'actualiser à l'ouverture et à la fermeture d'un fichier, et manuellement pendant que le fichier est ouvert si j'ai bien compris.
Peut -on changer ce fonctionnement ? Peut-on actualiser les champs à la main en permance i.e. qu'il ne s'actualise pas tout seul.
Par ex si je touche pas au word d'ici fin juillet, puis-je paramètrer le champs pour que si j'ouvre le fichier en aout, il m'affiche toujours juin ?
Merci pour ton aide.
G.
Marsh Posté le 26-07-2011 à 16:42:46
Re
Après vérification :
{ QUOTE { SET DELAIS 1 } { SET m{=MOD({DATE \@ MM }-DELAIS-1;12)+1 } }
{ SET a{={ DATE \@ yyyy }+INT((DELAIS+{ DATE \@ M }-1)/12) } } { =(m*10000+a) \# "00'-'0000"} \@ "MMMM yyyy" \* Firstcap}
Donne bien : Juin 2011
(Avec la majusucule donc)
Pour ta question sur la date qui ne doit pas etre modifiée, il y a plusieurs solutions. En voici 2
{ QUOTE { SET DELAIS 1 } { SET m{=MOD({DATECREATE \@ MM }-DELAIS-1;12)+1 } }
{ SET a{={ DATECREATE \@ yyyy }+INT((DELAIS+{ DATECREATE \@ M }-1)/12) } } { =(m*10000+a) \# "00'-'0000"} \@ "MMMM yyyy" \* Firstcap}
Si je mets ma date system sur Aout :
Avec DATE : Juillet 2011 (logique on est en aout sur le system)
Avec CREATEDATE : Juin 2011 (là il prend bien ma date de création du fichier)
Sur la premiere ligne du document on va definir une variable date :
{ SET MADATE 01/07/2011 }
On bascule le code de champs, rien n'apparait, normal c'est un SET
Ensuite le code identique au précédent sauf qu'on va faire reference à notre variable MADATE
{ QUOTE { SET DELAIS 1 } { SET m{=MOD({MADATE \@ MM }-DELAIS-1;12)+1 } }
{ SET a{={ MADATE \@ yyyy }+INT((DELAIS+{ MADATE \@ M }-1)/12) } } { =(m*10000+a) \# "00'-'0000"} \@ "MMMM yyyy" \* Firstcap}
Resultat : Juin 2011
Donc si tu modifies la variable MADATE, en basculant le code de champ et en venant modifier la date :
{ SET MADATE 01/08/2011 }
Le champ du dessous sera Juillet 2011
Maintenant l'interet.... Autant saisir 01/07/2011 et mettre le format sous forme MMMM yyyy
EDIT : Et pour l'exemple sur le site MS, c'est bien une erreur de transcription ou erreur tout court ou sur une suite d'office que j'ai pas testé (2010)...
Quelle que soit la date, leur exemple renverra 'janvier'... Forcément, le mois (donc le chiffre du milieu) reste toujours 1...
Si on fait l'essai d'ailleurs de remplacer le 1 par 5, ca renvoi bien 'mai'... Et ce, peu importe la date system
Marsh Posté le 26-07-2011 à 19:03:24
Re,
Ecoute c'est trés clair,
Merci beaucoup pour ton temps et ton aide.
Thx !!!
Marsh Posté le 20-07-2011 à 10:36:09
Bonjour,
J'ai une petite question sur les champs Word en rapport avec les dates.
J'ai vu que le code du champs date en Word est
{DATE \@ "MMMM yyyy" \* MERGEFORMAT\* Firstcap}
pour obtenir "Juillet 2011" en terme de forme, mais je voudrai savoir ou je peux parametrer le fait d'actualiser moi même ce champs. Y a t-il une option pour que le champs ne s'actualiser pas automatiquemet ?
Par ailleurs je voulais savoir quel était le code qui permettait d'afficher la date mais avec le mois précédant. cf pour obtenir juin 2011 par exemple.
Merci d'avance,
G.