× 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
29,99 €SSD Kingston A400 240 Go à 29,99 €
Valable jusqu'au 23 Octobre

Amazon fait une promotion sur le SSD Kingston A400 240 Go qui passe à 29,99 € livré gratuitement alors qu'on le trouve autour de 35 € ailleurs. Il offre des débits de 450 Mo/s en écriture et 500Mo/s en lecture.


> Voir l'offre
79,99 €Casque sans fil Sony WH-CH700N Bluetooth avec réduction de bruit active à 79,99 €
Valable jusqu'au 23 Octobre

Cdiscount fait une belle vente flash sur le casque sans fil Sony WH-CH700N Bluetooth qui passe à 79,99 € livré gratuitement alors qu'on le trouve ailleurs à plus de 120 €. Ce casque sans fil rechargeable (via micro USB) offre jusqu'à 35h d'autonomie. L'AINC (Artificial Intelligence Noise Cancelling) s'adapte à votre environnement, ce qui vous permet d'éliminer les bruits indésirables lors de vos voyages ou si vous êtes avec d'autres personnes dans une même pièce. Une très bonne affaire. 6 mois d'abonnement à Spotify Premium vous sont également offerts si vous êtes membre CDAV.


> Voir l'offre
114,90 €TP-Link Deco M4 (WiFi Mesh 1200 Mbit/s, jusqu'à 320 m²) x 3 à 114,90 €
Valable jusqu'au 22 Octobre

Amazon fait une promotion sur le kit TP-Link Deco M4 avec 3 satellites qui passe à 114,99 € livré gratuitement alos qu'on le trouve ailleurs à partir de 150 €. Ces 3 satellites Deco travaillent ensemble pour former un seul et unique réseau WiFi, garantissant une connexion rapide importe où que vous êtes. Ils offrent une connexion Mesh WiFi haut débit de 1200 Mbit/s , la possibilité de connecter + de 60 appareils dans votre foyer jusqu'à 320 m² et sans zone morte (si cela ne suffit pas, ajoutez simplement plus de Deco à tout moment pour augmenter la couverture WiFi), idéal pour toute la maison.


> 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