Concaténer plusieurs feuilles sur une seule par dénominateur commun

erostrate103

XLDnaute Nouveau
Bonjour,

Mon titre n’est peut être pas des plus explicite, mais j’admets avoir du mal à expliquer mon problème.
Je dois stipuler que ma connaissance de VBA est inférieure ou égale à 0 et celle d’Excel se limite à des fonctions de bases (bref ce n’est pas mon truc !!!)

Suite à une extraction difficile et douloureuse d’un public Folder Exchange, je me retrouve avec mes données de membres de différents clubs répartis sur plusieurs feuilles.

La première feuille nommée « tout »comporte les noms d’adhérents, leur adresse et toutes les informations utiles SAUF les « options choisies »
Après, chaque feuille nommée par le nom du club, se retrouve seulement les sociétés / noms / prénoms de ces personnes
Une feuille par option d’adhésion, exemple : feuille club Foot comporte tous les membres du club de foot, idem pour club Tennis, etc…
Mon but est de TOUT regrouper sur une seule et unique feuille (ici nommée Cible) afin de pouvoir trier plus efficacement en vue d’un export, un jour, dans une véritable base de données type CRM.
Ci-joint un fichier d’exemple.

Bien sur, la feuille cible est celle à "remplir automatiquement" suivant le résultat de la recherche des différentes feuilles.

D’avance merci pour votre aide
 

Pièces jointes

  • exemple.xls
    19 KB · Affichages: 66
  • exemple.xls
    19 KB · Affichages: 64
  • exemple.xls
    19 KB · Affichages: 71

Yaloo

XLDnaute Barbatruc
Re : Concaténer plusieurs feuilles sur une seule par dénominateur commun

Bonsoir erostrate103 et bienvenu sur XLD, le forum,

Voici ton fichier modifié, voir le fichier joint.

A te relire

Martial
 

Pièces jointes

  • erostrate103.xls
    41 KB · Affichages: 91

erostrate103

XLDnaute Nouveau
Re : Concaténer plusieurs feuilles sur une seule par dénominateur commun

:D Whoauw !!! Quelle rapidité !Merci beaucoup !!!!!
PAr contre, je suis casse pied mais j'aime comprendre alors je vais essayer de déchiffrer ce code obscur et barbare qu'est le VBS ...
C'est bien cette partie qui s'occupe de regrouper par nom ?
Car je vais devoir l'adapter sur mon fichier de prod (6500 contacts, glups...)

'Pour toutes les feuilles sauf "recap" => Quelle est cette feuille "recap" ?
If Not ws.Name Like "Cible" And Not ws.Name Like "Tout" Then
For i = 2 To DerL
Cells(1, Col) = ws.Name
If Application.CountIf(ws.Columns(2), Cells(i, 2)) <> 0 Then
Cells(i, Col) = "Oui"
Else
Cells(i, Col) = "Non"
End If
Next
Col = Col + 1
End If

Pour le reste du code, demain direction pharmacie, 5 boites de doliprane et la journée sur Google :rolleyes:

Encore MERCI !!!!!
 

Yaloo

XLDnaute Barbatruc
Re : Concaténer plusieurs feuilles sur une seule par dénominateur commun

Re,

Excuses-moi mais souvent je reprend des codes déjà réalisés et je n'ai pas modifié cette partie.

Voici le code, avec les indications pour chaque ligne.

VB:
Sub Copie()
Dim ws As Worksheet
Dim Col&, i&, DerL&, NomWs$
Application.ScreenUpdating = False
'Efface toutes les données sauf ligne 1 --> décalage d'une ligne(Offest(1,0)
Feuil1.Cells(1, 1).CurrentRegion.Clear
Feuil2.Cells(1, 1).CurrentRegion.Copy Feuil1.Cells(1, 1)
'Cherche la dernière colonne utilisée de la ligne 1
'On ajoute 1 pour avoir la première colonne vide
Col = Feuil1.Cells(1, Columns.Count).End(xlToLeft).Column + 1
DerL = Cells(Rows.Count, 1).End(xlUp).Row

For Each ws In Worksheets
'Pour toutes les feuilles sauf "Cible" et "Tout"
  If Not ws.Name Like "Cible" And Not ws.Name Like "Tout" Then
    'Pour toutes les lignes de 2 jusqu'à la dernière ligne
    For i = 2 To DerL
    'En ligne 1, on rentre le nom de l'onglet
    Cells(1, Col) = ws.Name
      'Si l'on trouve le nom dans la deuxième colonne
      If Application.CountIf(ws.Columns(2), Cells(i, 2)) <> 0 Then
        'Alors on écrit "Oui" dans la ligne i et dans la colonne Col
        Cells(i, Col) = "Oui"
      Else
        'Sinon on écrit "Non"
        Cells(i, Col) = "Non"
      End If
    'Ligne suivante
    Next
  'On change de colonne en ajoutant 1
  Col = Col + 1
  End If
'On passe à l'onglet suivant
Next
End Sub

A+

Martial
 

erostrate103

XLDnaute Nouveau
Re : Concaténer plusieurs feuilles sur une seule par dénominateur commun

Bon ben c'est plus compliqué que ca en a l'air.
Je met à jour le fichier mais sans data (un tout petit peu confidentiel.....)
L'autre HIC : j'ai des homonymes..... pensez vous que cela peut se gérer automatiquement (ou à la main, ce ne me dérange pas trop tant que le gros est fait)
 

Pièces jointes

  • CONTACTS V3-erostrate103.xlsx
    93.9 KB · Affichages: 49

Yaloo

XLDnaute Barbatruc
Re : Concaténer plusieurs feuilles sur une seule par dénominateur commun

Re,

Bon, un essai avec le fichier ci-joint.

Je n'ai fait que quelques tests, à toi de compléter.

A te relire

Martial

PS : Je suis reparti sur le premier fichier, à toi de l'adapter à ton vrai fichier. Si besoin, n'hésite pas. J'ai essayé de te décrire chaque ligne.
 

Pièces jointes

  • erostrate V1.xls
    46.5 KB · Affichages: 52

erostrate103

XLDnaute Nouveau
Re : Concaténer plusieurs feuilles sur une seule par dénominateur commun

Bon alors, j'ai repris la macro, compris un peu son fonctionnement (c'est elle qui créé les colonnes avec les noms des onglets)
Par contre, là il ne me copie bien que un seul onglet...

Aurais je zappé qque chose ?
 

Pièces jointes

  • CONTACTS V4-erostrate103.xlsm
    105.3 KB · Affichages: 40
  • CONTACTS V4-erostrate103.xlsm
    105.3 KB · Affichages: 40
  • CONTACTS V4-erostrate103.xlsm
    105.3 KB · Affichages: 34

Yaloo

XLDnaute Barbatruc
Re : Concaténer plusieurs feuilles sur une seule par dénominateur commun

Bonjour erostrate, le forum,

Voici ton fichier, tu avais 2 erreurs :

1 - Tu avais changé le codename de la feuil2.
2 - Tu avais décalé les colonnes de nom et prénoms.

C'est modifié

A te relire

Martial
 

Pièces jointes

  • CONTACTS V4-erostrate103.xlsm
    111.4 KB · Affichages: 51
  • CONTACTS V4-erostrate103.xlsm
    111.4 KB · Affichages: 51
  • CONTACTS V4-erostrate103.xlsm
    111.4 KB · Affichages: 47

erostrate103

XLDnaute Nouveau
Re : Concaténer plusieurs feuilles sur une seule par dénominateur commun

Alors comme promis, petite news....

Le script a mit prêt de 4 heures à mouliner.
J'avais 6205 contacts, il n'en a récupéré que 4150 :confused:

Même si j'élimine les doublons via la fonction "éliminer les doublons" de excel, il devrait m'en rester 5479

Bizarre ce delta, non ?

Puis je me permettre de t'envoyer le fichier source via mp ou mail ?

merci
 

Yaloo

XLDnaute Barbatruc
Re : Concaténer plusieurs feuilles sur une seule par dénominateur commun

Re,

J'ai bien reçu ton fichier.

Si tu n'as pas toutes les lignes, c'est qu'à la ligne 4154, tu as une ligne vide et comme on utilise :
Feuil2.Cells(1, 1).CurrentRegion.Copy Feuil1.Cells(1, 1)
Cela ne prend que les lignes faisant parties du tableau, comme il y a une ligne vide, la suite n'est pas prise dans le tableau.
Dans tous tes onglets tu as le même problème. Donc j'ai créé une macro pour supprimer les lignes vides.

En premier lieu, lances la macro Sup_Lig_Vide dans le module 4

Dans "Tout" tu peux aussi supprimer la ligne 4155 où les données ne sont pas cohérentes avec le reste. A mon avis il faudra regarder à tous tes onglets, car tu as des adresses ou des N° de tél dans la première colonne.

Dans l'onglet "Electro FR" une fois Sup_Lig_Vide passée, tu supprimes la ligne 3394, car tu as une donnée avec erreur (qui bloque les autres macros).

Chez moi, je n'ai testé qu'avec la feuille Club ViteCC, cela n'a pris que 52 secondes. Je l'ai modifié pour que tu testes chez toi (macro "Copie" dans le fichier joint dans le module 1)
Toujours dans la macro "Copie", si l'on n'écrit pas "Non" dans la cellule le temps passe à 36 secondes.
Ensuite, j'ai déplacé l'écriture du nom de la feuille dans la dernière colonne. Je l'avais mis trop tard dans la macro, résultat il était réécrit à chaque boucle. On arrive maintenant à 18 secondes. On a divisé par 3.

Deuxième solution, passer par les Tableaux :

J'ai fait une autre macro avec des tableaux, cela va un peu plus vite (macro "CopieTb" dans le fichier ci-dessous dans le module 2)
Sans le "Non" et avec le nom de colonne déplacé, on arrive à moins d'1 seconde.

Donc, essaies "CopieTb", pour le moment, ce n'est que sur le premier onglet de Club.

Je t'ai mis une troisième macro (macro "CopieTbTout" dans le fichier ci-dessous dans le module 3), avec l'ensemble des onglets. Chez moi, le temps est de 42 secondes.

A te relire

Martial

PS : Pour éviter les doublons, j'ai inclus le nom de la société. Mais je ne sais pas si c'est une bonne chose, si la personne a été indiquée sans sa société ....

PS1 : Si tu n'y arrive pas, dis le moi et je te renvoie ton fichier modifié.
 

Pièces jointes

  • CONTACTS V4.11 sans données.xlsm
    353.7 KB · Affichages: 34

Discussions similaires

Réponses
3
Affichages
1 K
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg