× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Bureautique
 Word VBA conditionner une macro à des zones de formulaire non videsSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
deb56
  Posté le 23/03/2016 @ 19:40 
Aller en bas de la page 
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é
deb56
 Posté le 11/04/2016 à 23:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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.

m@rina
 Posté le 12/04/2016 à 04:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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 °°°°°.
Ton code serait OK s'il s'agissait de signets ordinaires, mais pas avec des champs de formulaire.

Essaie plutôt ceci :

Sub test()

Dim patient As String, datedoc As String
Dim nomfichier As String

patient = ActiveDocument.FormFields("Texte1").Result
datedoc = ActiveDocument.FormFields("Texte2").Result

If patient = "" Or datedoc = "" Then GoTo fin
nomfichier = patient & "_" & datedoc

'etc. etc.

Exit Sub

fin:
MsgBox "Vous ne pouvez pas enregistrer ce document" & vbCr _
& "qui n'a pas de nom de Patient!", Title:="ATTENTION!"

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
deb56
 Posté le 12/04/2016 à 10:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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. deb56

deb56
 Posté le 12/04/2016 à 23:07 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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. deb56

m@rina
 Posté le 13/04/2016 à 16:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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.

deb56
 Posté le 13/04/2016 à 18:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bien reçu. Toutes mes excuses pour cette lecture trop rapide.

Encore merci. deb56

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
169,95 €Ecran 24 pouces ViewSonic XG2405 (FullHD, 144Hz, IPS, 1ms, FreeSync/G-Sync) à 169,95 €
Valable jusqu'au 26 Octobre

Materiel.net fait une promotion l'écran 24 pouces ViewSonic XG2405 qui passe à 169,95 €On le trouve ailleurs autour de 200 €. Le ViewSonic XG2405 est un écran gamer 24 pouces conçu sur la base d'une dalle IPS. Idéal pour les joueurs à la recherche d'un écran efficace, il propose des caractéristiques techniques équilibrées : résolution Full HD, taux de rafraîchissement de 144 Hz, temps de réponse de 1 ms et compatibilité FreeSync / G-Sync. Précision, rapidité et fluidité sont réunis dans cet écran !


> Voir l'offre
314,81 €Mini PC MINISFORUM UM300 (Ryzen 3 3300U, 16Go RAM, 512 Go SSD) à 314,81 € avec le code BGSEDK
Valable jusqu'au 25 Octobre

Banggood propose actuellement le mini PC MINISFORUM UM300 à 306,63 € avec le code promo BGSEDK. Ce mini PC au format NUC d'Intel possède un processeur Ryzen 3 3300U avec chip graphique Vega 6, 16 Go de RAM DDR4 et un SSD de 512 Go. Il dispose d'une connectique complète : un emplacement 2,5 pouces libre (pour ajouter un disque dur ou un SSD supplémentaire, le WiFi6, le bluetooth 5.1, 3 ports USB 3.1, un port HDMI 2.0, un DisplayPort, deux ports Ethernet Gigabit et tourne sous Windows 10 que vous pourrez mettre en français. Il est livré avec une alimentation européenne. Branchez ce mini PC sur une TV ou un écran et vous avez un ordinateur discret et performant. Comptez 8,18 € pour l'assurance et la livraison soit un total de 314,81 € livré.

Ce marchand sérieux se trouvant en Chine, la livraison peut prendre une vingtaine de jours. Vous pouvez payer par carte bancaire ou par Paypal (conseillé pour bénéficier de la garantie Paypal).


> Voir l'offre
21,60 €Souris sans fil Logitech M280 à 21,60 €
Valable jusqu'au 26 Octobre

Amazon fait une petite promotion sur la souris sans fil Logitech M280 qui passe à 21,60 €. On la trouve ailleurs à partir de 30 €. Sa forme profilée est adaptée aux droitiers. Son autonomie est de 18 mois (pile AA que vous pourrez remplacer).


> Voir l'offre

Sujets relatifs
Word - Zones protégées dans formulaire
[Word//Acces via formulaire]
macro afficher masquer lignes tableau dans word 2010
Macro pour word 2013
Création d'une macro dans Word
comment vider les champs d'un formulaire Word?
[Macro Word]Erreur 9105
Extraire des information depuis pdf vers un formulaire word automatiquement
Dupliquer formulaire - word
Word - Macro - Recherche
Plus de sujets relatifs à Word VBA conditionner une macro à des zones de formulaire non vides
 > Tous les forums > Forum Bureautique