Concaténer sur 3 conditions

Bonjour le forum

J'aurais bien besoin d'un peu d'aide si possible.

J'essaie d'extraire des adresses mails situées dans des cellules différentes, en la concaténant par des points virgules. Jusque là, c'est connu.
Mais il y a des conditions : la prise en compte du mail dépend de 2 conditions, et l'extraction doit se réaliser dans une autre feuille sans doublons, rien que ça :)

J'ai mis les explications dans le fichier : https://www.cjoint.com/c/GAEqIRLqhuZ

Par avance merci, c'est très important et facilitera la vie de beaucoup de gens.

7 réponses

  1. Contributeur
    Bonjour

    on pourrait "ventuellemnt chercher par formule, mais avec une base de données de 450000 adresses, c'est du temps de perdu...
    surtout que vous ne dites pas:
    • combien de 1 il y aurait éventuellement à prendre en compte.
    • comment vont être placés ces 1 dans une telle base

    Moi, je ne me lance pas, mais ces renseignements pourraient je pense, servir à ceux qui pourront vous aider

    Bonne chance
    crdlmnt
    1. Bonjour Vaucluse

      En fait il n'y a pas 450000 adresses, mais 450000 lignes pouvant en contenir.

      Je viens de faire les comptes avec des formules :
      Il y a environ 108000 adresses mail dans ces lignes, dont 13000 comprennent un "1".
      Ces 1 sont placés exactement comme dans le fichier exemple, en DONNEES!Qx

      Je sais que ça représente beaucoup de données, d'où l'intérêt de cette fonction.
      Je pédale avec ça depuis vendredi, j'ai essayé des tas de macros dans tous les sens, sans résultat probant : des fonctions personnalisées, des CONCATENER, des essais d'extractions, des RECHERCHEV, j'avoue que je me décourage, c'est la raison pour laquelle je reviens vers CCM.

      Je sais que vous avez le niveau, mais je vous comprends, vous m'avez souvent aidé.
      Je relance donc le sujet, merci d'avance ...
      1. Contributeur
        Alors voila ce que je peux vous proposer. mais je ne garantis rien par rapport à vos données
        https://www.cjoint.com/c/GAErVi3oroN
        Le système utilise la colonne S de la base de données, colonne qui peut être masquée ou sur une autre feuille
        la formule donne la possibilité de cumuler 4 adresses, vous pouvez rajouter des items si ça ne suffit pas
        item: &SIERREUR(&(INDEX..........;"")
        mais j'ai quand même un gros doute quant au fonctionnement dans votre périmètre
        crdlmnt
      2. Bonjour Vaucluse
        J'ai pu adapter votre méthode à mon fichier.
        J'ai mis du temps à comprendre comment vous l'aviez construit.
        Malheureusement même si elle est correcte (elle donne bien les bons résultats), lorsque je l'applique aux 500000 lignes du tableau, j'obtiens un message d'erreur relatif à la quantité de mémoire dès que j'étends la formule en colonne S.
        J'y arrive quand-même en recopiant les formules par morceaux avec des macros.
        Ensuite, curieusement l'indexation est moins gourmande même si la formule est plus complexe. Visiblement, c'est la comparaison des lignes qui demande beaucoup de puissance.
        Je comprends pourquoi vous aviez des doutes.
        Cependant, votre approche est intéressante et vous m'avez fait progresser, je vous en remercie beaucoup, c'est très important pour moi.

        Encore merci pour le temps passé.

        Cordialement
    2. Contributeur
      Bonsoir à tous,

      Pour créer une fonction standard qui regroupe de façon particulière les adresses, ce n'est pas très simple me semble-t-il, sinon tu l'aurais trouvé rapidement.

      Je te propose donc une fonction personnalisée à copier dans un module standard qui devrait te regrouper tes adresses sans double. J'ai même donné la possibilité de sélectionner une autre valeur que 1 (on ne sait jamais) : il suffit de la rajouter en fin de formule et tu peux alors sélectionner ton "chien@orange.fr" avec 0 avec
      =conc(B6;DONNEES!A:A;DONNEES!Q:Q;DONNEES!M:M;0)


      https://www.cjoint.com/c/GAEvfXfZcMl
      1. Vous êtes géniaux tous les deux !
        Je viens de voir les messages en rentrant du boulot, je teste et reteste ce soir et demain soir, et je vous dis.

        Vous n'avez pas la même approche tous les deux, c'est intéressant.
        Le moindre essai prend plusieurs minutes.

        Mille mercis, à plus :) :) :)
        1. Contributeur
          Bonjour tout le monde,

          Si Touroul est d'accord, j'essaie une solution VBA

          dans l'attente
          1. Bonjour Michel

            La solution de GBinforme fonctionne, je suis en train de terminer les tests avant de faire un reply.
            Cependant, l'utilisation processeurs est maximale, donc c'est comme vous le sentez ...
            Le sujet est difficile.
            A plus
            1. Contributeur
              OUI ou NON ?

              Vu la réponse "je ne me mouille pas ",c'est donc NON

              Dommage, c'était presque fini (essai globaux à faire)

              bonne continuation
            2. Contributeur
              Bonjour Michel,

              Tu n'as pas choisis la bonne réponse ;-)
              Je suis très intéressé par ta solution qui a de bonnes raisons d'être pertinente alors je pense que tu peux la donner et touroul pourras la tester sur son gros classeur.

              Bonne journée à toi.
            3. Bonjour Michel

              +1 avec GB, il est intéressant de connaître ton point de vue et ta façon d'aborder ce problème.
              Alors c'est OUI 3 fois, merci.
          2. Contributeur
            bonjour,
            Avant de présenter une réponse VBA, compte tenu du nombre d'adresses, cela ressemble fort à des envois massifs de publicité ou pire (...) qui nous polluent nos boites mails (j'ai déjà été piraté avec demande d'argent en "dépannage" de la part d'une "amie" présente dans le répertoire de ma boite mail)

            Avant d'envoyer le code, j'aimerais avoir par message privé la réponse de la CNIL pour le but de cet envoi groupé ; Une vérification sera effectuée auprès de la CNIL.

             Michel
            1. Contributeur
              Salut Michel,

              Tu as raison d'avoir des doutes, mais je ne pense pas qu'ils soient fondés car c'est une utilisation faite avec des adresses concernées par l'activité et si j'ai bien compris, le but est de pouvoir grouper le mail adressé pour les membres autorisés (code 1) d'une entité.
              à partir du moment où tu fait partie d'un groupe (comme CCM par exemple) je ne suis pas sûr que CCM ait besoin d'un agrément pour envoyer des courriels à ses membres.

              Bonne journée à toi.
            2. Contributeur
              @gbinformebonjour Gb,

              je ne suis pas sûr que CCM ait besoin d'un agrément pour envoyer des courriels à ses membres.

              d'accord,nous sommes inscrits à CCM donc, CCM peut nous envoyer de mails

              maintenant, dans le cas de Touroul,, on se sait pas.

              Si tu veux voir le code , je te l'enverrais par MP ...
            3. Contributeur
              Bonjour Michel,

              on se sait pas
              c'est vrai que tu peux avoir un doute mais mon exemple me parait juste.
              je te l'enverrais par MP ...
              Si tu veux car je suppose que tu as trouvé un bon codage et c'est toujours bien d'apprendre de bonnes pratiques.

              Bonne journée à toi.
            4. Bonsoir tous les 2.

              Michel je ne suis pas un spammeur, je suis technicien.
              Le fichier sert à envoyer des alertes de réacto-vigilance à des clients dont la base de données est constituée par les clients eux-mêmes.

              J'ai du mal à comprendre votre réaction.
              J'ai 30 années d'informatique derrière moi, croyez bien que j'utiliserai d'autres applis underground si je voulais faire du mailbombing, capables d'envoyer des trains de 500 000 mails en 15 minutes, mais croyez-moi si vous voulez ce n'est pas mon genre.
              GB et moi attendons votre code.

              Bonne soirée.
            5. Contributeur
              @touroulBonjour,

              J'ai 30 années d'informatique derrière moi, croyez ....

              Et après 30 ans d'informatique, tu es incapable d'utiliser Excel et d'écrire en Basic VBA, langage de Débutant ?

              l'exemple indiqué est faux (client 99) ou si ça l'est il y une ambiguïté dans ta demande ;
              la prise en compte du mail dépend de 2 conditions les quelles ? à moins d'avoir mal lu je n'ai noté que la condition du 1 colonne Q et donc 99 devrait apparaitre.

              tu indiques 450 000 Lignes , d'accord, mais pas le nombre maxi de clients( limite de prog à 65536 pour la fonction transpose)

              Tu envies que quelques lignes vite fait, mal fait, ce qui rend l'évaluation de durée impossible et empêche le choix dans les algos (il y a 2 possibilités)...

              Comme en plus d'avoir choper un -1 et que la solution de Gbinforme fonctionne...