OVH Cloud OVH Cloud

Cultivons les champs !

12 réponses
Avatar
Petit Denis
Coucou

Dans un publipostage, est-il possible d'écrire un texte dans une cellule
d'un tableau en fonction du premier caractère alphabétique provenant d'un
champ "NOM" ?
Quelques infos :
objectif : créer des fiches pour un annuaire personel
version office 2000 à jour.
tableau excel contenant les entrées "NOM", "Prénom"...
page de fusion (catalogue) word avec une première ligne d'un tableau de 8
cases.
la première case doit contenir les lettres ABC si le premier caractère du
champ Nom est un A, une B ou un C. D'où l'idée d'un champ {IF...}

--
Petit Denis

10 réponses

1 2
Avatar
Anacoluthe
Bonjour Petit Denis !

'Petit Denis' nous a écrit ...
Dans un publipostage, est-il possible d'écrire un texte dans une cellule
d'un tableau en fonction du premier caractère alphabétique provenant
d'un champ "NOM" ?
Quelques infos :
objectif : créer des fiches pour un annuaire personel
version office 2000 à jour.
tableau excel contenant les entrées "NOM", "Prénom"...
page de fusion (catalogue) word avec une première ligne d'un tableau de
8 cases.
la première case doit contenir les lettres ABC si le premier caractère
du champ Nom est un A, une B ou un C. D'où l'idée d'un champ {IF...}


Le mieux est de prévoir un champ supplémentaire dans ton tableau Excel
pour traiter simplement cette donnée dans le publipostage Word !!!

Maintenant si tu veux /absolument/ faire ça dans Word (?!?), il faut
savoir qu'il n'y a pas de fonction d'extraction de chaînes dans les
champs Word. Il faut donc utiliser les fonctions de comparaison, ce qui
va te donner des champs IF imbriqués épouvantables du genre :
{ IF { MERGEFIELD Nom } < "D" "ABC" "
{ IF { MERGEFIELD Nom } < "G" "DEF" "..." }" } }
Si tu classes ton ordre alphabétique 3 par 3 ça va encore avec
les 9 niveaux d'imbrications des champs. Sinon il faut passer par
des signets et traiter en plusieurs champs disjoints.

C'était juste histoire de dire que c'est /possible/ dans Word
mais pour mieux t'en dissuder ! :-D )))

A+ et bonne fin de semaine

Anacoluthe
« Bienheureux les travailleurs des champs. »
- VIRGILE

Avatar
Petit Denis
Rebonsoir
Anacoluthe wrote:
Bonjour Petit Denis !

Le mieux est de prévoir un champ supplémentaire dans ton tableau Excel
pour traiter simplement cette donnée dans le publipostage Word !!!


Je m'orientais vers cette solution plus simple...


Maintenant si tu veux /absolument/ faire ça dans Word (?!?), il faut
savoir qu'il n'y a pas de fonction d'extraction de chaînes dans les
champs Word. Il faut donc utiliser les fonctions de comparaison, ce
qui va te donner des champs IF imbriqués épouvantables du genre :
{ IF { MERGEFIELD Nom } < "D" "ABC" "
{ IF { MERGEFIELD Nom } < "G" "DEF" "..." }" } }


Je vais quand même tester cela puisque je reste sur 8 niveaux (voir les
touches du téléphone pour les regoupements !)
Ça me rappelle un calcul sous excel pour afficher la mention obtenue au bac
blanc par nos chères têtes blondes : plein de si imbriqués = jolie formule,
faut pas se gourrer)

Si tu classes ton ordre alphabétique 3 par 3 ça va encore avec
les 9 niveaux d'imbrications des champs. Sinon il faut passer par
des signets et traiter en plusieurs champs disjoints.

C'était juste histoire de dire que c'est /possible/ dans Word
mais pour mieux t'en dissuder ! :-D )))


Je teste, et je raconte mes errements...

A+ et bonne fin de semaine


Merci

Anacoluthe
« Bienheureux les travailleurs des champs. »
- VIRGILE


--
Petit Denis

Avatar
Anacoluthe
Bonjour !

'Petit Denis' nous a écrit ...
{ IF { MERGEFIELD Nom } < "D" "ABC" "
{ IF { MERGEFIELD Nom } < "G" "DEF" "..." }" } }


Je vais quand même tester cela


Naaaaaaaaaaaannnnnnnn ! C'est tellement plus simple dans EXCEL !!!!!!
Tu ajoutes dans ta feuille XL une colonne disons 'Onglet'
Tu places dans la première valeur de cette colonne une formule
=ONGLET(A2) (la colonne A contient le NOM par exemple)
Tu copies-glisses cette formule sur toute la colonne
et voilà tu utilises le champ Onglet dans ton publipostage
sans te casser la tête dans Word qui est nul en calculs.

Quant à la fonction ONGLET() ci-dessus, pas besoin
d'être un crack d'Excel. En voici une version bricolée
vite fait (tu dis rien aux Excellents, ils vont rire) :

Public Function ONGLET(C As String) As String
D = Int((Asc(UCase(Left(LTrim(C), 1))) - 65) / 3) * 3 + 1
ONGLET = Mid("ABCDEFGHIJKLMNOPQRSTUVWXYZ ", D, 3)
End Function

Bon dimanche !

Anacoluthe
« Si tout ici-bas était excellent,
il n’y aurait plus rien d’excellent »
- Denis DIDEROT


Avatar
Petit Denis
Rebonjour
Anacoluthe wrote:
Bonjour !

'Petit Denis' nous a écrit ...
{ IF { MERGEFIELD Nom } < "D" "ABC" "
{ IF { MERGEFIELD Nom } < "G" "DEF" "..." }" } }


Je vais quand même tester cela


Naaaaaaaaaaaannnnnnnn ! C'est tellement plus simple dans EXCEL !!!!!!
Tu ajoutes dans ta feuille XL une colonne disons 'Onglet'
Tu places dans la première valeur de cette colonne une formule
=ONGLET(A2) (la colonne A contient le NOM par exemple)
Tu copies-glisses cette formule sur toute la colonne
et voilà tu utilises le champ Onglet dans ton publipostage
sans te casser la tête dans Word qui est nul en calculs.

Quant à la fonction ONGLET() ci-dessus, pas besoin
d'être un crack d'Excel. En voici une version bricolée
vite fait (tu dis rien aux Excellents, ils vont rire) :

Public Function ONGLET(C As String) As String
D = Int((Asc(UCase(Left(LTrim(C), 1))) - 65) / 3) * 3 + 1
ONGLET = Mid("ABCDEFGHIJKLMNOPQRSTUVWXYZ ", D, 3)
End Function



*Voie de recherche A* dans excel

Bon ça j'ai réussi après quelques errements... (trouver que A = 65 et Z = 90
notamment !)
Mais cela fait un tri systématique avec 3 lettres, or je souhaiterais
retrouver le classement des touches téléphoniques :
touche 2 : ABC
touche 3 : DEF
touche 4 : GHI
touche 5 : JKL
touche 6 : MNO
touche 7 : PQRS (4 lettres)
touche 8 : TUV
touche 9 : WXYZ
Et ensuite, je remplis un des 8 cellules avec les 3 ou 4 lettres et les
autres ne contiennent rien.


J'ai testé cela :
Public Function ONGLET(C As String) As String
D = Int((Asc(UCase(Left(LTrim(C), 1))) - 65) / 3) * 3 + 1
ONGLET = Mid("ABC DEF GHI JKL MNO PQRSTUV WXYZ", D, 4)
End Function
Pour faire des groupes de 4 caractères (3 lettres + espaces ou 4 lettres)
mais les espaces ne sont correctement gérés.


*Voie de recherche D* dans word

La première case et la dernière fonctionnent bien avec les champs suivants :
{ If { Mergefield NOM } <"D" "ABC" ""} pour la première cellule
{ If { Mergefield NOM } >="W" "WXYZ" ""} pour la dernière cellule

Je bute sur les 6 autres :
Le champ suivant :
{=and ({If {Mergefield NOM}>="D"} , {If {Mergefield NOM}<"F") "DEF" ""}
me renvoie une erreur de syntaxe (j'ai remplacé /and/ par /et/ mais marche
pas non plus)
En fait le travail semble plus simple puisque chaque cellule ne peut prendre
que deux valeurs :
"Lettres" ou "rien", il ne m'est donc pas nécessaire d'imbriquer les if les
uns dans les autres.

Le résultat après impression et découpage va ressembler aux pages d'un
répertoire avec des onglets (sans échalottes lol )

--
Petit Denis "Jeune Champeur"



Avatar
Anacoluthe
Bonjour !

'Petit Denis' nous a écrit ...
touche 7 : PQRS (4 lettres)
touche 9 : WXYZ


Boudiou mais c'est vicieux ça ! :-))))
Bon je modifie la fonction ONGLET (toujours bricolée) :

Public Function ONGLET(C As String) As String
R = "ABC DEF GHI JKL MNO PQRSTUV WXYZ"
D = Int((InStr(R, UCase(Left(LTrim(C), 1))) - 1) / 4) * 4 + 1
ONGLET = RTrim(Mid(R, D, 4))
End Function

c'est mieux comme ça ?

{ If { Mergefield NOM } <"D" "ABC" ""} pour la première cellule
{ If { Mergefield NOM } >="W" "WXYZ" ""} pour la dernière cellule
Je bute sur les 6 autres
il ne m'est donc pas nécessaire d'imbriquer les if


Soit tu imbriques les IF dans les "" du 'sinon' du précédent
Soit effectivement tu utilises des IF les uns à la suite des autres
et c'est encore pire comme syntaxe :
{ IF { MERGEFIELD Nom } < "D" "ABC" }
{ IF { =AND( { COMPARE "{ MERGEFIELD Nom }" > "D" } ; { COMPARE "{
MERGEFIELD Nom }" < "G" ) } ) } = 1 "DEF" }
...
{ IF { =AND( { COMPARE "{ MERGEFIELD Nom }" > "P" } ; { COMPARE "{
MERGEFIELD Nom }" < "T" ) } ) } = 1 "PQRS" }
...
{ IF { MERGEFIELD Nom } > "W" "WXYZ" }

Non, décidément Word n'est pas fait pour ça !
Tu prends quoi toi pour les migraines ? :-D )))

Anacoluthe
« Si tout ici-bas était excellent,
il n’y aurait plus rien d’excellent »
- Denis DIDEROT

Avatar
Petit Denis
Bonsoir
Anacoluthe wrote:
Bonjour !

'Petit Denis' nous a écrit ...
touche 7 : PQRS (4 lettres)
touche *8* : WXYZ


Boudiou mais c'est vicieux ça ! :-))))


Y'a des fois on s'demande !!!

Bon je modifie la fonction ONGLET (toujours bricolée) :

Public Function ONGLET(C As String) As String
R = "ABC DEF GHI JKL MNO PQRSTUV WXYZ"
D = Int((InStr(R, UCase(Left(LTrim(C), 1))) - 1) / 4) * 4 + 1
ONGLET = RTrim(Mid(R, D, 4))
End Function

c'est mieux comme ça ?


Je n'ai pas pu tester, il m'a renvoyé une erreur et après plusieurs heures à
tester tout cela, j'ai lâché vers 4 h du mat...

{ If { Mergefield NOM } <"D" "ABC" ""} pour la première cellule
{ If { Mergefield NOM } >="W" "WXYZ" ""} pour la dernière cellule
Je bute sur les 6 autres
il ne m'est donc pas nécessaire d'imbriquer les if


Soit tu imbriques les IF dans les "" du 'sinon' du précédent
Soit effectivement tu utilises des IF les uns à la suite des autres
et c'est encore pire comme syntaxe :
{ IF { MERGEFIELD Nom } < "D" "ABC" }
{ IF { =AND( { COMPARE "{ MERGEFIELD Nom }" > "D" } ; { COMPARE "{
MERGEFIELD Nom }" < "G" ) } ) } = 1 "DEF" }
...
{ IF { =AND( { COMPARE "{ MERGEFIELD Nom }" > "P" } ; { COMPARE "{
MERGEFIELD Nom }" < "T" ) } ) } = 1 "PQRS" }
...
{ IF { MERGEFIELD Nom } > "W" "WXYZ" }


Là, marche pas non plus : erreur op conditionnel inconnu (précisions, j'ai
déjà remplacé ; par , )
Ça ne marche que pour les cas simples de la première et de la huitième
cellule.

Non, décidément Word n'est pas fait pour ça !


Con vaincu lol

Tu prends quoi toi pour les migraines ? :-D )))


Tu ne vois pas passer des gros camions de paracétamol (38 tonnes) : ils
viennent me livrer directement re lol
En tout cas merci, de t'être penché sur ce sujet qui ne présentait aucun
intérêt hormis celui de me faire cultiver les champs...
Je vais utiliser une méthode manuelle (puisque je découpe après !).

--
Petit Denis Champé


Avatar
Geo
Bonjour Petit Denis


En tout cas merci, de t'être penché sur ce sujet qui ne présentait aucun
intérêt hormis celui de me faire cultiver les champs...


P'tet qu' Anacoluthe a oublié de te dire : pour que ça pousse il faut
arroser.
En Alsace ils ne connaissent pas la sécheresse.

--

A+

Avatar
Anacoluthe
Bonjour !

'Petit Denis' nous a écrit ...
Tu ne vois pas passer des gros camions de paracétamol (38 tonnes) : ils
viennent me livrer directement re lol


Alors j'ose même plus te dire de persévérer (fonction XL et champs WD
sont ok chez moi): garde encore un peu de foie pour le pastis ;-)
A+

Anacoluthe
« Bienheureux les travailleurs des champs. »
- VIRGILE

Avatar
JièL Goubert
Bonjoir(c) Anacoluthe

Le 14/08/2005 19:03 vous avez écrit ceci :
'Petit Denis' nous a écrit ...

touche 7 : PQRS (4 lettres)
touche 9 : WXYZ



Boudiou mais c'est vicieux ça ! :-))))
Bon je modifie la fonction ONGLET (toujours bricolée) :

Public Function ONGLET(C As String) As String
R = "ABC DEF GHI JKL MNO PQRSTUV WXYZ"
D = Int((InStr(R, UCase(Left(LTrim(C), 1))) - 1) / 4) * 4 + 1
ONGLET = RTrim(Mid(R, D, 4))
End Function


une solution antisuperfétatoire
=INDEX({"ABC";"DEF";"GHY";"JKL";"MNO";"PQRS";"TUV";"WXYZ"};EQUIV(A1;{2;3;4;5;6;7;8;9};0))
;-))))))))

oui, j'avais du temps à perdre aujourd'hui ;-))))))

JièL Très z'ami


Avatar
Anacoluthe
Hello JièL !

'JièL Goubert' nous a écrit ...
une solution antisuperfétatoire
=INDEX({"ABC";"DEF";"GHY";"JKL";"MNO";"PQRS";"TUV";"WXYZ"};EQUIV(A1;{2;3;4;5;6;7;8;9};0))


Euh t'es sûr là ? en A1 c'est un NOM en lettres je crois. J'aurais dit
=INDEX({"ABC";"DEF";"GHI";"JKL";"MNO";"PQRS";"TUV";"WXYZ"};EQUIV(A1;{"A";"D";"G";"J";"M";"P";"T";"W"}))
On va sur le MPFE pour régler ça à la régulière ? :-D )))

A++
Anacoluthe
« Si tout ici-bas était excellent,
il n’y aurait plus rien d’excellent »
- Denis DIDEROT

1 2