XL 2016 Publipostage avec ligne variable

HamoudaBA

XLDnaute Occasionnel
Bonsoir le Forum,
Je cherche de l'aide pour un publipostage qui inclut des lignes variables dans excel.
Mon souci est de faire un courrier suite à une réunion de commission médicale pour informer les fonctionnaires qu'il doivent présenter un certificat médical détaillé pour les jours de maladies qu'ils ont bénéficié en énumérant le nombre de jours et la date de chaque congé de maladie (tableau joint).
Je vous remercie.
 

Pièces jointes

  • cmd.zip
    35.8 KB · Affichages: 53

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

@HamoudaBA
• Pour débuter:
1) Pour un publipostage, pas de cellules fusionnées dans la base de données.
[humour du samedi matin, avec de la confiture sur les doigts]
2) Molière (ou JB pour les intimes) n'aurait pas pu écrire dans son Malade Imaginaire
"DEMANDE D'UN CERTEFICAT MEDICAL DETAILLE"
mais assurément ceci ;)
DEMANDE D'UN CERTIFICAT MEDICAL DETAILLE
[/humour du samedi matin]

• Pour finir conseils pratiques
3) Il serait préférable de reformater ta base sur ce modèle:
Ligne d'entête
N° i. unique;Grade;Nom et Pr;Lieu de Travail;Cumul Préc.;CONGE_1;Date_C1;Motif_1;Decision_1; CONGE_2;Date_C2;Motif_2;Decision_2;CONGE_3;Date_C3;Motif_3;Decision_3
Une ligne égale un enregistrement
(clique sur l'image pour l'agrandir)
01Hamou.jpg

NB: Ton document Word ne contient aucun champ de fusion.
 
Dernière édition:

HamoudaBA

XLDnaute Occasionnel
Bonjour le fil, le forum

1) Pour un publipostage, pas de cellules fusionnées dans la base de données.
2) Molière n'aurait pas pu écrire dans son Malade Imaginaire
"DEMANDE D'UN CERTEFICAT MEDICAL DETAILLE"
mais assurément ceci
DEMANDE D'UN CERTIFICAT MEDICAL DETAILLE
3) Il faut donc reformater ta base sur ce modèle:
Ligne d'entête
N° i. unique;Grade;Nom et Pr;Lieu de Travail;Cumul Préc.;CONGE_1;Date_C1;Motif_1;Decision_1; CONGE_2;Date_C2;Motif_2;Decision_2;CONGE_3;Date_C3;Motif_3;Decision_3
Une ligne égale un enregistrement
(clique sur l'image pour l'agrandir)
Regarde la pièce jointe 1005560


NB: Ton document Word ne contient aucun champ de fusion.
@Staple1600
Une faute de frappe peut passer inaperçue, surtout que j'ai fais l'exemple du tableau et de la lettre rapidement.
Pour votre Macro je vous ai répondu que je n'arrivais pas à modifier le path afin de l'adapter à mon fichier, alors pour moi je n'ai pas parvenu à l'essayer.
Pour reformater ma base et tout mettre en ligne d'entête n'est pas pratique surtout pour l'impression.
Je vous remercie tout de même, et j’espère que vos réflexions n'ont rien de personnel surtout que la langue de Molière n'est pas ma langue maternelle.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Euh c'était que l'humour camarade ;)
Je vais rajouter des emoticones dans l'édition du 1er message pour mieux signaler mes traits d'humour ;)

Sinon pour ta question.
Je vois pas comment ta base avec son format actuel peut être utilisée pour un publipostage avec Word.
 
Dernière édition:

gosselien

XLDnaute Barbatruc
Je vois pas comment ta base avec son format actuelle peut être utilisé pour un publipostage avec Word.
Hello tous,
entièrement d'accord, pour un publipostage efficace, il faut faire une "base de données" avec les data les une sous les autres, des titres à chaque colonne, etc etc...et PAS DE FUSION de cellule !
Exemple en attaché :)

P.
 

Pièces jointes

  • publipostage.zip
    27.4 KB · Affichages: 43

chris

XLDnaute Barbatruc
Bonjour à tous

Le fichier Excel remanié : outre les cellules fusionnées, on ne peux avoir de titre au dessus des données.
Pour faciliter la lecture on peut utiliser une mise en forme conditionnelle afin de masquer les répétitions dans les premières colonnes.

Dans Excel tu peux nommer ton onglet avec la date si nécessaire au lieu d'ajouter la dernière colonne à la table et, dans ce cas, dans Word prévoir un champ "REMPLIR" afin que le publipostage demande la date à insérer.

EDIT : on peut laisser le titre à condition de nommer la plage de données et utiliser la zone nommée en publipostage


Pour le multilignes par personne en publipostage voir ce tuto http://www.faqword.com/index.php/wo...lipostage-conditionnel-maison#excel-2007-2016
 

Pièces jointes

  • COMMISSION MEDICALE.xlsx
    20.5 KB · Affichages: 35
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, Bonjour gosselien, Bonjour chris

@chris
Tu as fais fi des directives (c'est pas du jeu ;))
Pour reformater ma base et tout mettre en ligne d'entête n'est pas pratique surtout pour l'impression.

Ce faisant, néanmoins, tu confortes mon point de vue et celui de gosselien.
Bref tu apaises mon moi intérieur en ce dimanche pluvieux et froid car je sais désormais que j'empruntais depuis toujours le vrai chemin du publipostage à l'ancienne ;)

Merci pour le lien (que je connaissais) mais que j'avais oublié.
(correction : Euh c'est plutôt le site que je connaissais ;)

PS: Tu n'as pas été récemment confronté au problème que j'expose dans la section Autres applications?
 

chris

XLDnaute Barbatruc
RE
@chris
Tu as fais fi des directives (c'est pas du jeu ;))
J'ai moins remanié et j'ai même corrigé mon "corrigement" dans mon EDIT ;)
...
PS: Tu n'as pas été récemment confronté au problème que j'expose dans la section Autres applications?

Je n'utilise W10 que sur une partition de formation donc pas au quotidien et sur laquelle j'ai 2016.
Mais MS n'arrête pas de publier des correctifs merd..ques puis des correctifs de correctifs...
Il y a quelques mois un correctif a bloqué Outlook 2016 pendant des semaines : impossible de créer un compte...
 

Staple1600

XLDnaute Barbatruc
Re

@chris
Ah Excel 2000 et W98SE, c'était le bon temps !
On pouvait réinstaller sans Internet et sans devoir réactiver ;)
On se faisait sa petite disquette de boot optimisée (avec support CD/Rom etc...)
On naviguait sur Netscape...
Toute une époque

Mais à l'époque déjà, il était enseigné dans les écoles de Publipostage, le mantra suivant:
Une ligne, un enregistrement
(à ne pas confondre avec cet autre : une ligne dans chaque narine ;)
qui normalement n'est enseigné dans aucune école)
 

zebanx

XLDnaute Accro
Bonjour à tous,

@HamoudaBA
Un essai.
Le fichier a été repris sans utilisation de zones fusionnées (j'aime pas non plus) en transférant les informations dans une base exploitable pour le publipostage.

La clé de transfert par ligne est le numéro d'identifiant.
Les informations ne sont pas à publiposter, sauf erreur, si la ligne dans le tableau de départ correspond à un avis favorable ou à une date différente de celle de la commission.

Le zip contient : fichier xls, fichier source, lettres fin de publipostage.
J'ai volontairement mis les partie correspondant aux données non fusionnées du document initial (#1) dans un tableau. Cela évite d'avoir des "-" qui apparaissent en milieu de pages.

xlment
zebanx

PS : contribution de job75 :)cool:) sur une macro (valeur_texte) pour transformer les dates / nombres en texte afin d'avoir une reconnaissance sur le fichier word source
 

Pièces jointes

  • publipostage_2_medical.zip
    33.9 KB · Affichages: 40
Dernière édition:

zebanx

XLDnaute Accro
J'ai utilisé des cells(i,j) avec beaucoup de comparaison pour transférer d'une base vers du publipostage.
En résumé, sur le tableau de base :
- conservation des colonnes 1 à 10
- si la clé (colonne 3) est retrouvé et que la formule en dernière colonne restitue la date de référence, les données des colonnes 11 à 13 sont recopiées sur la même ligne (incrémentation : colonne +3).
- sinon, on passe à la clé suivante.

Si l'un(e) d'entre vous a la possibilité d'obtenir un résultat identique avec une méthode tableaux / array, je suis preneur et vous en remercie par avance !
;)
Je remets le fichier XLS seul du #12.

Code:
Sub recap_publipostage()
Set shr = Sheets("recap")
Set shp = Sheets("publi")
derL2 = shr.Cells(Rows.Count, 1).End(3).Row
derL2R = shp.Cells(Rows.Count, 1).End(3).Row
j = 11

shp.Select
Range(Cells(2, 1), Cells(derL2R + 1, 100)).ClearContents
derL2R = shp.Cells(Rows.Count, 1).End(3).Row

shr.Select
For i = 2 To derL2
On Error GoTo prochain
    'If Not IsError(CLng(Cells(i, 7).Value)) Then
    If CLng(Cells(i, 14).Value) > 0 Then
        If Cells(i, 3).Value <> Cells(i - 1, 3).Value Then
        shr.Range(Cells(i, 1), Cells(i, 13)).Copy Destination:=shp.Cells(derL2R + 1, 1)
        Else
            If shp.Cells(derL2R + 1, 3) = shr.Cells(i, 3) Then
            j = j + 3
            shr.Range(Cells(i, 11), Cells(i, 13)).Copy Destination:=shp.Cells(derL2R + 1, j)
            Else
            shr.Range(Cells(i, 1), Cells(i, 13)).Copy Destination:=shp.Cells(derL2R + 1, 1)
            End If
        End If
    End If
    If Cells(i, 3).Value <> Cells(i + 1, 3).Value Then derL2R = shp.Cells(Rows.Count, 1).End(3).Row: j = 11

prochain:
On Error GoTo -1
Next i
shp.Select
[A1].CurrentRegion.borders.LineStyle = xlNone
End Sub
 

Pièces jointes

  • publipostage_medical.xls
    67 KB · Affichages: 40

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

@zebanx
Pour moi qui dit publipostage, dit forcément Word, non ?
Je ne comprends pas la fonction de ta macro Sub recap_publipostage()
Dans Word, lors du publipostage, on peut poser des filtres on peut utiliser des champs IF.
Tu peux m'expliquer pourquoi tu es réticent à exploiter à 100% le mode publipostage de Word ?

[aparté]
Si jamais, certains soirs de pleine lune, quand il y a rien à la télé, allumez la télé Word ;)
[/aparté]
Le bouton est là (•)

EDITION: Sinon et si j'ai bien compris (après relecture)
Cette macro fait-elle le même job que ta macro?
VB:
Sub Test()
Dim pf As Range
Sheets("recap").Range("O2").FormulaR1C1 = "=AND(RC[-1]=""avis favorable"",RC[-14]=R1C17)"
Sheets("recap").Range("A1:N18").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("O1:O2"), Unique:=False
Set pf = [_FilterDataBase]
Sheets("publi").Rows("2:10000").Clear
pf.Offset(1, 0).Resize(pf.Rows.Count - 1).SpecialCells(12).Copy Sheets("publi").Range("A2")
Range("O2").ClearContents
Sheets("recap").ShowAllData
End Sub[code=vb]
 
Dernière édition:

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa