Création de signets dynamiques et problème de placement
sgtpepere
Messages postés6Date d'inscriptionmercredi 5 octobre 2011StatutMembreDernière intervention11 octobre 2011
-
5 oct. 2011 à 13:23
sgtpepere
Messages postés6Date d'inscriptionmercredi 5 octobre 2011StatutMembreDernière intervention11 octobre 2011
-
11 oct. 2011 à 14:39
Bonjour,
je voudrais créer un document Word qui permettent à des parents de remplir des fiches d'urgence pour l'école. Le Userform demande d'abord des informations aux parents qui se retrouveront sur les fiches de tous leurs enfants puis passe à un second Userform pour entrer les informations à propos des enfants.
Une fois les deux Userforms complétés, il faut se baser sur le document de départ, le dupliquer en autant de fois qu'il y a d'enfants, placer les bookmarks puis les remplir avec les infos.
Ca donne quelque chose comme ça: (je coupe le passage où je récupère le nombre d'enfants d'une famille, désigné par l'integer nbenfants
'Créer le nouveau document si nécessaire
If nbenfants > 1 Then
'copier tout le document
ThisDocument.Range(0, 0).Select
Selection.WholeStory
Selection.Copy
'se mettre à la fin du document
Selection.EndKey wdStory
For i = 2 To nbenfants
'sauter une page
Selection.InsertBreak Type:=wdPageBreak
'coller tout le document
Selection.Paste
Next
End If
'Créer les signets
ThisDocument.Range(0, 0).Select
For i = 1 To nbenfants
PlacerSignet "Classe", "classe", i
Selection.MoveDown Unit:=wdBreakPage, Count:=1
Next
Public Sub PlacerSignet(emplacement As String, nomsignet As String, i As Integer)
Selection.Find.ClearFormatting
With Selection.Find
.Text = emplacement
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchKashida = False
.MatchDiacritics = False
.MatchAlefHamza = False
.MatchControl = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
With ThisDocument.Bookmarks
.Add Range:=Selection.Range, Name:=(nomsignet & CStr(i))
.DefaultSorting = wdSortByName
.ShowHidden = False
End With
MsgBox "placement signet " & nomsignet & CStr(i)
End Sub
Les deux problèmes que j'ai:
- tout d'abord, je n'arrive pas à accéder à la page suivante quand je veux remplir les signets. Je sais qu'il n'accepte pas le wdPageBreak mais je n'ai pas réussi à savoir comment faire.
- les signets semblent être placés en tout début de document. Comme si la recherche n'avait pas déplacé le curseur au bon endroit et donc comme si l'ajout de signet se faisait toujours au début du document.
Si quelqu'un a une idée, je suis très preneur.
En vous remerciant d'avance,
Mathieu
P.S. Existe-t-il un livre avec toutes les références VB ? Par exemple, où je pourrais trouver tout ce que je peux faire avec l'objet Selection et en français compréhensible. J'ai cherché dans les bouquins O'Reilly, mais ça reste de la programmation générale et pas spécialement pour Word.
A voir également:
Création de signets dynamiques et problème de placement
L'objet Selection est à bannir et mieux vaudrait travailler avec les objets car, si pendant l'exécution de la macro, l'utilisateur fait un simple clic dans le document, Selection est modifié et ta macro va partir en banane.
Pour corriger sans avoir à tout refaire, capture la Selection :
Private maSelection As Selection
puis, au début de ta macro
Set maSelection = ActiveDocument.Application.Selection
Ensuite, dans toutes tes lignes, au lieu de t'adresser à Selection, utilise maSelection, exemple :
Dim maSelection As Selection
Set maSelection = ActiveDocument.Application.Selection
With maSelection
'.Range.Select
.WholeStory
.Copy
.EndKey wdStory
.InsertBreak Type:=wdPageBreak
.Paste
End With
Quant à l'aide sur l'objet Selection : tout est décrit dans l'aide de Word
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
sgtpepere
Messages postés6Date d'inscriptionmercredi 5 octobre 2011StatutMembreDernière intervention11 octobre 2011 11 oct. 2011 à 14:39
Alors j'ai trouvé la solution à mes problèmes.
Pour le souci de fin de page, j'ai tout bêtement repris la ligne: Selection.GoTo What:=wdGoToPage, Which:=i
(pas besoin de chercher un éventuel wdBreakPage dans le code).
Pour l'histoire des signets, il est arrivé quelque chose de très étrange. Je bossais sur un modèle Word avec macro. En passant en document (.doc et donc plus .dot), tout est rentré dans l'ordre.