Publipostage et arrondis

Padboll

XLDnaute Nouveau
Bonjour

J'ai quelques questions à poser en rapport avec du publipostage tout d'abord.
J'ai automatisé un publipostage qui va me chercher automatiquement dans un tableau excel les valeurs choisies et me les exporte dans un document word fusionné. Le problème c'est que l'exportation ouvre le fichier final (avec les champs fusionnés) et le brouillon (avec par exemple "nom", "prenom",...)

Je voulais savoir si il y avait un moyen de n'ouvrir que le fichier final

mon code est le suivant :

Code:
Private Sub accepte_Click()

Dim docWord As Word.Document
Dim appWord As Word.Application
Dim NomBase As String

NomBase = "F:\Tmp\clamm0062\Bureau\VBA\Banque.xls"

'Ouverture du document publipostage
Application.ScreenUpdating = False
Set appWord = New Word.Application
appWord.Visible = True
Set docWord = appWord.Documents.Open("F:\Tmp\clamm0062\Bureau\VBA\Publibanque.doc")

With docWord.mailMerge
.OpenDataSource Name:=NomBase, _
Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
"DBQ=" & NomBase & "; ReadOnly=True;", _
SQLStatement:="SELECT * FROM [Publi$]"

    With .DataSource
    .firstRecord = wdDefaultFirstRecord
    .lastRecord = wdDefaultLastRecord
    End With

.Execute pause:=False

End With

Application.ScreenUpdating = True


End Sub


Deuxièmement, j'ai un problème d'arrondis qui se répète dans le publipostage.
En fait mon programme propose des taux d'intérets d'emprunts selon plusieurs variables. Or ces taux je les ai rentrés à la main (ils ne sont pas issus de calculs) mais quand je demande de les afficher dans une cellule excel, le chiffre a plusieurs décimales après la virgule et cela se répète dans le publipostage. Par exemple, pour un taux de 5 %, il m'affiche 5,0000000745058%.
J'ai essayé la commande Round en VBA mais bizarrement elle ne marche que dans un cas particulier.

Voici la partie de mon code concernée

Code:
If logement.Text = "Rien" Or logement.Text = "" And Dem < 10000 Then
Select Case Range("n14")
    Case Is <= 5
        Range("n15").Select
        ActiveCell.Value = 5
        Interet = ActiveCell.Value / 100
        taux.Caption = ActiveCell.Value & " %"
    Case Is <= 10
        Range("n15").Select
        ActiveCell.Value = 5.3
        Interet = ActiveCell.Value / 100
        taux.Caption = ActiveCell.Value & " %"
    Case Is <= 20
        Range("n15").Select
        ActiveCell.Value = 5.5
        Interet = ActiveCell.Value / 100
        taux.Caption = ActiveCell.Value & " %"
    End Select
ElseIf logement.Text = "Rien" Or logement.Text = "" And Dem <= 20000 Then
Select Case Range("n14")
    Case Is <= 5
        Range("n15").Select
        ActiveCell.Value = 5.5
        Interet = ActiveCell.Value / 100
        taux.Caption = ActiveCell.Value & " %"
    Case Is <= 10
        Range("n15").Select
        ActiveCell.Value = 5.7
        Interet = ActiveCell.Value / 100
        taux.Caption = ActiveCell.Value & " %"
    Case Is <= 20
        Range("n15").Select
        ActiveCell.Value = 5.9
        Interet = ActiveCell.Value / 100
        taux.Caption = ActiveCell.Value & " %"
    End Select
ElseIf logement.Text = "Rien" Or logement.Text = "" And Dem > 20000 Then
Select Case Range("n14")
    Case Is <= 5
        Range("n15").Select
        ActiveCell.Value = 5.9
        Interet = ActiveCell.Value / 100
        taux.Caption = ActiveCell.Value & " %"
    Case Is <= 10
        Range("n15").Select
        ActiveCell.Value = 6.2
        Interet = ActiveCell.Value / 100
        taux.Caption = ActiveCell.Value & " %"
    Case Is <= 20
        Range("n15").Select
        ActiveCell.Value = 6.6
        Interet = ActiveCell.Value / 100
        taux.Caption = ActiveCell.Value & " %"
    End Select
ElseIf logement.Text = "Partie" Then
    Range("n9").Select
    taux.Caption = ActiveCell.Value * 100 + 0.3 & " %"
    Interet = ActiveCell.Value + 0.3 / 100
ElseIf logement.Text = "Tout" Then
    Range("n9").Select
    taux.Caption = ActiveCell.Value * 100 & " %"
    Interet = ActiveCell.Value
End If


Range("l22").Select
ActiveCell.Value = assur.Caption

Range("l23").Select
ActiveCell.Value = taux.Caption

Range("l24").Select
ActiveCell.Value = demande.Value
        
Range("l25").Select
ActiveCell.Value = dure.Value

Range("n26").Select
mensualite.Caption = ActiveCell.Value & " €"

Range("n28").Select
cout.Caption = ActiveCell.Value & " €"


Sheets("Publi").Select
Range("h2").Select
'L'erreur survient à ce niveau je pense
ActiveCell.Value = Round((Assr + Interet) * 100, 2)
Range("i2").Select
ActiveCell.Value = Temps
Range("j2").Select
ActiveCell.Value = mensualite.Caption
Range("k2").Select
ActiveCell.Value = cout.Caption
Sheets("Particuliers").Select

accepte.Visible = True


End Sub

Les variables ont bien été déclarées et je ne sais pas pourquoi ça ne marche que dans certains cas.

Merci à ceux qui se pencheront sur ce problème
 

chris

XLDnaute Barbatruc
Re : Publipostage et arrondis

Bonjour

Il suffit dans ta macro de fermer le fichier de fusion (ce que tu appelles brouillon - Publibanque.doc) avant le screen update.

Pour le problème des arrondis, Depuis que Excel et Word communiquent en OLE, le format n'est plus transmis.
2 solutions :

Si ton classeur Excel utilise pour le publipostage la 1ere feuille, ouvres ton classeur en mode DDE dans Word (dans la macro).

Sinon il faut dans le publipostage (le document pas la macro) associer, à chacun des champs où il y a problème, un commutateur au code du champ.
Exemple : pour le champ Prix on ajoute le format ainsi
Code:
  [FONT=Arial]{MERGEFIELD Prix "# ##0,00 €"}[/FONT]

Pour le DDE tu dois trouver dans l'aide sinon pour l'enregistreur macro il faut au préalable dans Word aller dans outils, options, général, cocher confirmation des conversions à l'ouverture.
 
Dernière édition:

Padboll

XLDnaute Nouveau
Re : Publipostage et arrondis

J'ai essayé vos solutions mais aucune ne marche. Pour le publipostage j'ai essayé le code

Code:
appWord.Documents.Close("F:\Tmp\clamm0062\Bureau\VBA\Publibanque.doc")

mais ça ne le ferme pas. Je me suis peut être trompé de code...

De plus le "mergefield" ne fonctionne pas non plus.
Mais à mon avis l'erreur vient d'excel.
Je ne comprends pas pourquoi quand je lui dis

Code:
Range("n15").Select
ActiveCell.Value = 5

il me met 5,0000017853 dans la cellule
 

Discussions similaires