Modification de tableau
Bonjour,
(Très!) novice en VBA, je m'attaque à un gros morceau pour mon boulot (mais ça sera vraiment utile à plein de monde alors...)
Je cherche à "copier" et" réarranger" des données d'un tableau excel vers une nouvelle feuille.
Le problème c'est le nombre de critères... je m'explique (voir également le fichier excel avec le tableau brut et le bilan recherché... c'est peut être plus clair!):
J'ai un tableau de 4 colonnes. Nombre de lignes variables (sinon c'est pas drôle).
La première colonne correspond à une acquisition de données (d'un instrument analytique).
Les trois autres définissent des infos de cette acquisition: un nom (quand c'est possible, c'est pas systématique), un temps (noté RT) et une valeur numérique (notée Area).
Dans un premier temps j'ai besoin de faire un "collage transposé" des trois dernières colonnes en fonction des valeurs de la première (quand la valeur de la première colonne change).
Je devrais avoir en première ligne le nom, en deuxième le temps et en troisième la valeur numérique. la première colonne correspondant aux noms des colonnes (en remplaçant le nom Area par le nom de l'acquisition-> ici Sample...).
Dans un deuxième temps, j'ai besoin (et c'est le plus gros morceau) de réarranger les colonnes (et de compacter les lignes) pour aligner les valeurs de la ligne Area en fonction de la donnée RT. Malheureusement, les valeurs ne sont quasiment jamais égales (mais juste très proches).
En plus si le nom est différent les colonnes doivent être différentes (même si les valeurs sont proches).
Et si le nom est identique mais le RT très différents, alors il faut garder les deux colonnes.
Bref, c'est vraiment un gros morceaux et je ne vois pas trop comment démarrer... d'où mon appel à l'aide!
En vous remerciant par avance
bonjour,
à partir de quel écart, considères-tu que tes RTs sont différents ? (en pourcentage ou en valeur absolue)
Bonjour h2so4 (chimiste?)
Un grand merci pour ton aide!
C'est une grande question en effet...
C'est vraiment un critère difficile à rendre systématique (car cela peut dépendre du type de réponse... en gros, plus la valeur Area est grande, plus un décalage peut se faire).
Si je regarde un tableau retravaillé "à la main" je dirais que l'écart type moyenne d'un "même" RT est à peu près de 0.02.
C'est pas trop grave si la macro génère un peu trop de colonnes différentes (critère très restrictif) car je pourrais facilement recombiner des colonnes manuellement après. Par contre c'est plus embêtant si les colonnes sont trop "compactées" (plus difficile de voir des colonnes à éclater).
Pour info, j'ai volontairement simplifié le tableau des données brutes où je pourrais rajouter deux autres données de temps.
En fait chaque RT correspond au "sommet" d'un triangle (et Area est son aire). J'ai donc également si je veux les temps de la "base" du triangle (début temporel du triangle, sommet du triangle et fin du triangle)... mais ça ne répond pas à ta question non plus je pense.
Mais si besoin...
Merci pour ton efficacité!
Je viens de faire les tests avec différentes valeurs de tolérance (en PJ le fichier modifié).
Donc en effet, la tolérance joue beaucoup... j'ai peut être tort de te demander le RT comme critère principal.
En effet, le "Name" devrait être le premier critère d’alignement. Les "Name" identiques pour des RT "très" différents sont des bug du logiciel.
C'est plus simple de le corriger sur le logiciel de l'instrument puis d'utiliser une macro sur les données.
C'est plus simple d'aligner avec les noms identiques?
Par contre, l'exécution de ta macro fait "disparaître" des données (cf le fichier excel modifié) à la recombinaison.
Certaines valeurs se retrouvent en bout de tableau et d'autre sont simplement effacées...
Bonjour,
Qu'il y ait des données qui "disparaissent" est dans la logique de ce qui tu as demandé.
tu as plusieurs données pour certains couples (exemple sample A, name N), quelle valeur garder ? Faut-il toutes les garder (sous quelle forme) ?
Je suis désolé d'arriver avec un projet mal défini...
Non, la logique que je voudrais n'est pas de faire disparaitre des données mais de les aligner, classé en fonction des "RT" croissant en fonction du "Name" (et du "RT" donc).
J'ai recommencé le fichier pour mieux détaillé les étapes que je réalise manuellement.
J'ai laissé les noms d'origine même si ça fait barbare.
Quand je traite manuellement mes données, je réalise en fait les trois étapes des onglets début, intermédiaire et final.
Début: le collage/transpose des 3 colonnes en fonction de la première.
Intermédiaire: je décale les cellule pour aligner les noms en fonction du temps. Quand il n'y a pas de noms, je ne regarde que le RT.
Final: je recopie les noms (quand je les connais) des colonnes, puis le RT (moyenne des RT) puis les valeurs par échantillon (Area).
Si la cellule est vide je donne 0.
Désolé, j’espérais ne pas trop te faire perdre de temps... mais au final je suis plus long à expliquer ce que j'ai besoin que toi de coder!!!
Bonsoir,
voici une nouvelle version. j'arrive presqu'au même résultat que celui que tu attends. Je pense que le résultat est correct, A toi de voir si je dois corriger, mais dans ce cas merci de me dire ce qui est incorrect et surtout pourquoi.
solution qui ne fonctionne pas sur Mac
Bonjour H2SO4,
Je viens de tester ta macro sur les données que je t'ai envoyé.
Le seul décalage que tu peux constater et une erreur d'interprétation du logiciel (un mauvais nom car il identifie ma une donnée) mais ta macro marche très bien!
Je viens de tester sur une liste plus "conséquente" de données: là encore, c'est je pense plutôt des erreurs du logiciels (mauvaise identification) qu'une erreur de programmation de la macro.
Juste une question en plus: la macro tient plutôt compte du "RT" (avec la tolérence) ou du "Name" (alignement du nom).
Dans tous les cas ton outil est vraiment super (je ne pense pas que j'aurais réussi tout seul) donc je note résolu et je retravaille pour voir si certaines choses peuvent être amélioré... J'espère en effet "combiner" cette macro avec une autre que j'ai qui va chercher directement les données dans le répertoire de l'appareil!
Merci infiniment!
bonjour,
la macro trie les données brutes sur RT, sample et nom du produit.
ensuite on remplit le tableau résultat en parcourant cette liste,
chaque fois qu'il y a un changement de nom de produit ou chaque fois que l'on devrait mettre une valeur area dans une cellule résultat qui contient déjà une valeur on passe à la colonne suivante.
Cela semblait être l'algorithme qui correspondait à ce que tu faisais manuellement.