| ||||||||
Petit astucien | Bonjour à tous. Dans un formulaire, je voudrais conditionner l'enregistrement du document au renseignement effectif de 2 zones, l'identité du sujet et la date, pour construire le nom du document à partir de ces 2 éléments. J'ai écrit ceci dans VBEditor: " Selection.GoTo What:=wdGoToBookmark, Name:="Texte8" If Selection.Text = "" Then msgbox prompt:="Vous ne pouvez pas enregistrer ce document" & vbCr _ & "qui n'a pas de nom de Patient!", Title:="ATTENTION!" GoTo 0 End If patient = Selection.Text Selection.GoTo What:=wdGoToBookmark, Name:="date" If Selection.Text = "" Then msgbox prompt:="Vous ne pouvez pas enregistrer ce document" & vbCr _ & "qui n'a pas de date!", Title:="ATTENTION!" GoTo 0 End If datedoc = Selection.Text fichier = patient & datedoc " Mais ça ne fonctionne pas. La condition n'est pas respectée et j'arrive donc à avoir des fichiers " _ .doc". Bof! Si quelqu'un peut me donner la bonne formule, ce sera formidable. Merci d'avance. Cordialement. deb56 | |||||||
Publicité | ||||||||
| ||||||||
Petit astucien | Bonsoir à tous. Je relance la demande. J'ai simplifié la commande VBA comme ci-dessous et, comme avant, quand je la teste, le survol à la souris me dit bien ce qui est lu dans les zones de formulaire concernées, mais, quand elles sont vides(" "), la commande ne va quand même pas à GoTo 0. Je sèche. Si quelqu'un a une idée, elle est la bienvenue. Merci d'avance. deb56 Dim patient As String, datedoc As String Dim nomfichier As String Dim chemin1 As String
patient = ActiveDocument.Bookmarks("Texte8").Range.Text If patient = "" Then GoTo 0 datedoc = ActiveDocument.Bookmarks("Date").Range.Text If datedoc = "" Then GoTo 0 nomfichier = patient & "_" & datedoc 'etc etc, le reste fonctionne bien.
| |||||||
Astucienne ![]() | Bonsoir, Tu parles de zones de formulaire, je suppose qu'il s'agit donc des champs de formulaire et non des contrôles de contenu. Si tu observes ces champs, tu remarqueras qu'ils ne sont jamais vides puisqu'ils présentent automatiquement quelques petits °°°°°. Essaie plutôt ceci : Sub test() Dim patient As String, datedoc As String patient = ActiveDocument.FormFields("Texte1").Result If patient = "" Or datedoc = "" Then GoTo fin 'etc. etc. Exit Sub fin: End Sub Par ailleurs, je ne sais pas si l'histoire de la date est une excellente idée. Si la date contient des / (12/04/2016), l'enregistrement ne pourra pas se faire avec ce nom. Ou alors il faut prévoir dans la macro de supprimer les /.
Modifié par m@rina le 12/04/2016 04:53 | |||||||
Petit astucien | Bonjour, m@rina. Et merci de ta réponse. Bien reçu tes explications sur le contenu des champs de formulaires. Je vais essayer ça. Mais ça va devoir attendre demain. Je te tiens au courant. Pour le champ date, tu as certainement raison. Mais je suis méfiant: j'ai donc imposé le format aaaa-mm-jj dans le champ, même si l'on tape jj/mm/aaaa. Et ça fonctionne. Encore merci de ton aide. | |||||||
Petit astucien | Bonsoir, m@rina. Ça fonctionne impeccablement. Le seul truc est que mon VBA ne veut pas de l'association if ... or if ... then ... Mais comme ça marche très bien séparément, ce n'est pas grave. Peut-être est-ce à cause de ma version d'Office (2003)? J'ai gardé aussi goto 0 et goto 1 qui fonctionnent et ça me permet de court-circuiter le message "Attention!" si les champs sont renseignés. Mais, bien sûr, j'aurais pu les appeler respectivement fin1 et fin2 ou n'importe quoi d'autre. Quoiqu'il en soit, me voici bien dépanné et juste un peu moins ignare qu'avant. Encore merci de ton aide tout-à-fait efficace.
| |||||||
Astucienne ![]() | Bonjour Contente que ça fonctionne. Pour le Or, ça marche aussi avec 2003, mais ce n'est pas comme tu as mis, il ne faut pas de deuxième IF. Reprends mon code. | |||||||
Petit astucien | Bien reçu. Toutes mes excuses pour cette lecture trop rapide. Encore merci. deb56 | |||||||
|
Les bons plans du moment PC Astuces | Tous les Bons Plans | |||||||||||||||
|