XL + OLEOBJECT WORD par VBA (Piloter CHAMPS)

Staple1600

XLDnaute Barbatruc
Bonjour à tous

J'espère rencontrer ici des personnes qui maitrisent le pilotage d'un objet Word dans une feuille Excel.
(Ce qui n'est pas mon cas)
Voila ou j'en suis dans ce que je veux faire
Code:
Sub TestOLEOBJECT_Word()
Dim oWS As Worksheet
Dim oOLEWd As OLEObject
Dim oWD As Document, Num$
' Dans VBE, Menu: Outils/Références:cochez: Microsoft Word XX.0 Object Library )
Num = InputBox("Saisir un nombre entier" & Chr(13) & "Ex: 123", "Saisie", 123)
Application.ScreenUpdating = False
SupprimerOLEOBJECT
Set oWS = ActiveSheet
oWS.Range("C10").Select
Set oOLEWd = oWS.OLEObjects.Add(ClassType:="Word.Document.8", Link:=False, DisplayAsIcon:=False)
Set oWD = oOLEWd.Object
oWD.Fields.Add Range:=oWD.Range, Type:=wdFieldQuote, Text:="=" & Num & "\*CARDTEXT"
oWD.Range.InsertAfter " EUROS"
oWD.Fields.Update
oOLEWd.Activate
oOLEWd.Border.LineStyle = None
oOLEWd.Placement = XlPlacement.xlMoveAndSize
Range("A1").Select
End Sub
Je ne sais pas comment ajouter par VBA un deuxième champ CARDTEXT pour les centimes, ni comment formater cet objet Word (notamment la taille, casse et couleur des caractères)

Merci à ceux qui sauront m'éclairer dans cette quête.

Bon week-end à tous

PS: A tester dans un classeur vierge, et ne pas oublier de cocher la référence idoine dans VBE selon votre version de Word.
 
Solution
Re : XL + OLEOBJECT WORD par VBA (Piloter CHAMPS)

Re

Ce fut long mais c'est bon.
Ouf ;)

Voici la macro fonctionnelle (au cas ou cela intéresserait d'autres yeux que les miens)
VB:
Sub TestOLEOBJECT_Word_OK()
Dim oWS As Worksheet
Dim oOLEWd As OLEObject
Dim oWD As Document, Num$, Cts$
' Dans VBE, Menu: Outils/Références:cochez: Microsoft Word XX.0 Object Library )
Num = InputBox("Saisir un montant:" & Chr(13) & "Ex: 123,89", "Saisie", "123,89")
Cts = Split(Num, ",")(1)
Application.ScreenUpdating = False
SupprimerOLEOBJECT
Set oWS = ActiveSheet
oWS.Range("C10").Select
Set oOLEWd = oWS.OLEObjects.Add(ClassType:="Word.Document.8", Link:=False, DisplayAsIcon:=False)
Set oWD = oOLEWd.Object
oWD.Fields.Add Range:=oWD.Range...

Staple1600

XLDnaute Barbatruc
Re : XL + OLEOBJECT WORD par VBA (Piloter CHAMPS)

Re

Mille excuses (à cause d'un mauvais copier/coller, il manquait une macro, la voici)
Code:
Sub SupprimerOLEOBJECT()
On Error Resume Next
ActiveSheet.DrawingObjects.Delete
End Sub

EDITION: J'ai un peu avancé.
J'arrive à mettre en majuscule
VB:
'---
oWD.Fields.Update
'Début ajout
'Mise en majuscule
oWD.Range.Font.AllCaps = True
oWD.Range.MoveEnd
oWD.Range.InsertAfter " ET "
'fin ajouts
'---
Je cherche pour modifier couleur etc...

Pour les centimes, je sais séparer avec Split
(Si par exemple 123,50
Cts=Split(Num,",")(1)

Mais je n'arrive toujours à ajouter à la suite du premier un second champ CARDTEXT.
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : XL + OLEOBJECT WORD par VBA (Piloter CHAMPS)

Bonjour JM,
pas sûr d'avoir compris ta demande, mais au cas où, pourquoi ne pas passer par une boucle ?
Code:
Sub TestOLEOBJECT_Word()
Dim oWS As Worksheet
Dim oOLEWd As OLEObject
Dim oWD As Document, Num$, i&
' Dans VBE, Menu: Outils/Références:cochez: Microsoft Word XX.0 Object Library )
Num = InputBox("Saisir un nombre entier" & Chr(13) & "Ex: 123", "Saisie", 123)
Application.ScreenUpdating = False
SupprimerOLEOBJECT
Set oWS = ActiveSheet
For i = 13 To 16 Step 3
    oWS.Cells(i, 3).Select
    Set oOLEWd = oWS.OLEObjects.Add(ClassType:="Word.Document.8", Link:=False, DisplayAsIcon:=False)
    Set oWD = oOLEWd.Object
    oWD.Fields.Add Range:=oWD.Range, Type:=wdFieldQuote, Text:="=" & Num & "\*CARDTEXT"
    oWD.Range.InsertAfter " EUROS"
    oWD.Fields.Update
    oOLEWd.Activate
    oOLEWd.Border.LineStyle = xlNone
    oOLEWd.Placement = XlPlacement.xlMoveAndSize
Next i
Range("B1").Select
End Sub
Si ce n'est pas ce que tu veux, peut-être qu'il te faut préciser ta demande.
A+
 

Staple1600

XLDnaute Barbatruc
Re : XL + OLEOBJECT WORD par VBA (Piloter CHAMPS)

Re, Bonsoir David84

Ce que je veux pouvoir faire c'est dans Excel (et ce grâce à WORD par le biais d'un OLEOBJECT) c'est transformer un montant en chiffres en lettres.
EX:
J'ai 123,55
J'obtiendrai : CENT VINGT-TROIS EUROS ET CINQUANTE-CINQ CTS

Pour le moment, (cf la macro de mon premier message + la petit modif), j'arrive à avoir:
CENT VINGT-TROIS EUROS

Le souci c'est que j'arrive à écrire du texte après le premier champ CARDTEXT (cf : EUROS) mais je n'arrive pas encore à insérer un second champ CARDTEXT pour traiter les centimes après la chaine EUROS.

Je n'arrive pas à manipuler l'objet WORD
(Et comme l’enregistreur de macros de Word m'oblige à manipuler Word avec les raccourcis clavier, sinon il n'y a pas de code VBA généré, c'est un peu galère pour se débrouiller seul ;) )
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : XL + OLEOBJECT WORD par VBA (Piloter CHAMPS)

Re
Et comme cela ?
Code:
Dim oOLEWd As OLEObject
Dim oWD As Document, Num$, i&, s, j As Double, A()
A = Array(" EUROS", " CENTIMES")
' Dans VBE, Menu: Outils/Références:cochez: Microsoft Word XX.0 Object Library )
Num = InputBox("Saisir un nombre entier" & Chr(13) & "Ex: 123", "Saisie", 123)
s = Split(Num, ",")
Application.ScreenUpdating = False
SupprimerOLEOBJECT
Set oWS = ActiveSheet
For i = 13 To 16 Step 3
    oWS.Cells(i, 3).Select
    Set oOLEWd = oWS.OLEObjects.Add(ClassType:="Word.Document.8", Link:=False, DisplayAsIcon:=False)
    Set oWD = oOLEWd.Object
    oWD.Fields.Add Range:=oWD.Range, Type:=wdFieldQuote, Text:="=" & s(j) & "\*CARDTEXT"
    oWD.Range.InsertAfter A(j)
    oWD.Fields.Update
    oOLEWd.Activate
    oOLEWd.Border.LineStyle = xlNone
    oOLEWd.Placement = XlPlacement.xlMoveAndSize
    j = j + 1
Next i
Range("B1").Select
End Sub
A+

Edit :salut Bruno :)
 

Staple1600

XLDnaute Barbatruc
Re : XL + OLEOBJECT WORD par VBA (Piloter CHAMPS)

Re, Bonsoir BrunoM45

C'est d'abord pour le fun et par curiosité et pour apprendre à utiliser un objet Word dans Excel.
Et pour ne pas devoir utiliser une fonction VBA personnalisée comme on en trouve différentes expressions sur XLD. ;)

Si jamais tu trouves un moyen d'insérer ce fameux second champ, n'hésites pas à revenir dans le fil ;)

PS: Au final cela pourra aussi avoir une utilité car dans le cadre de mon boulot.
 

Staple1600

XLDnaute Barbatruc
Re : XL + OLEOBJECT WORD par VBA (Piloter CHAMPS)

Re

David84
Ton code fonctionne sauf qu'il y a deux objects WORD distincts.
Or je voudrais arriver à "piloter" un seul objet word (comme je sais le faire manuellement dans Word)

Là je voudrais pouvoir insérer dans le même objet Word à la suite du premier champ CARDTEXT et après EUROS.
et ce avec les commandes de Word disponible dans l'objet
D'ou le : oWD.Range.MoveEnd
Mais je n'arrive pas à aller plus loin faute de connaissance de la syntaxe adéquate.
 

Staple1600

XLDnaute Barbatruc
Re : XL + OLEOBJECT WORD par VBA (Piloter CHAMPS)

Re à tous

Cette macro dans Word fonctionne
VB:
Sub MacroDansWord()
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:="=128\*CARDTEXT"
Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.TypeText Text:=" EUROS ET "
Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:="=59\*CARDTEXT"
Selection.MoveRight Unit:=wdCharacter, Count:=2 'MoveRight ne fonctionne pas sous Excel
Selection.TypeText Text:=" CENTIMES."
Selection.MoveLeft Unit:=wdWord, Count:=6, Extend:=wdExtend 'idem
Selection.Font.AllCaps = True
Selection.Fields.Update
End Sub
Le souci c'est que la syntaxe n'est pas entièrement transposable dans un objet WORD sous Excel

Je pense qu'il est possible de déplacer le curseur pour insérer le second champ CARDTEXT mais je ne trouve toujours pas la syntaxe.
 

Staple1600

XLDnaute Barbatruc
Re : XL + OLEOBJECT WORD par VBA (Piloter CHAMPS)

Re

Ce fut long mais c'est bon.
Ouf ;)

Voici la macro fonctionnelle (au cas ou cela intéresserait d'autres yeux que les miens)
VB:
Sub TestOLEOBJECT_Word_OK()
Dim oWS As Worksheet
Dim oOLEWd As OLEObject
Dim oWD As Document, Num$, Cts$
' Dans VBE, Menu: Outils/Références:cochez: Microsoft Word XX.0 Object Library )
Num = InputBox("Saisir un montant:" & Chr(13) & "Ex: 123,89", "Saisie", "123,89")
Cts = Split(Num, ",")(1)
Application.ScreenUpdating = False
SupprimerOLEOBJECT
Set oWS = ActiveSheet
oWS.Range("C10").Select
Set oOLEWd = oWS.OLEObjects.Add(ClassType:="Word.Document.8", Link:=False, DisplayAsIcon:=False)
Set oWD = oOLEWd.Object
oWD.Fields.Add Range:=oWD.Range, Type:=wdFieldQuote, Text:="=" & Split(Num, ",")(0) & "\*CARDTEXT"
oWD.Range.Characters(Len(oWD.Range.Text)).InsertAfter " EUROS ET " 'Eureka !
oWD.Fields.Add Range:=oWD.Range.Characters(Len(oWD.Range.Text)), Type:=wdFieldQuote, Text:="=" & Cts & "\*CARDTEXT"
oWD.Range.Characters(Len(oWD.Range.Text)).InsertAfter " CENTIMES." 'Alleluia !!!
oWD.Fields.Update
oWD.Range.Font.AllCaps = True
oOLEWd.Activate
oOLEWd.Border.LineStyle = None
oOLEWd.Placement = XlPlacement.xlMoveAndSize
Range("A1").Select
End Sub
Code:
Sub SupprimerOLEOBJECT()
On Error Resume Next
ActiveSheet.DrawingObjects.Delete
End Sub
Merci à tous ceux qui sont passés dans le fil.

A+ sur XLD.
 

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib