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

Word Discussion :

Publipostage nombre de champs variables [WD-2016]


Sujet :

Word

  1. #1
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut Publipostage nombre de champs variables
    Bonjour,
    Est-il possible de créer un document Word avec un nombre de lignes variables ?
    Ex : créer une relance à partir d'un fichier excel avec un nombre de factures qui va de 1 à x, qu'on afficherait sous forme de tableau, le tableau aurait donc de 1 à x lignes
    Merci

  2. #2
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    Bonjour,
    J'ai réussi à insérer le champ Database.
    Je pensais que c'était bon mais non en fait, j'ai eu un message d'erreur : Erreur de syntaxe dans la chaine dans l'expression Client= nom de mon client (qui contient un apostrophe, peut-être le problème, puisque ça fonctionne quand j'enlève ce client)

    Et J'ai 3 nouvelles questions.
    1- Comment mettre la date au bon format ?
    2- Peut-on ajouter un total au tableau si le nombre de lignes est supérieur à 1 ?
    3- Peut-on mettre une variable dans le champ "objet" du mail (nom du client) ?

    Merci

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 376
    Points : 596
    Points
    596
    Par défaut
    Bonjour,

    Pour l'apostrophe, oui ça ne m'étonne pas car l'apostrophe est une balise en sql.
    Avec d'autres applis comme Javascript, on fait précéder l'apostrophe par un antislish \. Tu peux essayer, mais ça m'étonnerait que ça marche avec Word. Cela dit, je n'ai pas essayé.

    Pour les autres questions, c'est non partout.

    Il va falloir passer par des macros mais en partant d'un document intermédiaire (fusion vers document)
    Une fois la fusion faite, il faudra utiliser la macro pour envoyer chaque document, en utilisant une variable pour l'objet.
    Pour le total, c'est pareil. Ce n'est pas très compliqué puisque tous les résultats sont faits de la même façon, il faudra faire une boucle sur tous les tableaux de toutes les sections.

    m@rina

  4. #4
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    Bonjour,
    Merci pour ta réponse
    Je suis perdue.
    La fusion vers document, c'est Fusion/Lettres ?
    Une fois cette fusion faite, il faut créer la macro dans quel document ? Et comment la lance-t-on ?
    Merci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 376
    Points : 596
    Points
    596
    Par défaut
    Bonsoir

    Non, tu peux rester en catégorie "Courrier"/

    Mais au moment de lancer la fusion, tu choisis "Modifier des documents individuels".
    En réalité ça va te donner un seul document composé d'autant de sections que tu as de destinataires.

    Ensuite, tu peux écrire la macro pour ce document. La macro va :
    - formater les tableaux
    - ajouter un total à la bonne colonne
    - envoyer le contenu de chaque section à chaque destinataire.

    mais c'est sur que ça demande un travail d'écriture de macro. Pour le formatage et le total, c'est très simple.
    Pour envoyer, si tu as les champs "adresse mail" et "objet" dans le document, ce sera facile de les récupérer. Sinon, ce sera plus complexe.
    Tu peux t'aider des macros que j'ai mises ici et qui parle de document à joindre. Ce n'est pas ton cas, mais le principe est un peu le même, sauf que là, on boucle sur les sections.

    EN gros :
    Pour chaque section :
    je prends l'adresse mail
    Je prends l'objet
    j'envoie le contenu de la section

    m@rina

  6. #6
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    Bonjour M@rina,

    J'ai pu créer la macro grâce à tes explications mais je ne sais pas la modifier.

    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
    Sub mef_tableau()
    'macro écrite par m@rina
     
    Dim cellule
    Dim x
    Dim Total
    Dim MontantDû
     
    For x = 1 To ActiveDocument.Tables.Count
            For y = 2 To ActiveDocument.Tables(x).Rows.Count
                With ActiveDocument
                cellule = .Tables(x).Cell(y, 1)
                cellule.Select
               ' cellule.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabDecimal
     
                cellule.Text = Format(cellule.Text, "dd mm yyyy")
     
                MontantDû = .Tables(x).Cell(y, 5)
                MontantDû.Select
                Total = Total + Val(MontantDû.Text)  
     
            End With
        Next y
    Next x
     
    End Sub
    1/La date ne se met pas au format date et agrandit la case du tableau (comme si on tape sur Entrée)
    2/Le montant dû devient un nombre entier

    Nom : Capture.PNG
Affichages : 428
Taille : 5,6 Ko

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 376
    Points : 596
    Points
    596
    Par défaut
    Bonjour,

    Peux tu me dire ce que tu veux faire exactement avec les tableaux ?
    Quelles sont les colonnes à formater ? de quelle façon ?
    Où veux tu ajouter la somme ? (somme de colonnes, de lignes...)

    Si tu peux me donner le document fusionné, ça serait mieux (il suffit de quelques sections, pas le doc en entier).

    m@rina

  8. #8
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    Bonjour,
    Je veux afficher la date au format français (01/04/2021 et non 4/1/21)
    Et le total, soit ajouter une ligne au total en écrivant Total (somme de colonnes), soit le récupérer dans une variable que je pourrais utiliser dans une phrase.
    Et enfin, si il y a possibilité de dimensionner les colonnes pour que ce soit aligné avec le texte, ce serait parfait.
    Nom : Capture.PNG
Affichages : 409
Taille : 8,5 Ko
    Merci

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 376
    Points : 596
    Points
    596
    Par défaut
    Bonjour,

    Oui, c'est vrai que le VBA dans les tableaux est assez pénibles parce qu'il ne faut pas confondre la cellule et le contenu. Le problème avec le contenu, c'est que ça marche uniquement en nombre de caractères.
    Donc si on applique un format Date sur une cellule, ça ne fonctionne pas, car le format doit être appliqué au contenu.
    Pour le format des nombres, c'est moins compliqué si on n'a pas de décimales. Dans le cas inverse, on est aussi coincé.

    Pour ce qui est du total, ce n'est pas très compliqué d'ajouter une ligne avec le total. Mais attention au format. Si tu veux des espaces entre les milles, je te conseille de faire d'abord le total et ensuite d'appliquer le format.

    Pour l'alignement, je n'ai pas bien compris ce que tu veux. Car si le sujet est toujours d'envoyer ça par mail, il ne faut pas s'occuper du format Word, puisque, au bout du compte, ce sera de l'html. TU peux jouer sur les largeurs des colonnes si nécessaire.

    m@rina

  10. #10
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    La date est au bon format, merci.
    Une ligne total s'ajoute par contre une ligne s'ajoute dans chaque case EDIT : résolu

    Comme tu peux le voir, la valeur des variables n'est pas correcte après avoir appliqué le format # ###.00

    Et le total n'est pas correct non plus

    Pour l'alignement du tableau au texte, c'est parce que nous avons une partie des clients qui ne souhaite pas les recevoir par mail mais par courrier.

    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
     
    Sub mef_tableau()
    'macro écrite par m@rina
     
    Dim cellule
    Dim x, y, z
    Dim Total
    Dim MontantDû
     
    For x = 1 To ActiveDocument.Tables.Count 'numéro du document
     
      For y = 2 To ActiveDocument.Tables(x).Rows.Count 'ligne du tableau
        With ActiveDocument
        'format date
          cellule = .Tables(x).Cell(y, 1)
          cellule.Select
          cellule.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabDecimal
     
          cell_text = Left(cellule, Len(cellule) - 1)
          cellule.Text = Format(cell_text, "dd/mm/yyyy")
     
         'format nombre
         For z = 3 To 5 'colonne du tableau
            cellule = .Tables(x).Cell(y, z)
            cellule.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabDecimal
            cell_text = Left(cellule, Len(cellule) - 1)
            montant = Format(cell_text, "# ###.00")
            montant = Left(montant, Len(montant) - 1)
            cellule.Text = montant
          Next z
        End With
      Next y
     
     'total
      With ActiveDocument.Tables(x).Rows
       .Add
       .Last.Cells(4).Range.Text = "TOTAL"
       .Last.Cells(5).Select
       Selection.InsertFormula Formula:="=SUM(ABOVE)"
      End With
    Next x
     
    End Sub

    Nom : Capture.PNG
Affichages : 424
Taille : 18,8 Ko
    Images attachées Images attachées   

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 376
    Points : 596
    Points
    596
    Par défaut
    Bonjour,

    Est-ce que tu as ajouté le total AVANT d'appliquer le format comme je l'explique dans l'article ?

    m@rina

  12. #12
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    Bonjour,
    J'ai changé pour mettre la formule de somme avant la mise en forme mais le résultat est identique.

    Nom : Capture.PNG
Affichages : 401
Taille : 4,9 Ko

    Nom : Capture2.PNG
Affichages : 403
Taille : 20,7 Ko

  13. #13
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par m@rina Voir le message
    Bonjour,

    Est-ce que tu as ajouté le total AVANT d'appliquer le format comme je l'explique dans l'article ?

    m@rina
    Bonjour,
    Même en ajoutant la ligne TOTAL et la formule manuellement, ça ne fonctionne pas. D'ailleurs, lorsque je clique sur formule, sum, je n'ai pas le Above proposé automatiquement. (Ca fonctionne dans un tableau que je crée sur un document par contre).

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par l.flipper Voir le message
    Bonjour,

    Désolé de m'immiscer dans votre discussion avec Marina (), regardez si la fonction dans ce code peut vous aider :

    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
    60
    61
    62
    63
    64
    65
     
     
    Sub Mef_Tableau()
    'macro écrite par m@rina
     
    Dim cellule, Cell_text, montant
    Dim x, y, z
    Dim Total
    Dim MontantDû
     
        With ActiveDocument
     
            For x = 1 To .Tables.Count 'numéro du document
     
                For y = 2 To .Tables(x).Rows.Count 'ligne du tableau
                    'format date
                     cellule = .Tables(x).Cell(y, 1)
                     cellule.Select
                     cellule.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabDecimal
                     Cell_text = Left(cellule, Len(cellule) - 1)
                     cellule.Text = Format(Cell_text, "dd/mm/yyyy")
     
                     'format nombre
                     For z = 3 To 5 'colonne du tableau
                         cellule = .Tables(x).Cell(y, z)
                         cellule.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabDecimal
                         If Len(cellule) - 2 > 0 Then  ' A vérifer
                            Cell_text = Left(cellule, Len(cellule) - 2)
                            ' Debug.Print "Y : " & y & ", Z : " & z & " : " & Cell_text & ", " & Len(cellule)
                            cellule.Text = Format(Cell_text, "# ### ##0.00")
                          End If
                      Next z
                Next y
     
                'total
                With .Tables(x)
                   With .Rows
                        .Add
                        .Last.Cells(4).Range.Text = "TOTAL"
                        .Last.Cells(5).Select
                   End With
                   Selection.Range.Text = Format(TotalDu(ActiveDocument.Tables(x), 5), "# ### ##0.00")
              End With
     
            Next x
     
        End With
     
    End Sub
     
    Function TotalDu(ByVal TableauEnCours As Table, ByVal ColonneTotal As Integer) As Double
     
    Dim I As Integer
    Dim CellulesTotal As Cells
     
        TotalDu = 0#
        Set CellulesTotal = TableauEnCours.Columns(ColonneTotal).Cells
        For I = 2 To CellulesTotal.Count - 1 ' Sauf la ligne Total
            With CellulesTotal(I)
                 TotalDu = TotalDu + CDbl(Mid(.Range.Text, 1, Len(.Range.Text) - 1))
            End With
        Next I
        Set CellulesTotal = Nothing
     
    End Function

  15. #15
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    Bonjour, Merci pour votre aide.
    J'ai recopié votre code mais ça ne fonctionne pas, peut-être fallait-il l'adapter ?
    Par ailleurs, j'ai remarqué que mon fichier excel de base contient des données déjà formatées, peut-être que cela vient de la également.

    Nom : Capture.PNG
Affichages : 389
Taille : 25,8 Ko
    Nom : Capture2.PNG
Affichages : 451
Taille : 8,0 Ko

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par l.flipper Voir le message
    Si vous avez un format X XXX,XX en entrée dans le tableau, cela ne peut pas fonctionner. C'est pour cela sans doute que la formule =Sum(Above) ne fonctionne pas.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par l.flipper Voir le message
    Essayez de faire votre total en premier :
    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
     
     
    Sub Mef_Tableau()
    'macro écrite par m@rina
     
    Dim cellule, Cell_text, montant
    Dim x, y, z
    Dim Total
    Dim MontantDû
     
        With ActiveDocument
     
            For x = 1 To .Tables.Count 'numéro du document
     
                 'total
                With .Tables(x)
                   With .Rows
                        .Add
                        .Last.Cells(4).Range.Text = "TOTAL"
                        .Last.Cells(5).Select
                   End With
                   Selection.Range.Text = Format(TotalDu(ActiveDocument.Tables(x), 5), "# ### ##0.00")
              End With
     
     
                For y = 2 To .Tables(x).Rows.Count 'ligne du tableau
                    'format date
                     cellule = .Tables(x).Cell(y, 1)
                     cellule.Select
                     cellule.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabDecimal
                     Cell_text = Left(cellule, Len(cellule) - 1)
                     cellule.Text = Format(Cell_text, "dd/mm/yyyy")
     
                     'format nombre
                     For z = 3 To 5 'colonne du tableau
                         cellule = .Tables(x).Cell(y, z)
                         cellule.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(2), Alignment:=wdAlignTabDecimal
                         If Len(cellule) - 2 > 0 Then  ' A vérifer
                            Cell_text = Left(cellule, Len(cellule) - 2)
                            ' Debug.Print "Y : " & y & ", Z : " & z & " : " & Cell_text & ", " & Len(cellule)
                            cellule.Text = Format(Cell_text, "# ### ##0.00")
                          End If
                      Next z
                Next y
     
     
            Next x
     
        End With
     
    End Sub

  18. #18
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Si vous avez un format X XXX,XX en entrée dans le tableau, cela ne peut pas fonctionner. C'est pour cela sans doute que la formule =Sum(Above) ne fonctionne pas.
    J'ai retiré les espaces et mis en format texte mais ça ne fonctionne toujours pas.
    Je fais bien le total avant la mise en forme

    La fonction Totaldu me met incompatibilité de type

  19. #19
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par l.flipper Voir le message
    Remplacez la fonction par celle-ci :

    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
     
    Function TotalDu(ByVal TableauEnCours As Table, ByVal ColonneTotal As Integer) As Double
     
    Dim I As Integer, J As Integer
    Dim CellulesTotal As Cells
    Dim ValeurCellule As Variant
     
        TotalDu = 0#
        Set CellulesTotal = TableauEnCours.Columns(ColonneTotal).Cells
        For I = 2 To CellulesTotal.Count - 1 ' Sauf la ligne Total
            With CellulesTotal(I)
                 ValeurCellule = Mid(Trim(.Range.Text), 1, Len(Trim(.Range.Text)) - 2)
                 Debug.Print I & " : " & ValeurCellule & ", " & UBound(Split(ValeurCellule, " "))
                 TotalDu = TotalDu + CDbl(ValeurCellule)
            End With
        Next I
        Set CellulesTotal = Nothing
     
    End Function
    Que récupérez vous dans la fenêtre Exécution (Ctrl-G) avec Debug.print ?

  20. #20
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    Nom : Capture.PNG
Affichages : 380
Taille : 4,9 Ko

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. [WD-2013] Publipostage depuis une table access a nombre de champ variable
    Par Kintin dans le forum Word
    Réponses: 13
    Dernier message: 25/04/2018, 10h13
  2. [WD-2016] Publipostage avec nombre de champs variables
    Par monza dans le forum Word
    Réponses: 1
    Dernier message: 04/02/2018, 14h49
  3. Requete paramétrée avec nombre de champs variable
    Par Braillane dans le forum Accès aux données
    Réponses: 3
    Dernier message: 07/02/2008, 23h09
  4. importer un fichier texte ayant un nombre de champs variables
    Par steelspirit dans le forum kettle/PDI
    Réponses: 4
    Dernier message: 15/01/2008, 10h24
  5. Interface avec un nombre de champs variable
    Par vladvad dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/06/2007, 11h19

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