Aide formules traitement données

Bonjour,

je sollicite votre aide car je sèche un peu.

J'ai une feuille excel contenant différentes infos dans les colonnes A et B

Voici ce que je souhaite faire :

Pour chaque Ax = "TYPE" & Bx = "AIN" alors copier A(x-1) --> A(x+13) dans colonne A de feuille "AIN" et copier B(x-1) --> B(x+13) dans colonne B de feuille "AIN" à la suite (je ne veux pas que ça écrase le résultat précédent).

et

Pour chaque Ax = "TYPE" & Bx = "PID" alors copier A(x-1) --> A(x+13) dans colonne A de feuille "PID" et copier B(x-1) --> B(x+13) dans colonne B de feuille "PID"

(A et B étant les colonnes, "x" correspondant au numéro de ligne)

Merci d'avance

Bonjour indemyx,

Tu as écrit : « Je souhaite faire CECI et CELA » ; note que la seule différence entre CECI et CELA est la feuille utilisée : "AIN" ou "PID" (et qui est la valeur testée de Bx) ; ça démontre qu'il y a très peu de différence entre les deux ; regarde la fonction INDIRECT() : c'est sûr que ça t'aidera beaucoup ! (il te suffira d'indiquer le bon nom de feuille)

dhany

Bonjour,

Cela ne me paraît pas une bonne idée de faire systématiquement x+13 ! Tu auras plein de trous.

Voilà une ébauche ajustée à ta description pour t'inspirer (sans fichier on ne peut tout voir !)

Sub Indemyx()
    Dim ab, i&, wsC As Worksheet
    Set ain = Worksheets("AIN")
    Set pid = Worksheets("PID")
    aa = ActiveSheet.Range("A1").CurrentRegion.Resize(, 2).Value
    For i = 2 To UBound(aa)
        If aa(i, 1) = "TYPE" Then
            If aa(1, 2) = "AIN" Or aa(i, 2) = "PID" Then
                Set wsC = Worksheets(aa(i, 2))
                wsC.Cells(i + 13, 1) = aa(i - 1, 1)
                wsC.Cells(i + 13, 2) = aa(i - 1, 2)
            End If
        End If
    Next i
End Sub

Il serait certainement préférable de mettre les donnée transférées à la suite sur chacune des feuilles !

Cordialement.

Bonjour,

Merci pour vos réponses.

je vais essayer d'être plus précis.

En gros, j'ai un fichier texte, que j'importe dans une feuille excel (dans mon idée je m'étais que ce serait plus facile à traiter par la suite, mais peut être pas).

Donc ça se présente comme suit :

COLONNE A COLONNE B

NAME = TARTANPION

TYPE AIN

DESCRP T. 1 ENTREE FUMEES CHAUDIERE

PERIOD 2

PHASE 0

LOOPID

IOMOPT 1

IOM_ID CP4001

PNT_NO 6

SCI 3

HSCO1 800

LSCO1 0

DELTO1 1

EO1 °C

OSV 2

EXTBLK 0

MA 1

INITMA 1

BADOPT 3

LASTGV 0

INHOPT 0

INHIB 0

INHALM 0

MANALM 0

etc etc

Ce que je cherche à faire c'est que pour chaque TYPE = xx (AIN ou PID ou qu'importe), je veux récupérer les lignes suivantes:

NAME (la ligne précédent le TYPE)

TYPE

DESCRP

HSCO1

LSCO1

EO1

Pour coller tout ça dans une nouvelle feuille à la suite bien sur pour chaque nouveaux résultats.

Puis faire la même recherche pour un autre type que je collerais dans une nouvelle feuille etc etc

N'hésite pas à mettre un fichier échantillon (conforme) et à y illustrer le résultat à obtenir...

coucou MFerrand, faut s'adresser à quel laboratoire pour obtenir le certificat de conformité de l'échantillon ?

Salut Dhany !

On ne sait pas ! Mais si les réponses ne fonctionnent pas sur son fichier réel alors qu'elles fonctionnent sur le modèle, c'est que le modèle n'était pas conforme !

Voici un exemple

14exemple.xlsx (14.06 Ko)

Eh bien ! Déjà le fichier ne correspond pas à ton post de 16h52 :

Ce que je cherche à faire c'est que pour chaque TYPE = xx (AIN ou PID ou qu'importe), je veux récupérer les lignes suivantes:

NAME (la ligne précédent le TYPE)

TYPE

DESCRP

HSCO1

LSCO1

EO1

et cela varie pour chaque TYPE, qui plus est !

Oui je te l'accorde.

D'une j'ai fais un exemple, donc il faut juste comprendre que colonne A tu as différents paramètres (que j'ai renommé en param1 param2 etc pour plus de clarté).

Ensuite j'ai mis finalement le résultat "final" que je souhaite, mais sachant que ce qui marchera pour un "TYPE" sera facile à adapter pour la suite pour les autres "TYPE" je pense.

J'ai fais ceci car je ne peux pas envoyer le fichier original pour des problèmes de confidentialité .

Mais je pense que mon fichier échantillon est conforme

Je me répète :

et cela varie pour chaque TYPE, qui plus est !

On n'a donc pas les critères nécessaires !

"Y'a pas les critères nécessaires ?"
screen

Je ne comprends pas trop ce que tu dis ...

En gros , suivant le "TYPE" je cherche à récupérer le nom + différents paramètres

Et oui, la valeur de ces paramètres (colonne B) changent même si le "TYPE" est identique.

Donc en gros comme je voyais les choses, ce serait une fonction qui lit la colonne A, dès qu'il tombe sur TYPE , il vérifie colonne B si c'est bien le TYPE qu'on cherche, si c'est le cas hop il récupère le paramètre précédent (qui est NAME) + les paramètres suivants (soit les 13 premières lignes, ou directement les 4 paramètres qui m'intéressent si c'est possible), puis la boucle continue sa "lecture" et réitère chaque fois qu'il retombe sur le "TYPE" qu'on cherche.

J'ai mis le résultat final que je souhaite, mais c'est peut être trop compliqué, c'est pour ça qu'a la base de mes commentaires je parlais de récupérer un certain nombre de "lignes" où je sais que les paramètres qui m'intéressent sont dedans.

Relis ce que tu écvris !! D'un type à l'autre tu as 3 paramètres (sur les 6 éléments récupérés) qui ne sont pas les mêmes, sans que l'on ait de critères d'identification.

Si tu indiques des critères d'identification applicables, on pourra appliquer, mais pour l'instant ils ne sont pas exprimés.

Qu'entends tu par critère d'identification ?

Pour ce sont les noms des paramètres (NAME, DESC, TYPE, PARAM1, PARAM2, etc...) ?

Je vais essayer de reformuler, en complétant ce que j'ai mis dans le fichier excel envoyé en exemple.

Colonne A , des paramètres qui se répètent de manière cyclique

NAME

TYPE

DESCRP

PARAM1

PARAM2

PARAM16

NAME

TYPE

DESCRP

PARAM1

PARAM2

PARAM16

etc...

Colonne B, les valeurs de ces paramètres (valeur décimale, texte, symbole)

Pour chaque valeur TYPE1 (colonneB) affecté à TYPE (colonneA), on récupère NAME, TYPE, DESCRP, PARAM2, PARAM5 et PARAM12 avec leurs valeurs (colonneB) associées correspondant au "paquet" en cours, c'est à dire la ligne n-1 (name) et les suivantes, et on fait ça pour tout l'onglet en cours (on va trouver plusieurs TYPE = TYPE1, les paramètres à récupérer seront les mêmes) et on met tout ces résultats dans un onglet qu'on appelle TYPE1.

Voila, je pense pas pouvoir faire mieux en terme d'explications je pense.

C 'est bien ça pour le type 1, mais pour le type2 tu sors PARAM1, 6 et 14, et pour le type3 PARAM6, 7 et 8.

Il faut savoir ce que tu écris !

Je maintiens donc : on sort 6 éléments par groupe de données (un groupe comporte uniformément 19 lignes dans ton modèle, mais par sécurité il vaut sans doute mieux ne pas s'appuyer là-dessus... ). 3 éléments occupent les 3 premiers rangs dans le groupe (mais sont identifiables si ce n'était pas le cas) dont le 2e (TYPE) identifie la destination de l'extraction. Mais les 3 autres diffèrent selon le TYPE.

On n'a donc aucune règle pour les détecter, tant que tu n'en fournis pas une s'appliquant à tous les TYPE... ou bien que tu définisse une règle par TYPE différent en listant exhaustivement tous le TYPE que l'on sera amené à rencontrer.

Bonne soirée.

J'aurais pas dû parler du type 2, visiblement ça a plus embrouillé qu'autre chose.

Même si ce que j'ai écris est bien ce que j'ai en tête. Idéalement, ce qu'on fait pour le type1, il faut le refaire sur le type2 mais on ne récupère pas les mêmes paramètres (même si certains sont en commun).

Sinon, effectivement il n'y aura pas 19 lignes par modèle, parfois ce sera plus, et parfois moins, mais les paramètres qui m'intéressent seront toujours dans les 13 premières lignes du groupe.

Et les règles pour détecter les paramètres que l'on veut c'est leur nom (param1, param2, etc...) non ?

L'idée que j'avais (mais c'est peut être pas réalisable) c'était de lire ligne par ligne, quand on tombe sur TYPE2, hop on extrait les paramètres, et sinon on continue jusqu'au bout du fichier

Tu vois qu'en travaillant sur ton modèle en fonction de sa structure, on aurait abouti à quelque chose qui ne fonctionnerait pas sur ton fichier réel.

Ou les rangs des éléments à extraire sont toujours les mêmes, ou leur identification (col. A) est fixe dans tous les cas, et là on peut écrire un programme...

Ou bien on peut aussi extraire systématiquement les 13 premiers éléments.

Mais il faut une règle qui permette la décision.

Bah pour moi , la règle c'est TYPE = TYPE1 (ou AIN ou TOTO ou ce que tu veux en fait ce sera juste 1 mot à changer)

et dans le fichier "réel" les "groupes" ou "cycle" ne sont pas tous identiques (n'ont pas forcément tous les mêmes paramètres) MAIS ils ont TOUS en commun de commencer NAME, TYPE

Si tu demeures aussi imprécis, je ne démarrerai pas !

Résumons :

On traite une liste en A:B.

On identifie des groupes de données : ils commencent par NAME en A, suivi de TYPE à la cellule en-dessous.

On transfèrera l'extraction à opérer par groupe dans une feuille dédiée à chaque type, à créer lors de la première extraction pour un type considéré.

On extrait les 3 premiers éléments de chaque groupe | indécision pour la suite : -

  • 3 éléments de rang : ?, ? et ?
  • ou bien 3 éléments dont les libellés en A sont : ?, ? et ?
  • ou bien les 10 éléments de rang 4 à 13, ce qui aboutit à extraire les 13 premiers éléments
  • ou bien ? ? ?

Il faut lever l'indécision !

Rechercher des sujets similaires à "aide formules traitement donnees"