IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

VBA Word Discussion :

Remplissage automatique d'un document type [WD-365]


Sujet :

VBA Word

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Remplissage automatique d'un document type
    Bonsoir tout le monde, j'espère que vous allez bien.

    Je cherche à réaliser un courrier d'information dont les champs seraient remplies automatiquement par un UserForm. Ayant l'habitude avec Excel, j'en ai réalisé un, mais je patine pour comprendre comment attribuer les données du formulaire à mon document... J'ai réalisé des recherches sur les signets et les champs, mais je ne comprends pas comment les utiliser en VB.

    Exemple : saisie de la commune --> à positionner 3 fois dans le document

    Merci pour vos conseils et propositions !


    voici mon code qui ne fonctionne pas, avec l'utilisation de champs :
    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
    Private Sub CommandButton1_Click()
     
    'remplir les informations saisies sur le document
     
    Dim Commune As String
    Dim Motif As String
    Dim Période As String
     
    Commune = Me.TextBox1.Value
    Motif = Me.ComboBox1.Value
    periode = Me.TextBox2.Value
     
    If Commune = "" Then
    MsgBox ("Veuillez saisir la commune.")
    Else
        If Motif = "" Then
        MsgBox ("Veuillez saisir un motif de travaux.")
        Else
            If periode = "" Then
            MsgBox ("Veuillez indiquer une date de prévision de travaux.")
            Else
     
            'remplir les champs du texte
     
    ActiveDocument.FormFields("**commune1**").Range.Text = Commune
    ActiveDocument.FormFields("**commune2**").Range.Text = Commune
    ActiveDocument.FormFields("**commune3**").Range.Text = Commune
    ActiveDocument.FormFields("**motif**").Range.Text = Motif
    ActiveDocument.FormFields("**periode**").Range.Text = Période
     
        ActiveDocument.Fields.Update
     
    Unload UserForm1
    'UserForm2.Show
     
    End If
        End If
            End If
     
    End Sub

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par NathanduTP Voir le message

    Bonjour,

    Donnez des noms à vos contrôles.
    Utilisez la propriété Result des champs FormField pour mettre à jour vos valeurs, sinon vous les supprimez avec .Range.Text.

    Une solution possible avec ce code :
    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
     
    Private Sub BoutonValidation_Click()
     
    'remplir les informations saisies sur le document
     
    Dim I As Integer
    Dim MessageValidite As String
     
        MessageValidite = "Veuillez saisir une valeur dans " & Chr(10)
     
        If TextBoxCommune = "" Then MessageValidite = MessageValidite & "- Commune." & Chr(10)
        If ComboBoxMotif.ListIndex = -1 Then MessageValidite = MessageValidite & "- Motif." & Chr(10)
        If TextBoxPeriode = "" Then MessageValidite = MessageValidite & "- Période."
     
        If MessageValidite <> "Veuillez saisir une valeur dans " & Chr(10) Then
           MsgBox MessageValidite
           Exit Sub
        End If
     
        With ActiveDocument
     
             If .FormFields.Count = 0 Then Exit Sub
     
             For I = .FormFields.Count To 1 Step -1
                 With .FormFields(I)
                      Select Case .Name
                             Case "commune1", "commune2", "commune3"
                                  .Result = TextBoxCommune
                             Case "motif"
                                  .Result = ComboBoxMotif.Value
                             Case "periode"
                                  .Result = TextBoxPeriode
                      End Select
     
                 End With
             Next I
     
        End With
     
     
    End Sub
     
    Private Sub TextBoxPeriode_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
            If InStr("1234567890/", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    End Sub
    La procédure TextBoxPeriode_KeyPress permet de contrôler (en partie) la saisie dans le champ. Elle empêche toute saisie de caractères autres que ceux prévus. En revanche, elle ne contrôle pas la validité d'une date.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour Eric,

    Merci pour ta réponse, je vais adapter ton code à ma situation !
    Merci pour ton aide,

    A bientôt

    Nathan

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour à tous !

    J'ai effectivement pu adopter facilement le code d'Eric (merci!), mais un dernier problème subsiste : mes champs ne sont pas reconnus dans le document.
    En effet, le code sort de la procédure lorsque le nombre de champs est 0 (voir ligne 22). Or j'ai créé 5 champs dans mon document !

    J'ai réalisé des recherches sur la création des champs, et suivi les consignes. Peut-être ai-je sélectionné une mauvaise catégorie de champ ?

    Merci par avance pour votre aide, bonne fin de journée !

    Nathan

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par NathanduTP Voir le message
    Bonjour,

    C'est certain que ce ne sont pas des formfields. Pour voir les types que vous avez utilisés, mettez votre document en ligne.

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta rapidité

    Ci-joint le doc, avec les champs que j'essaie de créer en rouge. Il fait apparaître tes modifications.

    Attention, je ne parviens pas à envoyer mon fichier ".docm", je l'ai donc simplement changé en ".docx". Pour l'ouvrir, il faut auparavant modifier l'extension en ".docm". (normalement le code n'a pas été effacé, j'ai fais le test sur mon PC avant...)

    Merci par avance,

    NathanDocument type saisie auto - Copie.docx

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par NathanduTP Voir le message
    Ce sont des champs Field. Une solution de mise à jour :
    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
    55
    56
    57
    58
    59
     
    Sub TestMajChamps()
     
        MajChamps "Commune 2", "Motif 2", "Période 2"
    End Sub
     
     
     
    Sub MajChamps(ByVal CommuneChoisie As String, ByVal MotifChoisi As String, ByVal PeriodeChoisie As String)
     
    Dim I As Integer, J As Integer
    Dim MonRange As Range
     
        With ActiveDocument
     
             For J = 1 To .Shapes.Count
     
                 With .Shapes(J).TextFrame
                      If .HasText Then
     
                         If .TextRange.Fields.Count > 0 Then
                            For I = 1 To .TextRange.Fields.Count
                                With .TextRange.Fields(I)
     
                                     If InStr(1, .Code, "commune", vbTextCompare) > 0 Then
                                        Set MonRange = .Result
                                        MonRange.Text = CommuneChoisie
                                        .Result = MonRange
                                        Set MonRange = Nothing
                                     End If
     
                                     If InStr(1, .Code, "motif", vbTextCompare) > 0 Then
                                        Set MonRange = .Result
                                        MonRange.Text = MotifChoisi
                                        .Result = MonRange
                                        Set MonRange = Nothing
                                     End If
     
     
                                     If InStr(1, .Code, "période", vbTextCompare) > 0 Then
                                        Set MonRange = .Result
                                        MonRange.Text = PeriodeChoisie
                                        .Result = MonRange
                                        Set MonRange = Nothing
                                     End If
     
                                End With
     
                           Next I
     
                        End If
                     End If
     
                   End With
     
             Next J
     
        End With
    End Sub

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2020
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Août 2020
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Merci beaucoup pour ta réponse, je vais analyser ça.

    Bonne journée, à la prochaine,

    Nathan

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/04/2012, 14h04
  2. [WD-2003] Remplissage automatique de documents word
    Par Caltys dans le forum Word
    Réponses: 4
    Dernier message: 20/12/2011, 02h27
  3. [WD-2007] document avec remplissage automatique
    Par marcelus_wallas dans le forum Word
    Réponses: 1
    Dernier message: 15/06/2011, 15h46
  4. Requete et remplissage automatique sur un sitewoueb
    Par pier dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/08/2005, 10h52
  5. [C#] Remplissage automatique de 2 TextBox
    Par dacamp dans le forum ASP.NET
    Réponses: 8
    Dernier message: 29/09/2004, 17h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo