Mettre un x dans une case à cocher d'un fichier Word depuis Excel

zephir94

XLDnaute Impliqué
Bonjour à tous,

Je suis sur un projet qui consiste depuis Excel à remplir des champs dans un fichier Word.
Jusque là tout ce passe bien.
Là ou je coince c'est que j'ai dans le document Word il y a trois cases à cocher avec des X !
Y-a-t 'il un moyen de piloter cela depuis Excel ? ont-elles un nom que je ne vois pas dans le fichier Word pour les appeler ?

Merci à vous pour vos aides

Amicalement Zephir
 

zephir94

XLDnaute Impliqué
Re : Mettre un x dans une case à cocher d'un fichier Word depuis Excel

Bonjour Job75,

Avec un grand plaisir, il suffit de mettre dans ton fichier WORD des <BALISE1,2,3....> autant que de champs que tu souhaites remplir depuis Excel.
et une fois déclaré depuis l'éditeur VBA, Library Word obj 12.0
J'ai écris cette macro :

Code:
    Dim traitementTexte As Word.Application
    Set traitementTexte = New Word.Application
Dim u As String
    traitementTexte.Visible = True
 
   
    Dim leDoc As Document
    Set leDoc = traitementTexte.Documents.Open(ActiveWorkbook.Path & "/TON FICHIER WORD.doc")
 
    
    leDoc.Content.Find.Execute FindText:="<BALISE1>", ReplaceWith:=Feuil8.Range("B1").Value, Replace:=WdReplaceAll
    leDoc.Content.Find.Execute FindText:="<BALISE2>", ReplaceWith:=Feuil8.Range("B3").Value, Replace:=WdReplaceAll
    leDoc.Content.Find.Execute FindText:="<BALISE3>", ReplaceWith:=Date, Replace:=WdReplaceAll
    Feuil8.Range("B5").Value = UCase(Feuil8.Range("B5").Value)
    leDoc.Content.Find.Execute FindText:="<BALISE4>", ReplaceWith:=Feuil8.Range("B5").Value, Replace:=WdReplaceAll
     
     u = Feuil8.Range("B6").Text
     u = UCase(u)
 
    leDoc.Content.Find.Execute FindText:="<BALISE5>", ReplaceWith:=u, Replace:=WdReplaceAll
    leDoc.Content.Find.Execute FindText:="<BALISE6>", ReplaceWith:=Feuil8.Range("B7").Value, Replace:=WdReplaceAll
    Feuil8.Range("B8").Value = UCase(Feuil8.Range("B8").Value)
    leDoc.Content.Find.Execute FindText:="<BALISE7>", ReplaceWith:=Feuil8.Range("B8").Value, Replace:=WdReplaceAll
    leDoc.Content.Find.Execute FindText:="<BALISE8>", ReplaceWith:=Feuil8.Range("B4").Value, Replace:=WdReplaceAll
    Feuil8.Range("B9").Value = UCase(Feuil8.Range("B9").Value)
    leDoc.Content.Find.Execute FindText:="<BALISE10>", ReplaceWith:=Feuil8.Range("B9").Value, Replace:=WdReplaceAll
    Feuil8.Range("B12").Value = UCase(Feuil8.Range("B12").Value)
    leDoc.Content.Find.Execute FindText:="<BALISE11>", ReplaceWith:=Feuil8.Range("B12").Value, Replace:=WdReplaceAll
    leDoc.Content.Find.Execute FindText:="<BALISE12>", ReplaceWith:=Feuil8.Range("B12").Value, Replace:=WdReplaceAll
    
    
    leDoc.Content.Find.Execute FindText:="<BALISE13>", ReplaceWith:=Feuil8.Range("B1").Value, Replace:=WdReplaceAll

If Feuil8.Range("B22").Value = "X" Then
leDoc.Content.Find.Execute FindText:="<1>", ReplaceWith:="X", Replace:=WdReplaceAll
Else
leDoc.Content.Find.Execute FindText:="<1>", ReplaceWith:="", Replace:=WdReplaceAll
End If
   If Feuil8.Range("B23").Value = "X" Then
   leDoc.Content.Find.Execute FindText:="<2>", ReplaceWith:="X", Replace:=WdReplaceAll
   Else
   leDoc.Content.Find.Execute FindText:="<2>", ReplaceWith:="", Replace:=WdReplaceAll
   End If
        If Feuil8.Range("B24").Value = "X" Then
        leDoc.Content.Find.Execute FindText:="<3>", ReplaceWith:="X", Replace:=WdReplaceAll
        Else
        leDoc.Content.Find.Execute FindText:="<3>", ReplaceWith:="", Replace:=WdReplaceAll
        End If
   End Sub

En fait j'ai trouvé pour les cases à cocher, elles se comportent exactement de la même manière il suffit d'y ajouter une p'tit balise dedans :cool:

Par contre job75 il me manque de la syntaxe VBA pourrais tu me dire comment Transformer
Mr Didier Lapince en Mr D.LAPINCE sachant que Mr Didier Lapince est dans une seule Cellule ?
Je te remercie par avance de ce petit coup de main :cool:
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mettre un x dans une case à cocher d'un fichier Word depuis Excel

Re,

Sujet résolu donc.

La dernière question n'est pas claire, mais s'il s'agit de modifier la feuille Excel :

Code:
Feuil8.Cells.Replace "Mr Didier Lapince", "Mr D.LAPINCE"
A+
 

zephir94

XLDnaute Impliqué
Re : Mettre un x dans une case à cocher d'un fichier Word depuis Excel

Si tu veux je récupère dans la feuille Excel Mr Didier Lapince dans une cellule ( sans modifier la source ) je dois l'envoyer dans mon Doc word mais le transformer avant l'envoi par Mr D.LAPINCE là j'ai des progrès à faire sur ce genre de manipulation !

Donc laisser le premier mot intacte, prendre la première lettre du deuxième mot en la mettant en majuscule et en gras, mettre un point entre et prendre la totalité du troisième mot en gras et majuscule
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mettre un x dans une case à cocher d'un fichier Word depuis Excel

Re,

Je ne vois pas où est la difficulté :

Code:
leDoc.Content.Find.Execute FindText:="<BALISE1>", ReplaceWith:=Replace(Feuil8.Range("B1"), "Mr Didier Lapince", "Mr D.LAPINCE"), Replace:=WdReplaceAll
A+
 

zephir94

XLDnaute Impliqué
Re : Mettre un x dans une case à cocher d'un fichier Word depuis Excel

La difficulté est que Mr Didier lapince n'est qu'un exemple !
Donc laisser le premier mot intacte, prendre que la première lettre du deuxième mot en la mettant en majuscule et en gras, mettre un point entre et prendre la totalité du troisième mot en gras et majuscule
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mettre un x dans une case à cocher d'un fichier Word depuis Excel

Re,

Voyez ce code :

Code:
Dim x$, s, y$
x = Application.Trim(Feuil8.[B1]) 'SUPPRESPACE
s = Split(x)
y = UCase(Left(s(1), 1) & "." & Mid(x, Len(s(0) & s(1)) + 3))
x = s(0) & " " & y
MsgBox x 'pour tester
MsgBox y 'pour tester (c'est le texte à mettre en gras)
Pour mettre en gras le texte y dans Word c'est facile, voyez avec l'enregistreur de macro.

A+
 

job75

XLDnaute Barbatruc
Re : Mettre un x dans une case à cocher d'un fichier Word depuis Excel

Re,

leDoc défini par vous, x et y définis au post #8 :

Code:
With leDoc.Bookmarks("Balise1")
leDoc.Range(.Start + Len(x) - Len(y), .End).Font.Bold = True
End With
A+
 

job75

XLDnaute Barbatruc
Re : Mettre un x dans une case à cocher d'un fichier Word depuis Excel

Re,

Le code précédent nécessitait la création préalable d'un signet, on peut s'en passer avec celui-ci :

Code:
With leDoc.Content.Find
  .Text = y
  .Forward = True
  .Execute
  .Parent.Bold = True
End With
Bonne nuit.
 

job75

XLDnaute Barbatruc
Re : Mettre un x dans une case à cocher d'un fichier Word depuis Excel

Bonjour zephir94, le forum,

Voici le code complet, j'ai ajouté des tests de sécurité :

Code:
Dim x$, y$, s
'---
x = Application.Trim(Feuil8.[B1]) 'SUPPRESPACE
y = ""
s = Split(x)
If UBound(s) > 0 Then _
  y = UCase(Left(s(1), 1) & "." & Mid(x, Len(s(0) & s(1)) + 3))
If x <> "" Then x = RTrim(s(0) & " " & y)
With leDoc.Content.Find
  .Execute "<BALISE1>", ReplaceWith:=x, Replace:=wdReplaceAll
  If .Found And y <> "" Then
    .Text = y
    .Forward = True
    .Execute
    .Parent.Bold = True
  End If
End With
'---à répéter éventuellement sur d'autres cellules---
Edit : j'ai ajouté RTrim (au cas où y = "").

Bonne journée.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Mettre un x dans une case à cocher d'un fichier Word depuis Excel

Re,

A la place de vos "BALISES" vous pouvez utiliser des signets.

L'avantage c'est que vous pouvez (re)modifier comme vous voulez les textes de ces signets :

Code:
Dim nom$, x$, y$, s, i
'---
nom = "Signet1" 'nom du signet à atteindre
If leDoc.Bookmarks.Exists(nom) Then
  x = Application.Trim(Feuil8.[B1]) 'SUPPRESPACE
  y = ""
  s = Split(x)
  If UBound(s) > 0 Then _
    y = UCase(Left(s(1), 1) & "." & Mid(x, Len(s(0) & s(1)) + 3))
  If x <> "" Then x = RTrim(s(0) & " " & y)
  i = leDoc.Bookmarks(nom).Start
  leDoc.Bookmarks(nom).Range = x
  leDoc.Range(i + Len(x) - Len(y), i + Len(x)).Font.Bold = True
  leDoc.Bookmarks.Add nom, leDoc.Range(i, i + Len(x)) 'redéfinition
Else
  MsgBox "Le signet '" & nom & "' n'existe pas..."
End If
'---à répéter éventuellement sur d'autres signets et cellules---
Edit : j'ai ajouté RTrim (au cas où y = "").

A+
 
Dernière édition:

Discussions similaires