Piloter word depuis Excel : MoveLeft

Cathy

XLDnaute Nouveau
Bonjour,

je chercher à faire une macro depuis Excel qui viendrait ouvrir un document Word, y prendre certaines données pour les copier dans l'Excel.
Globalement j'arrive à piloter le Word depuis Excel mais je bloque sur certaines fonctions, qui marche sur l'EDI de Word mais pas depuis Excel :
je cherche à rajouter un caractère avant les passages en gras (ici un passage peut-être un ou plusieurs mots)

Voilà la ligne qui pose problème, à chaque fois j'ai une erreur "paramètre incorrect" ou carrément "MoveLeft n'est pas une propriété" :
Code:
WApp.Selection.MoveLeft Unit:=wdWord, Count:=1  'on bouge d'un mot sur la gauche


Je n'ai vraiment plus d'idée, donc si quelqu'un à des pistes je suis preneuse ! :)

D'avance merci,
Cath


voilà le code complet au besoin (le code peut sembler tordu, mais à force de ne pas y arriver je suis passée en mode bidouillage :s )
Code:
Sub Importation_Donnees_Fiche_Projet()

'***************************
    ' Déclaration des variables
'***************************
    Dim Wb As Workbook          'classeur Excel dans lequel on importe les données
    Dim Ws As Worksheet         'onglet Excel dans lequel on importe les données
    Dim sChemin As String       'répertoire contenant les fichiers Word
    Dim sNomFichier As String   'nom du fichier Word
    Dim WApp As Object, WDoc As Object, WSel As Object
    Dim i As Long
    Dim Plg As Range
    
'***************************
    ' Initialisation des variables
'***************************
    Set Wb = ThisWorkbook
    Set Ws = Wb.Sheets("BaseProjet")            'on sauvegarde dans la 1re feuille
    sChemin = ThisWorkbook.Path & "\"           'si les fichiers Word se trouvent dans le même répertoire que le fichier Excel
    sNomFichier = Dir(sChemin & "*.doc*")       'pour ouvrir tous les fichiers .doc*. 1er fichier.
 
    Set WApp = CreateObject("Word.Application") 'pour créer un objet Word
    WApp.Visible = True 'False                         'ne pas afficher Word pendant l'exécution
    
    Set Plg = Application.InputBox("Sélectionner une ligne", , , , , , , 8)     'demander à l'utilisateur de selectioner la ligne où écrire les données
    i = Plg.Row
        
    Application.ScreenUpdating = False
 
    Set WDoc = WApp.Documents.Open(sChemin & sNomFichier)   'ouvre le document Word
   
        
'***************************
        'importer données
'***************************
        WDoc.Tables(2).Cell(1, 1).Range.Select  'selectionner tableau 2 
        WApp.Selection.Find.ClearFormatting      'et chercher texte en gras
        WApp.Selection.Find.Font.Bold = True
        WApp.Selection.Find.Wrap = wdfindask
        WApp.Selection.Find.Execute                     'on execue la recherche
        t = WApp.Selection.Words.Count                  'on compte le nombre de mots en gras
        WApp.Selection.MoveLeft Unit:=wdWord, Count:=1  'on bouge d'un mot sur la gauche
        Selection.TypeText Text:="#g"                   'on ajoute la "balise-gras"
        WApp.Selection.moveright Unit:=wdWord, Count:=t 'on bouge d'un mot sur la gauche
        Selection.TypeText Text:="#g"                   'on ajoute la "balise-gras"
                
        'une fois que les truc en gras sont pu en gras :
        temp = WDoc.Tables(2).Cell(1, 1).Range.Text 'copie la valeur du 2e tableau, ligne 1, colonne 1
        temp = Trim(Split(temp, ":")(1))      'on prend la 2e chaîne de caractères séparés par  ":"
        temp = Replace(temp, Chr(13), "#")          'on enlève les retours chariot
        
        Ws.Range("P" & i) = temp
        
        WDoc.Close False                'fermer le document Word sans enregistrer
    
'***************************
SortieNormale:
'***************************
    Set Wb = Nothing    'libère la mémoire
    Set Ws = Nothing
    Set WDoc = Nothing
    
    Application.ScreenUpdating = True
    WApp.Quit                           'Fermer l'instance de Word
 
End Sub
 

job75

XLDnaute Barbatruc
Re : Piloter word depuis Excel : MoveLeft

Bonjour Cathy, bienvenue sur XLD,

C'est assez classique : quand on pilote Word depuis Excel il ne faut pas utiliser les mots-clés de Word.

Il faut donc remplacer wdWord par sa valeur 2 :

Code:
WApp.Selection.MoveLeft Unit:=2, Count:=1  'on bouge d'un mot sur la gauche
A+
 

job75

XLDnaute Barbatruc
Re : Piloter word depuis Excel : MoveLeft

Re,

Vous vous demandez peut-être comment je sais que wdWord vaut 2 ?

Il suffit dans Word d'exécuter la macro :

Code:
Sub a()
MsgBox wdWord
End Sub
A+
 

Cathy

XLDnaute Nouveau
Re : Piloter word depuis Excel : MoveLeft

Re,

à vrai dire je pensai que la solution était disponible sur Ce lien n'existe plus etc. mais en allant vérifier je vois que non !
Donc merci pour le truc, je ne savais pas qu'on pouvait afficher les valeurs ainsi.

A+
 

Discussions similaires

Réponses
4
Affichages
231

Statistiques des forums

Discussions
284 934
Messages
1 864 332
Membres
155 829
dernier inscrit
Mael_
Haut Bas