selection entre deux textes (dans word a partir d'excel)

selection entre deux textes (dans word a partir d'excel) - VB/VBA/VBS - Programmation

Marsh Posté le 17-01-2009 à 12:35:23    

Bonjour,
Dans une macro excel, j'ouvre un fichier word pour faire une fusion. Après, je dois réaliier une mise en forme pour une chaine de caractères qui se trouve entre deux textes(DebutTableau et FinTableau) et bien sur supprimer ces deux textes.
 
Suite à mes recherches sur internet, voici ce que j'ai fait :
 
 
Ouverture du word et publipostage, il s'agit de la sub publipostage
Sélection du texte et mise en forme , il s'agit de la sub SelectionEntreDeuxTextes. Dans l'exemple ci'dessous, je n'ai aps encore fait la mise en forme. Il s'agit de convertir du texte en tableau, de faire des bordures et de donner la largeur des cellules...
 
Sub Publipostage()
'
'Penser à activer la référence : Microsoft Word 11.0 Object Library
'Pour excel 2003, au niveau du débuggage (code), choisir menu Outils et ensuite Préférences
'Pour excel 2000, revoir le programmation en passant par les objets (late binding)
 
'
 
Dim Wkb As Workbook
Dim Monword As Word.Application
Dim Mondoc As Word.Document
Dim Conn As String
 
    Application.ScreenUpdating = False
    ActiveSheet.Range("A2" ).CurrentRegion.Copy
   
    Set Monword = New Word.Application
    Monword.DisplayAlerts = wdAlertsNone
 
        Set Mondoc = Monword.Documents.Open(Filename:=ThisWorkbook.Path & "\ModeleFiche.doc", ConfirmConversions:=True, _
        ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
        PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
        WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:="" )
         
        Conn = "Provider=Microsoft.Jet.OLEDB.4.0;Password="""";User ID=Admin;Data Source=" & ThisWorkbook.Path & "\base fiche PE.xls;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet "
     
     Mondoc.MailMerge.OpenDataSource Name:= _
        ThisWorkbook.Path & "\base fiche PE.xls" _
        , ConfirmConversions:=True, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:=Conn, SQLStatement:="SELECT * FROM `Feuil1$`", SQLStatement1:="", SubType:= _
        wdMergeSubTypeAccess
   
        With Mondoc.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
 
       
        With .DataSource
            .FirstRecord = wdDefaultFirstRecord
            .LastRecord = wdDefaultLastRecord
        End With
        .Execute Pause:=False
    End With
     
    Mondoc.ActiveWindow.ActivePane.View.ShowAll = False
    Stop
 
    Monword.Visible = True
    Call SelectionEntreDeuxTextes(Monword)
    Mondoc.Close False
     
    Monword.DisplayAlerts = wdAlertsAll
 
    Set Mondoc = Nothing
    Application.ScreenUpdating = True
End Sub
 
 
Private Sub SelectionEntreDeuxTextes(Monword)
Monword.Selection.HomeKey unit:=wdStory
Monword.ScreenUpdating = False
With Monword.Selection.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Replacement.Font.Bold = True
    .MatchWildcards = True
    .Text = "(\debutTableau*\FinTableau)"
    .Replacement.Text = "\1"
    .Forward = True
    .Execute Replace:=wdReplaceAll
End With
Stop
Monword.ScreenUpdating = True
End Sub
 
 
Mon problème est que la sélection ne se fait pas...Je pense surtout du fait que je ne comprenne pas ".Text = "(\DebutTableau*\FinTableau)""  
 
Pouvez-vous m'aider?
 
Marie

Reply

Marsh Posté le 17-01-2009 à 12:35:23   

Reply

Marsh Posté le 17-01-2009 à 15:56:04    

J'ai trouvé une partie de mon erreur : en fait, je n'avais pas mis les parentheses... j'avais du les enlever pour tester.
 
Maintenant je souhaiterai faire une boucle jusqu'à la fin du document?
Comment fait-on?
 
J'ai testé avec  
Do While Not Monword.Selection.EndKey
 
.....
Loop
 
Merci de m'apporter une petite aide
Marie

Reply

Marsh Posté le 17-01-2009 à 16:46:14    

J'ai trouvé pour la boucle...
il faut mettre :
Do While Monword.Selection.Find.Execute("(\DebutTableau*\FinTableau)" ) = True
 
....
 
Monword.Selection.MoveRight Unit:=wdCharacter, Count:=1
Loop
 
 
Mon probleme suivant est de modifier la largeur des cellules de mon tableau.
 
Voici ce que j'ai fait :
Monword.Selection.Tables(1).Columns(1).PreferredWidthType = wdPreferredWidthPoints
    Monword.Selection.Tables(1).Columns(1).PreferredWidth = CentimetersToPoints(3.25)
 
Mais ca ne marche pas, j'ai une erreur...
 
Y a personne pour aider?
 
A bientot
Marie

Reply

Marsh Posté le 17-01-2009 à 16:52:55    

Essaie avec la propriété columnwidth plutot que preferredwidth


---------------
Instagram - Mon PVT en Australie.
Reply

Marsh Posté le 17-01-2009 à 17:40:56    

Bonjour,
 
Merci pour la proposition...
j'ai un message d'erreur d'execution 438  
"Propriété ou methode non geree par cet objet"
 
J'avais mis :
Monword.Selection.Tables(1).Columns(1).ColumnWidth = CentimetersToPoints(3.25)
 
Il ne me reste plus que ca et j'ai fini....
Avez-vous une autre idée?
 
Merci
Marie

Reply

Marsh Posté le 17-01-2009 à 18:10:07    

Et avec la propriété width à la place de columnwidth simplement ?


---------------
Instagram - Mon PVT en Australie.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed