Renommer textbox d'un doc word

ledzepfred

XLDnaute Impliqué
Bonjour à tous,

j'ai un document word contenant un certain nombre d'objets (9 case à cocher, 1 liste déroulante et 30 textbox). Ce document est en fait un bon de commande que des utilisateurs doivent renseignés. Je souhaite récupérer les valeurs saisis dans les textbox dans un fichier excel (ça je sais faire). Le pb est que certains textbox n'ont pas de signets et les signets existants sont illogiques (premier champ : signet 53 etc...) et après la saisie des utilisateurs, je ne vous raconte pas...
J'ai besoin d'une macro qui me permette de renommer tous les textbox existants avec un signet incrementé : j'ai préparé ceci :
Code:
Sub Macro1()
With ActiveDocument
For i = 1 To .FormFields.Count
      Select Case .FormFields(i)
         Case 70
            .FormFields(i).Name = "Texte" & i
      End Select
Next i
End With
End Sub
Le souci est que ça bugge quand il n'y a pas de signet.

Quelqu'un aurait-il une solution? (ça m'éviterait d'avoir à me taper 155 * 30 textbox à renommer puisque j'ai 155 fichiers)

D'avance merci

A+
 

ledzepfred

XLDnaute Impliqué
Re : Renommer textbox d'un doc word

Salut Ledzepfred,

eh bien, on ne se bouscule pas au portillon pour te répondre!!!:confused:
Je ne dirai pas que ta demande était incorrecte ou peu précise (je ne peux en juger pour cause d'objectivité :))

Je te propose deux macros pour régler ton problème :

la première permet de rechercher tous les documents word dans un répertoire (j'imagine que tous tes formulaires sont dans un même et unique dossier), cette macro nommée "recherchedocword", va pour chaque fichier du répertoire, ouvrir le document, renommer tous tes champs en conservant les valeurs grâce à la procédure "renommeobjet" et le refermer après enregistrement.

Code:
Sub recherchedocword()
With Application.FileSearch
    .LookIn = "C:\Documents and Settings\ledzepfred\bureau\A TRAITER"
    .FileName = "*.doc"
    .Execute
    If .Execute() > 0 Then
        For i = 1 To .FoundFiles.Count
            Documents.Open FileName:=.FoundFiles(i)
            Call renommeobjet
            ActiveDocument.Close True
        Next
End If
End With
End Sub

Sub renommeobjet()
Dim FF As FormFields
Dim Indice, i, j, k As Long
Dim mavar As Variant
Indice = 0
i = 0
j = 0
k = 0
If ActiveDocument.ProtectionType <> wdNoProtection Then ActiveDocument.Unprotect

Set FF = ActiveDocument.FormFields
For Indice = 1 To FF.Count
  FF(Indice).Select
  Select Case FF(Indice).Type
    Case wdFieldFormTextInput
      mavar = FF(Indice).Result
      i = i + 1
      With Dialogs(wdDialogFormFieldOptions)
        .Name = "Texte" & i
        .Execute
      End With
      FF(Indice).Result = mavar
    Case wdFieldFormCheckBox
      mavar = FF(Indice).CheckBox.Value
      j = j + 1
      With Dialogs(wdDialogFormFieldOptions)
        .Name = "CaseACocher" & j
        .Execute
      End With
      FF(Indice).CheckBox.Value = mavar
    Case wdFieldFormDropDown
      mavar = FF(Indice).DropDown.Value
      k = k + 1
      With Dialogs(wdDialogFormFieldOptions)
        .Name = "Liste" & k
        .Execute
      End With
      FF(Indice).DropDown.Value = mavar
  End Select
Next Indice
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
End Sub

en espérant que cela te convienne.

A+
 

ledzepfred

XLDnaute Impliqué
Re : Renommer textbox d'un doc word

Merci Ledzepfred,

bien que je ne te félicite pas pour la rapidité de ta réponse, elle répond parfaitement à ce que j'imaginais et c'est la meilleure solution qu'on m'ait proposée:D (je t'avoue avoir peur un instant que personne ne me réponde)
Je te remercie beaucoup, cela va m'être très utile

Au plaisir de te croiser dans un fil

a+

PS: je comprend ta remarque sur l'objectivité mais c'est normal vu qu'on a un point commun : un syndrome de dédoublonnement de personnalité:rolleyes:
mais faut voir le bon côté des choses (ma grand mère disais tout le temps : "En toutes choses, malheur est bon"), ça nous donne le don d'ubiquité:eek:
 

PMO2

XLDnaute Accro
Re : Renommer textbox d'un doc word

Bonjour,

Je suis peut-être hors sujet mais, maintenant que j'ai fait quelque chose, autant le communiquer.

Je me suis intéressé à la valeur de chaque TextBox d'un document Word et le code reste à finaliser pour une éventuelle exportation de ces valeurs dans Excel.

Pour ce faire, j'ai :
1) programmé la Sub ConstruireTextBox qui fabrique 30 TextBox
(c'est simplement pour faire une simulation afin de pouvoir utiliser la macro suivante)
2) programmé la Sub LireValeurTextBox qui va inscrire les différentes valeurs dans la fenêtre Exécution du VBE (l'afficher par Ctrl + G)

Copiez le code suivant dans un module standard de Word
Code:
Const FORM_TYPE As String = "Forms.TextBox.1"

Sub ConstruireTextBox()
Dim Couleur
Dim i&
Dim j&
Dim ISH As InlineShape
Dim TB    'As MSForms.TextBox
Couleur = Array("", vbBlue, vbRed, vbYellow, vbMagenta)
j& = 1
Application.ScreenUpdating = False
For i& = 1 To 30   'pour construire 30 TextBox
  With Selection
    .WholeStory
    .MoveDown
    .TypeParagraph
    .InsertParagraph
  End With
  Set ISH = Selection.InlineShapes.AddOLEControl(ClassType:=FORM_TYPE)
  Set TB = ISH.OLEFormat.Object
  TB.Value = i& & " toto"
  If j& > 4 Then j& = 1
  TB.BackColor = Couleur(j&)
  j& = j& + 1
Next i&
Application.ScreenUpdating = True
End Sub

Sub LireValeurTextBox()
Dim ISH As InlineShape
Dim TB As MSForms.TextBox
For Each ISH In ActiveDocument.InlineShapes
  On Error Resume Next
  If ISH.OLEFormat.ClassType = FORM_TYPE Then
    If Err = 0 Then
      Set TB = ISH.OLEFormat.Object
      If TB.Value <> "" Then
        Debug.Print TB.Value
      Else
        Debug.Print "n.a"
      End If
    Else
      Err.Clear
    End If
End If
Next ISH
End Sub

On peut extrapoler ce code pour l'inclure dans Excel.

Cordialement.

PMO
Patrick Morange
 

ledzepfred

XLDnaute Impliqué
Re : Renommer textbox d'un doc word

Merci Patrick pour ta réponse (je me sentais un peu seul sur ce post)

Ton code est interessant même s'il ne répond pas à mon besoin mais je le garde dans mes tablettes, ça pourra être utile.

Bonne soirée
 

Discussions similaires

Statistiques des forums

Discussions
314 626
Messages
2 111 294
Membres
111 093
dernier inscrit
Yvounet