Fusion de doublons avec fonction MATCH et gestion d'erreur

tkd2009

XLDnaute Nouveau
Bonjour,
je vous soumet un casse tête que je n'arrive pas à solutionner.
Dans le fichier joint, j'ai un tableau donnant des valeurs à des noms d'individus (colonne A) en fonction de marker (ligne 2) sur la feuille "Genotypage_brut".
Ce tableau comporte des doublons avec des valeurs parfois différentes.
mon objectif est de fusionner les doublons dans un nouveau tableau sur la feuille "test_fusionne".
J'ai déjà un début de macro qui formate le tableau voulu et met en colonne A des noms unique d'individu.
Maintenant je voudrais avec une fonction MATCH (est ce la bonne approche?) transférer les données comme suit:

Si la valeur source = 0 ou cellule vide alors on ne copie pas
si cellule de destination est vide alors on copie la valeur source(pas d'erreur)
si cellule de destination =0 alors on copie et donc remplace par la valeur source
si cellule de destination =valeur identique à la valeur source alors on ne copie pas la valeur source ou on copie (le plus simple...)
si cellule de destination =valeur >0 et différente de la valeur source alors on concatene les 2 valeurs et on colorie la cellule en jaune.

Comment faire ce transfert de données avec conditions?

En vous remerciant pour vos futures lumières.
 

Pièces jointes

  • Test AR.xls
    41 KB · Affichages: 73

Modeste

XLDnaute Barbatruc
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

Bonsoir tkd2009,

La vache! J'ai bien cru y perdre mon avant-dernier cheveu! Et encore, ce sera définitivement le cas, si tu me dis que j'ai tout compris de travers :rolleyes:

Un essai, donc, en pièce jointe ... et advienne que pourra! ... mais tu nous diras quand même ce qu'il en est!?
 

Pièces jointes

  • Test AR (v2).xls
    49.5 KB · Affichages: 103

tkd2009

XLDnaute Nouveau
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

Merci!
A priori ça fonctionne au poil!
Je suis impressionné par la faible longueur de ton code, il m'en faut 3 fois plus pour faire 2 fois moins de chose.
Mais, histoire de couper ton dernier cheveux en 4, peux tu me rajouter simplement 2 détails une fois la macro exécutée:
mettre en fond jaune toutes les cellules contenant un # et rajouter 0 dans toutes les cellules vides.
J'ai vu que dans ta fonction match tu "limitais" le range à 10000 lignes, je suppose qu'en remplaçant "A1:A10000" par "A1", Sheets("test_fusionne").Range("A65536").End(xlUp) je deviens complètement dynamique...

En te remerciant pour ce tour de passe-passe ;)

EDIT: j'ai rajouté ce bout de code en fin de macro pour ajouter des "0" dans les cellules vides et colorer les cellules contenant "#"

Sheets("test_fusionne").Range(Range("A3", Range("A65536").End(xlUp)), Cells(2, Range("IV2").End(xlToLeft).Column).Offset(1, 0)).Select
For Each Cel In Selection
If Cel.Value = "" Then Cel.Value = "0"
If InStr(1, Cel.Value, "#") > 0 Then Cel.Interior.ColorIndex = 6
Next Cel
If Selection.Find("#") > 0 Then MsgBox "Vous avez des différences de lecture"

Tout à l'air OK

Merci encore!
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

Bonjour,

Comme j'y avais travaillé et viens seulement de lire ton ajout, je dépose tout de même la dernière version
 

Pièces jointes

  • Test AR (v3).xls
    45.5 KB · Affichages: 46
  • Test AR (v3).xls
    45.5 KB · Affichages: 50
  • Test AR (v3).xls
    45.5 KB · Affichages: 50

tkd2009

XLDnaute Nouveau
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

Un grand merci, c'est beaucoup plus propre que ce que j'ai pondu.
Je vais garder ta version en rajoutant mon msgbox et en augmentant la limite 10000 lignes à 65536.

Un grand merci encore.:)
 

Modeste

XLDnaute Barbatruc
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

Re-bonjour,

pourquoi on ne peut pas gérer la couleur de la cellule par le "Interior.color.Index " ?
Comme tu travailles en 2003 et moi en 2010 (en tout cas au moment d'écrire ces lignes), les ColorIndex semblent ne plus correspondre, d'une version à l'autre. Si tu es exclusivement sous 2003, rien ne t'en empêche.
 

tkd2009

XLDnaute Nouveau
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

pourtant si je remplace ton ".Interior.color = RGB(255, 255, 0)" par ".Interior.color.Index = 6" j'ai une "erreur 424 objet requis" alors que dans ma version ça fonctionnait.
Peut être une histoire de difference entre "Cel" et "Cells"...
 

tkd2009

XLDnaute Nouveau
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

Je remonte le sujet pour un petit bug que j'ai détecté.
Si on a un nom en majuscule "PINPIN" et un autre en minuscule "pinpin", les 2 noms sont considéré comme différents par le dictionnaire mais les valeurs sont elles écrasées:
On a PINPIN et pinpin séparés dans le tableau final et les valeurs pinpin remplacent celle de PINPIN, et laissent pinpin complètement vide.
Je joint le fichier exemple.
Peut on s'affranchir de ce bug en disant au dictionnaire de ne pas tenir compte du format majuscule/minuscule des noms pour que PINPIN et pinpin soient considéré comme le même nom?
 

Pièces jointes

  • Test AR (v3).xls
    47 KB · Affichages: 41
  • Test AR (v3).xls
    47 KB · Affichages: 48
  • Test AR (v3).xls
    47 KB · Affichages: 45
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

Bonsoir,

Si la chose te convient, un essai en pièce jointe où les noms sont convertis en majuscules ...
 

Pièces jointes

  • Test AR (v3).xls
    47.5 KB · Affichages: 55
  • Test AR (v3).xls
    47.5 KB · Affichages: 56
  • Test AR (v3).xls
    47.5 KB · Affichages: 59

tkd2009

XLDnaute Nouveau
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

ça marche très bien!
Pour info j'ai trouvé un autre bug mineur: si il y a un 0 dans la colonne A des noms, la macro renvoi une erreur "incompatibilité de type" sur la ligne suivante:
Sheets("test_fusionne").Cells(ligneNom, marker - 4) = IIf(listeMarkers.Count = 0, 0, Join(listeMarkers.keys, "#"))

Dans la mesure où je ne dois pas avoir de 0 dans cette colonne, cela relève du détail.
Merci pour le gros coup de main ;D

EDIT: cela se produit aussi avec des celulle vides dans la colonne A.
J'ai rajouté les lignes suivantes pour trouver et avertir de la présences de 0 ou de cellules vide:

On Error GoTo 0
If Not Sheets("Genotypage_brut").Range("A3", Range("A65536").End(xlUp)).Find("") Is Nothing Then
MsgBox "Vous avez des samples names vides !"
Exit Sub
End If

C'est pas joli mais c'est fonctionnel
 
Dernière édition:

tkd2009

XLDnaute Nouveau
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

Bonjour,
je remonte la discussion car j'aimerai adapter cette macro pour la faire travailler un peu différemment.
J'aimerai cette fois ci fusionner 2 tableaux supposés identique pour trouver rapidement les différences.
Pour rappel, on fusionne des samples names (colonne A) et des valeurs de marker (ligne de titres 2) les différences entre valeurs sont concaténées, séparées par un # et colorées en jaunes.
Donc au lieu de fusionner des doublons dans une même colonne il me faut les fusionner alors qu'ils sont dans 2 feuilles différentes.
Je suppose qu'en créant un dictionnaire ligne/colonne de chaque feuille et en fusionnant les 2 on doit pouvoir y arriver, mais j'aurai besoin d'aide pour cette réalisation.
Je joint un exemple dans lequel j'ai laissé la macro originale si ça peut aider....

En vous remerciant

Cerise sur le gâteau, si on pouvait comparer les samples names et colorer en bleu ceux qui sont présent dans un seul tableau, ça serait top.
 

Pièces jointes

  • test comparaison.xls
    33.5 KB · Affichages: 43
  • test comparaison.xls
    33.5 KB · Affichages: 45
  • test comparaison.xls
    33.5 KB · Affichages: 47
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : Fusion de doublons avec fonction MATCH et gestion d'erreur

Bonjour,

J'ai beaucoup aimé le
travailler un peu différemment
J'ai déjà entendu l'expression "tout est relatif" ... ce doit être le cas des termes soulignés ci-dessus :eek:
Les Sample Names ne sont plus du texte, mais des chiffres ou nombres ... Les clés du "dictionary" me semblent être de type texte!? Que devient la gestion des différences de casse du fichier précédent?
Je suis parti du principe que l'ordre des colonnes était identique dans les 2 feuilles (brut et secondaire) ... si pas, on est parti pour un tour de carrousel supplémentaire et je sens que je vais être malade dans l'avion!

Bref, j'arrive à obtenir le même résultat que celui que tu indiquais ... mais sans pouvoir garantir que ça fonctionnera dans tous les cas de figures!
Teste d'abord, pour vérifier si les résultats sont corrects ... on règlera ensuite les questions de "présentation" (tri à effectuer? M<>male, bordures, etc...)

J'ai laissé ta feuille "Genotypage_final (orig)" qui contient le résultat fait "à la main"; la macro affichera le résultat dans "Genotypage_final"
 

Pièces jointes

  • test comparaison(1).xls
    69.5 KB · Affichages: 54

Discussions similaires

Statistiques des forums

Discussions
312 359
Messages
2 087 590
Membres
103 604
dernier inscrit
CAROETALEX59