Comparer 2 tableaux et importer données si différentes

Calvus

XLDnaute Barbatruc
Bonjour,

Après 2 jours de galère, je me tourne vers vous.

J'aimerais importer d'un classeur (Prosp) vers un autre (Cli) les données de la feuille Pro, à condition qu'elles n'y soient pas déjà, et que la ligne soit réellement différente.
Exemple : une société peut avoir plusieurs entrées (Destour)

J'ai effacé touts les codes, toutes mes tentatives ayant échoué.

Merci
 

Fichiers joints

Calvus

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Bonjour Dranreb,

Je te remercie....mais..... je ne comprends pas un mot du code....
Est ce la macro Fusion que je dois modifier pour adapter à mon cas ?

Merci
 

Dranreb

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Oui.
Etudie aussi les commentaires explicatifs en tête des Function GroupOrg et TableUnique du module MClassement,
PlgUti du module Utilit, et le petit module de classe SsGroup.
 

Calvus

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Bonsoir,

Je reviens avec ce fil, ne réussissant pas à adapter.
Si quelqu'un peut m'aider à le faire.... Merci

@Dranreb : Je suis vraiment largué par ton code. J'aimerais bien essayer d'adapter, mais je ne sais même pas par où commencer. C'est trop illisible pour mon faible niveau.

Merci
 

Dranreb

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Bonsoir.
Entendons nous bien: il n'y a aucune adaptation d'aucune sorte à apporter aux modules de service.
Toute la mise en organisation des données pour ce qu'on veut en tirer est entièrement concentrée dans la seule la façon d'appeler la fonction GroupOrg.
Et ce n'est quand même pas compliqué: Le 1er argument c'est le tableau ou la plage dont on part, puis les autres le ou les numéros de colonnes sur lesquels doivent s'opérer les regroupements.
Dans le cas d'une fusion ou d'une comparaison de 2 sources on utilise les fonctions de concaténation de tableaux du module MClassement pour constituer la source globale. Elles ajoutent une colonne supplémentaire 0, devant, qui indique de quelle source de départ provient chaque ligne de détail.
C'est nécessaire puisque dans le parcourt on les obtient par ordre de l'(des) argument(s) trouvé(s) dans les deux sources. Plus besoin d'aller y voir: on a tous ce qui concerne un même truc d'où qu'il vienne et on sait en parcourant le détail si on l'a dans la 1er source ou la deuxième ou les deux. C'est hyper-facile à exploiter, bon sang ! À condition de ne pas rester accroché en esprit à une autre façon de faire en espérant l'y retrouver dans celle ci… je ne sais pas moi, je ne m'explique pas autrement pourquoi tant de gens le voient bien plus compliqué que ce n'est !
Après bon ce n'est plus que de simples transferts d'éléments de tableaux. C'est ça qui coince ou quoi ?
je ne sais même pas par où commencer.
Par l'appel de la fonction GroupOrg. Je vais détailler celui du module Fusion de GrpOrgZou_16.xlsm
GroupOrg(TableUnique(PlgUti(Feuil1.[A2]), PlgUti(Feuil2.[A2])), 2, 1)
Représente une collection d'objets de type SsGroup établie à partir d'une mise bout à bout des valeurs des plages commençant aux cellules A2 des feuilles Excel représentées par les objets Worksheet Feuil1 et Feuil2 de la rubrique Microsoft Excel Objets du projet VBA. Les regroupements et classements s'opèrent d'abord sur la colonne B, soit 2, des deux sources, ensuite sur la colonne A, soit 1.

D'autres questions ?

Si on n'y comprend rien, est-ce parce que c'est tellement facile qu'on n'arrive pas croire que ça puisse être aussi facile que ça ???
Je ne sais vraiment plus quoi mettre dans les commentaires d'aide des procédures des modules de service pour arriver à faire comprendre comment il faut les utiliser !

Une fois que vous aurez compris, tâcher de réanalyser ce qui vous bloquait, qui sait peut être que ça pourrait faire l'objet d'un préambule en tête de module MClassement…
 
Dernière édition:

Calvus

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Bonjour,

Si on n'y comprend rien, est-ce parce que c'est tellement facile qu'on n'arrive pas croire que ça puisse être aussi facile que ça ???
Je ne sais vraiment plus quoi mettre dans les commentaires d'aide des procédures des modules de service pour arriver à faire comprendre comment il faut les utiliser !
C'est que je dois être un peu bête mon cher Dranreb..

J'essaie d'apprendre le vba, fais de réels efforts, et ai fait de sérieux progrès depuis quelques mois.
Néanmoins, j'ai pour l'instant un niveau de 5ème, au plus un niveau de 4ème. Alors pour aller directement en Maths Sup, c'est un peu dur...
Ton code passe par 5 modules différents, fait des aller-retours, utilise des noms moins compréhensibles que du chinois, alors oui, ce n'est pas simple ! Surtout que tu as écrit ce code et es conscient de ce que cela est censé faire, ce qui n'est pas mon cas. Pour avoir discuté avec de bons programmeurs, même pour eux il est difficile de décrypter le code de quelqu'un d'autre..
Pour terminer, une petite remarque néanmoins amicale. Bien que Job75 et toi soyez absolument remarquables et extrêmement compétents, je redoute vos réponses, car bien qu'elles répondent en général parfaitement bien au problème posé, coté pédagogie il faut repasser.
Pour ma part, je cherche bien une solution à mon problème quand je demande de l'aide ici, néanmoins, je ne cherche pas nécessairement une solution clé en main mais à comprendre.
Merci donc de l'aide apportée, mais si je demande trop, il ne faut pas m'aider et me laisser me débrouiller. Tant pis pour moi.
A l'inverse, je suis preneur de tout conseil et fais le nécessaire pour respecter votre travail en prenant le temps de l'étudier.
Dans le cas présent, il eut été beaucoup plus facile pour moi de faire un copier coller, ce qui m'aurait évité les quelques 10 heures à tenter de comprendre ce code.

Pour le reste, si tu es toujours prêt à m'aider, je renvoie le fichier transformé.
Je n'ai que copié les modules pour l'instant, mais me heurte à un bug, dû à l’utilisation de la propriété Workbooks.
Puisque mon tableau doit se faire sur 2 classeurs.

Merci.
Bien cordialement
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Bonjour.
D'accord. Il n'est pas possible d'utiliser les objets Worksheet prédéfinis d'un autre projet VBA. Ils ne sont pas connus.
Il faut dans ce cas prendre par exemple Workbooks("Prosp.xlsm").Worksheets(1).[B3]
Par ailleurs plus réellement nécessaire d'utiliser PlgUti(Feuil2.[B3]). On peut utiliser à la place
Feuil2.[B3].ListObject.DataBodyRange
car Feuil2 c'est l'objet Worksheet qui représente la feuille "Pro" et dans celle ci la cellule B3 appartient à des données mises en forme de tableau.
 

Calvus

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Re-bonjour,

Je te remercie.
Je ne sais pas comment faire la sélection sur le 1er tableau. Cela prend en compte la colonne A, alors que ça ne devrait pas.
Du coup la copie est fausse.
Peux tu jeter un coup d'oeil ?
Merci.
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Ça prend les colonnes que tu spécifie au GroupOrg donc B et A puisque ça se termine par 2, 1
Pour la mise au point de la procédure je te propose de mettre une image de la feuille source de Prosp.xlsm dans une feuille du même classeur, provisoirement, maintenant que tu sais comment finaliser pour un autre classeur.

Remarque: si la ou les colonnes de regroupement ne sont pas aux mêmes colonnes dans les deux sources, il est nécessaire de fabriquer un tableau intermédiaire pour l'un des deux de manière à le rendre conforme à l'autre. Ce n'est pas gênant: la fonction TableUnique accepte aussi bien des tableaux VBA que des Range.
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Bonjour à toutes et à tous,

... j'ai pour l'instant un niveau de 5ème, au plus un niveau de 4ème...
Espérant avoir compris le besoin, une suggestion en pièces jointes... niv:eek: 5ème bis !

Ne surtout pas hésiter à signaler toute incompréhension dans les lignes de code.

A bientôt :):)
 

Fichiers joints

gosselien

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Bonjour,

une pénible tentative dans un même classeur avec 3 onglets
Il ajoute une ligne si un nouveau prospect et une si modif dans une ligne existante

P.

ps (suis à mes limites en VBA là) :)
 

Fichiers joints

Calvus

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Bonjour,

Débordé, je n'ai pu répondre avant, n'ayant pas eu le temps de regarder. C'est chose faite.

@Dranreb : J'ai encore des bugs. Je ne comprends pas pourquoi. Mais je vais y arriver. Merci.

@Double Zéro : Merci 00. Je ne sais pas comment tu as fait mais ça fonctionne.

@Gosselien : Merci également. En revanche, ça plante chez moi. Et je ne saurais dire pourquoi, ayant pour ma part dépassé mes limites depuis bien longtemps.

Merci à tous de votre aide.
A bientôt
 

Dranreb

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Bonjour.
J'ai encore des bugs. Je ne comprends pas pourquoi. Mais je vais y arriver.
Oui, surtout si tu lis enfin les commentaires guides d'utilisation en tête de la Function GroupOrg.
Parce que si tu n'avais pas compris que les numéros à la fin identifiaient les colonnes sur lesquelles doivent s'opérer les regroupement, ça prouve que tu ne les avais pas lu, et dans ce cas je ne vois pas comment tu pourrais mettre un code approprié autour pour explorer correctement la collection, vu que le nombre de variables SsGroup et de boucles imbriquées nécessaires dépend du nombre de numéros de colonnes que tu spécifie !
 

Calvus

XLDnaute Barbatruc
Re : Comparer 2 tableaux et importer données si différentes

Bonsoir,

Merci Gosselien, ça fonctionne bien :)

Bonne soirée
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas