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é" :
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 )
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