NEXTIF nom différent du précédent

Résolu
eZula Messages postés 3509 Statut Contributeur -  
eZula Messages postés 3509 Statut Contributeur -
Bonjour,

Dans un tableau immodifiable pour cette manip (excel 2010), il y a une liste de noms comme suivant :


NOM1
NOM1
NOM1
NOM1
NOM1
...
NOM2
NOM2
NOM2
NOM2
...
NOM3
NOM3
NOM3
NOM3...
...
NOMN
NOMN
NOMN
NOMN
...

Dans un publipostage, je souhaiterais que s'affiche ceci :

NOM1
NOM2
NOM3
...
NOMN

N n'étant évidemment pas connu (susceptible de changer régulièrement)
Il s'agit en quelque sorte de supprimer les doublons
J'ai bien tenté d'enregistrer un signet "NomPrec" (nom précédent) avec SET et de combiner avec NEXTIF mais je me casse la figure sur la "boucle" qu'il s'agit de définir afin que ne s'affiche que le résultat attendu. Cela ne marche pas, j'aurais besoin d'un peu d'aide svp.

17 réponses

  1. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Pourquoi ne pas créer sur la liste sans doublons sur Excel (une feuille pour le publipostage) !

    0
  2. eZula Messages postés 3509 Statut Contributeur 392
     
    Bonjour, et merci Le Pingou

    à défaut d'avoir trouvé mieux, j'ai appliqué cette méthode qui, en utilisant la fonction "supprimer les doublons", résoud le problème, mais qui a le double inconvénient de :
    - ne pas avoir compris dans quelle mesure c'était possible avec les opérateurs,
    - devoir réeffectuer la suppression des doublons dans un autre tableau à chaque fois qu'il est modifié.

    Je reste donc ouvert à l'autre solution,

    Thanx
    0
  3. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Oui c'était une idée qui marche, personnellement je préfère la mise en place sur Excel sans devoir manipuler Word.
    Cependant j'aimerais bien réussir avec votre demande mais je n'ai pas assez d'élément correspondant à votre application, peut-être un petit exemple Excel et Word... !

    0
  4. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Après quelques recherches il se trouve que pour le publipostage vous devez avoir une base sans doublon.
    Avec une procédure (macro) il est simple de mettre à jour les données sur une autre feuille utilisé comme base pour le publipostage.

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eZula Messages postés 3509 Statut Contributeur 392
     
    Bonjour,

    Merci pour ton aide!

    Pourtant je me disais avec SET pour stocker une valeur, IF, NEXTIF, éventuellement SKIPIF... tous les ingrédients semblent être là pour procéder à cette comparaison "pas à pas".

    Mes recherches n'ont pas abouti à une réponse précise, juste quelques pistes qui semblaient s'en rapprocher, par exemple http://www.forum-microsoft.org/topic81484.html
    https://support.microsoft.com/fr-fr/help/459169
    0
  7. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci du retour.
    C'est avec plaisir que je vais parcourir les 2 liens proposés.
    C'est dommage que vous ne puissiez pas me mettre un petit exemple Excel et Word...pour voir la structure de votre application ... !

    0
  8. eZula Messages postés 3509 Statut Contributeur 392
     
    Hello,

    je t'ai envoyé un message privé, merci ;)
    0
  9. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Pouvez-vous expliquer ce qu'il doit y avoir pour le document Word dans le tableau de 135 lignes et dont seulement la première à un champ [nom] .... ?
    Cela me parait très étrange comme publipostage...!

    0
  10. eZula Messages postés 3509 Statut Contributeur 392
     
    Bonjour,

    les 135 lignes c'est au pif, au vu du nombre de lignes du tableau. Il faudrait qu'il y ait autant de lignes dans le doc word que de noms uniques dans le tableau
    Cela pourrait s'apparenter à un publipostage, le format des étiquettes étant spécial puisque destiné à être dans les porte-étiquettes de ce type de dossier suspendu
    https://www.metro.fr/produits-equipements/fournitures-de-bureau/dossier-suspendu-corbeille/dossier-suspendu/support-pour-dossiers-suspendus-10-dossiers-ref109995.html

    Et donc il faudrait que dans word, chaque ligne comporte nom, prénom et matricule, et la ligne suivante le nom suivant, prénom suivant, matricule suivant...
    J'ai supprimé mes essais, donc désolé effectivement ce n'est pas très parlant.
    0
  11. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci pour l'information.
    Si le publipostage sert à imprimé des étiquettes pour dossiers-suspendu, il faut connaitre les dimensions de l'étiquette supporté par le porte-étiquette et ensuite créer sur le document Word une matrice correspondante d'une page si impression feuille à feuille.

    0
  12. eZula Messages postés 3509 Statut Contributeur 392
     
    Bon, pour la dimension des étiquettes ce n'est pas un pb, je peux faire une matrice simple de 200 lignes s'il le faut, sans passer par l'option "étiquettes"
    La matrice actuelle convient très bien, et les dimensions sont ajustées

    le tout est d'arriver à caser ces champs de sorte à ce qu'ils se succèdent, sans doublons
    0
  13. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Non et non il suffit de créer une page A4 et c'est tout et ensuite c'est le publipostage qui incrémentera la matrice selon les besoin.
    Je vous fait un exemple fictif y compris la préparation de la liste pour le publipostage.
    Patience.
    Note: si vous avez devant vous un dossier suspendu il est tout simple de mesurer la largeur et la longueur de l'étiquette du porte étiquette .... qu'en pensez-vous....?
    0
  14. eZula Messages postés 3509 Statut Contributeur 392
     
    Bonjour,

    OK OK :) les mesures avaient été prises et sont quasi conformes aux cellules de ce publipostage : 12,7 x 0,64

    Merci et bonne journée
    0
  15. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Je vous transmets votre fichier par MP.
    Principe, une procédure mais à jour la feuille [listpublipos] qui sert comme base de données pour le publipostage. La mise à jour est automatique lors de la fermeture du classeur. Ensuite vous ouvrez le document de publipostage [Publipostage_Eti_dos susp_v0.docx] ...suite selon vos préférences... !

    0
  16. eZula Messages postés 3509 Statut Contributeur 392
     
    Bonjour,

    Merci bp, cela semble bien résoudre le problème.
    Puis-je poster le code sur ce message, afin que d'autres visiteurs puissent en profiter ?

    Encore merci pour cette aide précieuse :)
    0
  17. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Mais oui sans problème.
    Bon dimanche.

    0
  18. eZula Messages postés 3509 Statut Contributeur 392
     
    Bonjour,

    Voici donc le code de Le Pingou, sachant que les cellules Nom et Prénom (dont il faut éliminer les doublons) se trouvent respectivement en colonnes O et P dans le tableau initial, et la feuille [listpublipos] à droite de l'onglet du tableau :

    Sub listepourpublipostage()
    Dim listsd() As String, li As Integer
    Set sh = Sheets("Tableau de suivi")
    Set shlp = Sheets("listpublipos")
    Set ledico = CreateObject("Scripting.Dictionary")
    deli = sh.Cells(Rows.Count, 1).End(xlUp).Row
    For c = 2 To deli ' In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    If ledico.exists(sh.Cells(c, 15) & sh.Cells(c, 16)) Then
    ' MsgBox "oui"
    Else
    ' MsgBox "Non"
    ledico(sh.Cells(c, 15) & sh.Cells(c, 16)) = ""
    ReDim Preserve listsd(0 To 2, 0 To li)
    listsd(0, li) = sh.Cells(c, 15).Value
    listsd(1, li) = sh.Cells(c, 16).Value
    listsd(2, li) = sh.Cells(c, 13).Value
    li = li + 1
    End If
    Next c
    With shlp
    deli = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    .Range("a2:C" & deli).ClearContents
    .Range("a2:c" & UBound(listsd, 2)) = Application.Transpose(listsd)
    .Columns("A:D").Sort Key1:=.Columns(1), Order1:=xlAscending, Header:=xlYes
    End With
    Set sh = Nothing
    Set shlp = Nothing
    Set ledico = Nothing
    ActiveWorkbook.Save
    End Sub

    Encore un grand merci et bonne continuation :)
    0