Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre régulier
    Remontée champs formulaire word dans excel
    Bonjour,
    J'utilise un formulaire Word et remonte les données des champs dans Excel.

    Je voudrais que certains champs soient ignorés lors de la remontée.
    Je précise que j'ai déjà éliminé des champs qui arrivent à la fin de mon formulaire par mon code VBA dans Excel mais que cela sont en plein milieu de mon formulaire.

    Il serait donc possible d'agir en modifiant le "numéro" du champ, ce qui répondrait à un autre problème que je rencontre (ordre de remontée de mes champs dans mes cellules Excel).
    Sinon, si je peux les sortir de la remontée par leurs signets, je suis preneur aussi.

    MERCI pour le coup de main

  2. #2
    Membre régulier
    Une partie du code utilisé sous Excel:


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Sub RECUPCOLLES()
    Dim Fich As Worksheet, ligne As Long
    Set Fich = ThisWorkbook.Worksheets("RECUP")
    Sheets("RECUP").Visible = True
    Worksheets("RECUP").Activate
     
     
     
     
     
    Chemin = "H:\XX\"
    mesfichiers = Dir(Chemin & "**")
     
     
     
     
     
    Set FichierWord = CreateObject("word.application")
     
    FichierWord.Visible = True
    FichierWord.DisplayAlerts = False
     
    Do While mesfichiers <> ""
      If mesfichiers <> "." And mesfichiers <> ".." And mesfichiers <> "clients.doc" Then
        monDocument = Chemin & mesfichiers
     
     
     
        FichierWord.Documents.Open Filename:=monDocument, ReadOnly:=True
        Cells(Range("A1").End(xlDown).Row + 1, 1).Select
        ligne = ActiveCell.Row
     
        For i = 1 To 127
     
        Cells(ligne, i) = FichierWord.ActiveDocument.FormFields(i).Result
     
     
     
       If i >= 8 Then
     
        If Not IsNumeric(Cells(ligne, i).Value) Or Cells(ligne, i).Value = "" Then
                        Cells(ligne, i).Value = Cells(ligne, i).Value
                    Else
     
     
                        Cells(ligne, i).Value = CDbl(Cells(ligne, i).Value)
     
     
                  End If
                  Else
     
        End If
        Next i

  3. #3
    Expert éminent sénior
    Citation Envoyé par Kestion100 Voir le message

    Bonjour,

    Quelle nécessité avez-vous d'utiliser Word ?
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  4. #4
    Membre régulier
    Les fichiers Word sont diffusés à des utilisateurs qui les remplissent de façon mensuels, je les récupère et remonte les données dans Excel.

  5. #5
    Expert éminent sénior
    Citation Envoyé par Kestion100 Voir le message

    Au lieu de diffuser des fichiers Word, des fichiers Excel sont-ils possibles ?
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  6. #6
    Membre régulier
    A non, ce n'est pas possible, cela fait trois que nous fonctionnons comme cela et je viens de diffuser le fichier word mis à jour pour cette année, je vais les perdre. Peut-être l'année prochaine

  7. #7
    Membre régulier
    Il n'existe pas une sorte d'index des champ hors leurs signets?

  8. #8
    Expert éminent sénior
    Citation Envoyé par Kestion100 Voir le message

    Il faudrait voir votre fichier Word.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  9. #9
    Membre régulier
    Il s'agit d'un .docm qui n'a pas l'air de passer.....

  10. #10
    Expert éminent sénior
    Citation Envoyé par Kestion100 Voir le message
    Il s'agit d'un .docm qui n'a pas l'air de passer.....
    Il vous faut le ziper.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  11. #11
    Membre régulier
    Une capture écran peut-être?



    Le fichier Word avec ses champs.

    Et le fichier Excel avec les titres de colonne dans l'ordre:


    Il s'agit des champ avec des codes barre qu'il faudrait ne pas remonter.

    Attention, du code est rattaché à ces champs:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub CdBr()
    ActiveDocument.FormFields("Texte1").Result = "*" & ActiveDocument.FormFields("NOM").Result & "*"
    ActiveDocument.FormFields("Texte2").Result = "*" & ActiveDocument.FormFields("Prénom").Result & "*"
    ActiveDocument.FormFields("Texte3").Result = "*" & ActiveDocument.FormFields("MOIS").Result & "*"
     
     
     
    End Sub

  12. #12
    Membre régulier
    Les capture écran suffiront-elle?

  13. #13
    Expert éminent sénior
    Citation Envoyé par Kestion100 Voir le message
    Les capture écran suffiront-elle?
    Je préférerais voir votre document. Dans l'explorateur Windows, clic droit sur votre fichier et Envoyer vers Dossier compressé.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  14. #14
    Membre régulier
    ###raw>post.message###

  15. #15
    Expert éminent sénior
    Citation Envoyé par Kestion100 Voir le message
    Je n'ai pas réussi à utiliser correctement le fichier. Je l'ai donc transformé en .docx puis en .docm et j'ai créé le code suivant :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Sub Essai()
     
    Dim DocEncours As Document
    Dim I As Integer
     
        Set DocEncours = ActiveDocument
        With DocEncours
          For I = 1 To .FormFields.Count
             ' Semaine 1
              If I >= 11 And I <= 34 Then
                 .FormFields(I).Range.Select
                 MsgBox .FormFields(I).Name & " : " & .FormFields(I).Range.Text
              End If
              Debug.Print .FormFields(I).Name & " : " & .FormFields(I).Range.Text
          Next I
        End With
        Set DocEncours = Nothing
     
    End Sub


    Vous pouvez donc utiliser le nom des champs pour remplir votre tableau Excel. Dans votre cas, je réaliserais une table de correspondance dans Excel.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  16. #16
    Membre régulier
    Je crois comprendre que c'est le code proposé à utiliser dans Excel pour remonter les données des champs?
    Si tel est le cas, j'utilise le code indiqué car j'ai un nombre trop important de champ à remonter, près de 127.

    Sinon, je comprends mal et il s'agit du code à utiliser sous Word?

  17. #17
    Membre régulier
    Je vois la logique de ton code, il affiche dans une Message Box les valeurs des champs autre que les champs avec les codes barres (enfin je ne vois pas les champs avant).

    Je tente d'adapter dans Excel avec:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Sub RECUPCOLLES()
    Dim Fich As Worksheet, ligne As Long
    Set Fich = ThisWorkbook.Worksheets("RECUP")
    Sheets("RECUP").Visible = True
    Worksheets("RECUP").Activate
     
     
     
     
     
    Chemin = "H:\XXX\"
    mesfichiers = Dir(Chemin & "**")
     
     
    Set FichierWord = CreateObject("word.application")
     
    FichierWord.Visible = True
    FichierWord.DisplayAlerts = False
     
    Do While mesfichiers <> ""
      If mesfichiers <> "." And mesfichiers <> ".." And mesfichiers <> "clients.doc" Then
        monDocument = Chemin & mesfichiers
     
     
     
        FichierWord.Documents.Open Filename:=monDocument, ReadOnly:=True
        Cells(Range("A1").End(xlDown).Row + 1, 1).Select
        ligne = ActiveCell.Row
     
        For i = 1 To 3 And 7 to 127
     
        Cells(ligne, i) = FichierWord.ActiveDocument.FormFields(i).Result


    En me disant que
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    For i = 1 To 3 And 7 to 127
    éliminera les champ que je ne veux pas remonter mais la syntaxe n'est pas bonne et cette ligne reste marquée en rouge.

  18. #18
    Membre régulier
    Le code que j'utilise pour la remontée est dans Excel, je précise

  19. #19
    Expert éminent sénior
    Citation Envoyé par Kestion100 Voir le message
    Le code que j'utilise pour la remontée est dans Excel, je précise
    J'ai bien compris, mais avant de combiner Word avec Excel, il faut déjà comprendre comment fonctionne Word.
    La seule différence par rapport à votre code .FormFields(i).Result , c''est .FormFields(I).Range.Text


    Quant à la boucle dans Excel :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                For I = 1 To 127
                    Select Case I
                           Case 1 To 3, 7 To 127
     
                           Case Else
                               ' Suite du code
                    End Select
                Next I
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  20. #20
    Membre régulier
    Dans ton code, le I me paraît très intéressant car c'est le point de repère de nos code.
    Serait-il possible de modifier le numéro d'un champs.
    Je m'explique, ce sont les
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    .FormFields(I).
    qui nous dérange pour I = 4 à I = 6, donc si les champ (ici Texte1; Texte2; Texte3 (signets)) pouvaient correspondre à I = 130; I = 131; I = 132 par exemple, mon code For I= 1 To I = 130 pourrait fonctionner.
    Sinon, il faudrait exclure I pour I = 4 à I = 6.

    Je parle en termes peu académiques, je sais mais j'essaie de me faire comprendre