Insertion Par Vba

aristote67

XLDnaute Nouveau
Bonsoir

Si vba Excel m’est assez familier, dans word c’est le noi.
Mon problème j’ai au départ un document word qui est le descriptif technique d’une installation électrique.
De ce descriptif très détaillé, il faut extraire un certain nombre d’éléments dans un classeur excel et de les distribuer selon 4 colonnes.
A savoir Identification des Lots Description Type quantité

Ci-dessous un exemple du texte à traiter
==============================================================================
[[-E13]]-3-2-1 Sanitaires Femmes

Eclairage

[*4] plafonniers étanches, fluorescents, TRILUX, type Oleveon 135/49/80 PC, ballast électronique, vasque
polycarbonate, ou d’aspect et de technique équivalente, équipés chacun d’un tube 49W/4000°K.
===================================================================================
Toute la partie export dans excel du doc word la distribution ce fait sans problème.

Pour ce faire le doc Word est « balisé » de façon à ce que les macros excel puissent identifier les éléments à traiter.

J’utilise pour ce faire :les []

Deux crochets Pour identifier les lots [[-E13]]
Un cochet et une* pour identifier des unités [*4]….etc…

Il y a en tout 5 types de balises

Cela implique une préparation minutieuse du doc Word.

Ce à quoi je voudrais parvenir
C’est insérer ces balises par macro.
L’idéal serai d’avoir par un clic droit de la souris un menus avec la sélection des différentes balises.
De façon à les placer devant ou derrière le texte sélectionné.

Je suis à la recherche de toutes les pistes
Bouts de code liens que je n’ai pas su trouver
En vous remerciant par avance de votre comtribution.

Cordialement
 

PMO2

XLDnaute Accro
Re : Insertion Par Vba

Bonjour,

Une démarche compliquée

1) copiez le code suivant dans un module standard de votre document

Code:
Dim myApp As New AppliMenuContext

Sub InitializeContext()
Set myApp.App = Word.Application
End Sub

Sub MenuContext()
Dim CB As CommandBar
Dim CBC As CommandBarControl
Set CB = Application.CommandBars.Add(Name:="pmo_bar", Position:=msoBarPopup, temporary:=True)
Set CBC = CB.Controls.Add(Type:=msoControlButton)
With CBC
  .Caption = "Lot"
  .OnAction = "insertLot"
End With
'---
Set CBC = CB.Controls.Add(Type:=msoControlButton)
With CBC
  .Caption = "Unité"
  .OnAction = "insertUnite"
End With
'--- etc
End Sub

Sub insertLot()
With Selection
  .Text = "[[" & .Text & "]] "
  .StartOf wdCharacter, wdMove
End With
End Sub

Sub insertUnite()
With Selection
  .Text = "[*" & .Text & "] "
  .StartOf wdCharacter, wdMove
End With
End Sub

2) copiez le code suivant dans la fenêtre de code de ThisDocument

Code:
Private Sub Document_Open()
Call MenuContext
Call InitializeContext
End Sub

3) créez un module de classe et renommez le AppliMenuContext
puis y copier le code suivant

Code:
Public WithEvents App As Word.Application

Private Sub App_WindowBeforeRightClick(ByVal Sel As Selection, Cancel As Boolean)
If Sel.Document.Name = ThisDocument.Name Then
  Application.CommandBars("pmo_bar").ShowPopup
  Cancel = True
Else
  Cancel = False
End If
End Sub

Enregistrez votre document. Le fermer puis l’ouvrir pour que la procédure évènementielle Document_Open s’exécute.
Sélectionnez le texte à baliser puis faites clic droit et choisissez l’action à effectuer dans le menu contextuel.

Cordialement.

PMO
Patrick Morange
 

Discussions similaires

Statistiques des forums

Discussions
312 330
Messages
2 087 347
Membres
103 526
dernier inscrit
HEC