Macro excel/word

  • Initiateur de la discussion Julia
  • Date de début
J

Julia

Guest
Bonjour le forum

J'aimerais créer une macro sur un document excel activée par un bouton. :
Elle permettrait de :
- ouvrir un document word
- et de coller sur ce document word le tableau excel

Est possible de créer une macro pour réaliser cette opération ?


Merci pour vos conseils.
 

MichelXld

XLDnaute Barbatruc
bonsoir Thomas

merci pour ton message

je suis autodidacte et j'utilises beaucoup l'aide en ligne Word

lors de la definition des variables , si tu actives la reference Microsoft Word xx.x Object Library
....
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
....
tu peux ensuite profiter de la saisie automatique offerte par Office

De plus en faisant F1 sur les parties de procedures qui pilotent Word tu accederas à l'aide Word


tu peux aussi visiter cet excellent site

Ce lien n'existe plus


bonne soiree
MichelXld
 

ThomasR

XLDnaute Occasionnel
re,

MichelXld, je me suis permis de modifier ta macro(qui est mieux que la mienne) afin que Julia puisse sélectionner elle même sa plage car elle précise que le tableau n'est pas toujours le même.

Julia pour me faire pardonné de mon absence et afin que tu puisse placer n'importe quel type de tableau j'ai opté pour une sélection manuelle de la zone avant de lancer la macro.

Sinon si ton tableau est toujours à la même place mais avec des lignes en plus il te sufi de sup la guillemet de ''Set PlageACopier = Sheets('Feuil1').Range('A1:C' & fin)'

et d'en mettre une devant 'Set PlageACopier = Selection'


@+
Thomas® [file name=copierVersWord_20050609231129.zip size=9080]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/copierVersWord_20050609231129.zip[/file]
 

Pièces jointes

  • copierVersWord_20050609231129.zip
    8.9 KB · Affichages: 41
B

Benjamin

Guest
Bonjour à tous.
Tout d'abord je voulais vous remercier car ce post m'a bien aidé ! Comme l'a dit Thomas, on ne trouve pas grand chose comme infos sur les macros word.

Il me reste un pb à résoudre :
Dans mon cas d'utilisation, je veux faire un fichier xls avec plusieurs cases, celles-ci renvoyant toute vers le même doc word mais à des sections différentes. En gros je voudrais quand cliquant dans une des cases j'attérisse dans un signet en particulier d'un doc word.

De même, je ne veux pas mettre le chemin complet du fichier word. Explication :
Au lieu de préciser le chemin complet de mon fichier word, je voudrais juste avoir à le placer dans le même répertoire que mon fichier xls. Comme ça si je déplace le xls ma macro fonctionne tjs !!

Merci BEAUCOUP pour votre aide.

Ben
 
B

Benjamin

Guest
Merci beaucoup pour ta réponse MichelXLD. C'est vraiment super ce que tu fais, d'aider sans compter. Merci merci.

Par contre je vais être un peu chiant, j'ai du mal formuler ma requête... Je ne veux pas copier des cases excel dans word, c'est bien mon souci.

Je veux tout simplement qu'en cliquant sur un bouton dans ma feuille excel word ouvre un document et se place sur un signet en particulier, le nom du signet étant renseigné dans la case sur lequel je clique (par exemple signet13).
Je ne veux pas que la macro copie colle quelque chose, je veux juste qu'elle affiche un doc word au bon endroit.

Sinon pour le chemin du doc word j'ai vu, c'est super c'est ce que je voulais. Merci.

Et merci encore d'avance pour vos réponses.
 
B

Benjamin

Guest
Re bonjour. Je sais je commence à devenir embêtant...

Bon voilà mon code (petit...) :

Code:
Sub signetword()

Dim Version As String

Version = Cells(1, 1) 'récupère le nom de fichier de la derniere version de spec
ThisWorkbook.FollowHyperlink (ThisWorkbook.Path & '\\' & Version & '.doc#signet12')

End Sub

Comme tu peux le voir, je récupère déjà une partie du nom du fichier à ouvrir dans une case, afin de pouvoir faire évoluer le document au fil des versions du doc word appelé.

Ma question (pour un champion) est :

Au lieu de faire une macro pour chaque boite de mon doc excel (boite = zone de texte), est-ce qu'il est possible de récupérer SEULEMENT un nombre dans une zone de texte ?

Je m'explique. J'ai par exemple une zone de texte 'Asservissement papillons'. Je veux la faire correspondre au signet12. Si je renomme ma zone de texte 'Asservissement papillons (12)' est-il possible de récupérer le 12 ?
Autrement dit comment récupérer la string d'une zone de texte et comment effectuer un traitement sur la chaine de caractère pour ne récupérer que le numéro ? Sachant que ça peu être un 1 ou un 2 ou un 13 (donc un ou deux chiffres, voir même trois...).

Merci beaucoup beaucoup.

Bonne après-midi
 
B

Benjamin

Guest
Bonjour tout le monde !
Bon, j'ai réussi à bien avancer sur ma macro !
J'arrive à récupérer le numéro de la zone de texte sur laquelle je clique, je récupère le numéro de signet qui est entre parenthèses dans cette même zone de texte.
Ensuite par lien hypertexte j'ouvre le doc word directement au bon signet.

Je sais pas si mon code peut être amélioré... C'est difficile de coder dans un language inconnu parce qu'on sait pas les fonctions qui existe et on a tendance à réinventer la roue !!!
D'ailleurs l'aide est pas top de ce point de vue, car il n'y a pas de liste de fonctions dispo (ou alors c'est moi qui sait pas chercher !!)

Voila mon code :

Code:
Sub OuvertureSignet()
'
' OuvertureSignet Macro
' Macro enregistrée le 03/05/2006 par Benjamin
'
Dim Version As String
Dim Appelant As String
Dim TextBoxNumber As Integer
Dim Texte As String
Dim TexteLenght As Long
Dim NumberLenght As Long
Dim i As Long
Dim Carac As String
Dim Buffer As String
Dim SignetNumber As String
Dim Reponse As Integer

On Error Resume Next

Version = Cells(5, 1) 'récupère le nom de fichier de la derniere version de spec

Appelant = Application.Caller
TextBoxNumber = Mid(Appelant, 14)

ActiveSheet.Shapes('Text Box ' & TextBoxNumber).Select
Texte = Selection.Text
TexteLenght = Len(Texte)

For i = 1 To TexteLenght
    Carac = Mid$(Texte, i, 1)
    If Carac = '(' Then
        Buffer = Mid(Texte, i + 1)
    End If
Next i
            
NumberLenght = Len(Buffer)

If NumberLenght = 0 Then
    Reponse = MsgBox('Rentrer le numéro de signet entre parenthèses' & Chr(13) & _
    Chr(10) & 'Exemple : Fonction Minj (12)', vbOKOnly)
Else
    Reponse = vbOK
    SignetNumber = Left(Buffer, NumberLenght - 1)
    ThisWorkbook.FollowHyperlink (ThisWorkbook.Path & '\\SpecDeTestNR_' & Version & _
    '.doc#signet' & SignetNumber)
End If

End Sub

Il me reste un souci :

Je gère les erreurs lorsqu'il n'y a pas le numéro de signet dans la zone de texte.
En revanche lorsque le numéro de signet est bien présent dans la zone de texte mais absent dans le doc word je gère pas...
Je n'arrive pas a trouver comment je pourrai faire pour faire afficher que le signet n'est pas dans le doc word vu que la fonction FollowHyperlink ne renvoie rien.... ?

Merci pour votre aide.

Bonne journée
 
B

Benjamin

Guest
Re !

Bon, je me cause un peu tout seul mais je post mes avancées !!! Je me sens plus là, rien ne m'arrête !!!

J'ai réussi à tester si le signet existe. Alors ça rame un peu, à mon avis c'est pas très optimisé !!! Mais ça marche. Le code :

Code:
Sub OuvertureSignet()
'
' OuvertureSignet Macro
' Macro enregistrée le 03/05/2006 par Benjamin
'
Dim Version As String
Dim Appelant As String
Dim TextBoxNumber As Integer
Dim Texte As String
Dim TexteLenght As Long
Dim NumberLenght As Long
Dim i As Long
Dim Carac As String
Dim Buffer As String
Dim SignetNumber As String
Dim Reponse As Integer
Dim Reponse1 As Integer

Dim WordApp As Word.Application
Dim WordDoc As Word.Document

On Error Resume Next

Version = Cells(5, 1) 'récupère le nom de fichier de la derniere version de spec

Appelant = Application.Caller
TextBoxNumber = Mid(Appelant, 14)

ActiveSheet.Shapes('Text Box ' & TextBoxNumber).Select
Texte = Selection.Text
TexteLenght = Len(Texte)

For i = 1 To TexteLenght
    Carac = Mid$(Texte, i, 1)
    If Carac = '(' Then
        Buffer = Mid(Texte, i + 1)
    End If
Next i
            
NumberLenght = Len(Buffer)

If NumberLenght = 0 Then
    Reponse = MsgBox('Rentrer le numéro de signet entre parenthèses' & Chr(13) & _
    Chr(10) & 'Exemple : Fonction Minj (12)', vbOKOnly)
Else
    Reponse = vbOK
    SignetNumber = Left(Buffer, NumberLenght - 1)
    
    Set WordApp = CreateObject('word.application') 'ouvre session word
    Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & '\\SpecDeTestNR_' & Version & '.doc', _
    ReadOnly:=True) 'ouvre la spec en lecture seule
    WordApp.Visible = False 'word masqué pendant l'operation
    
    If ActiveDocument.Bookmarks.Exists('signet' & SignetNumber) = True Then
        WordDoc.Close
        WordApp.Quit
        Reponse1 = vbOK
        ThisWorkbook.FollowHyperlink (ThisWorkbook.Path & '\\SpecDeTestNR_' & Version & _
        '.doc#signet' & SignetNumber)
    Else
        WordDoc.Close
        WordApp.Quit
        Reponse1 = MsgBox('Le signet n'existe pas dans le doc Word' & Chr(13) & _
        Chr(10) & 'Créez le signet comme suit :' & Chr(13) & _
        Chr(10) & 'signet12 avec 12 le numéro du paragraphe dans la spec', vbOKOnly)
    End If
    

End If

End Sub


Maintenant, je cherche à automatiser la création des signets mais dans Word !
Le truc c'est que mes signets suivent la même logique : 1er chiffre correspond à la mise en page titre2 et 2ème chiffre correspond à la mise en page titre3.

Comment récupérer les numéros de titre et créer les signets à partir de là, là est la question !

Merci d'avance ;)
 

Discussions similaires

Réponses
1
Affichages
125
Compte Supprimé 979
C
Réponses
4
Affichages
201

Statistiques des forums

Discussions
312 336
Messages
2 087 389
Membres
103 534
dernier inscrit
Kalamymustapha