Extraire une information spécifique d'un tableau horrible

Bonjour,

J'ai besoin de votre aide pour extraire des informations spécifiques contenues dans des cellules et colonnes aléatoires de mon tableau qui ne ressemble à rien.

Je m'explique : dans les colonnes L, M, N, sont présentes des valeurs numériques que je dois récupérer proprement. Il s'agit des informations "GO_function" , "GO_component" et "GO_process" avec leur numéro à chaque fois derrière qui est sous le format GO:0008484 par exemple (pas facile d'être claire... Le tableau sera peut-être plus parlant...). Est-il possible de récupérer par exemple ce terme : "GO_function: GO:0008484" actuellement noyé dans du texte dans la cellule ligne 23, colonne L, dans une nouvelle colonne ?

Je vous remercie de toute aide que vous pourrez m'apporter, je suis vraiment démunie dans l'analyse de mes listes de gènes bactériens.

Agnès

9list-of-genes.zip (735.42 Ko)

bonjour,

un premier tentative en feuil2

Vous avez Excel 365 ?

11list-of-genes.zip (745.39 Ko)

Bonjour

J'ai ressorti tous les Go function en colonne V et suivante...

13list-of-genes.zip (753.30 Ko)

A+ François

@Bart : oui Excel 365, v16

@François : Merci beaucoup ! Pouvez-vous me dire comment vous avez fait ? Il faut que je fasse la même chose pour le GO_process et G0_component.

Bonne soirée,

Agnès

Bonjour

Tout est dans la macro

Sub traitement()
  Dim i As Long, j As Long, a, y As Integer 'déclaration des variables
  For i = 2 To Range("A" & Rows.Count).End(xlUp).Row 'boucle de la 1ère à la dernière ligne
   a = Split(Cells(i, 12).Value, " ")'on decoupe la phrase en colonne L
   y = 22 'variable pour la colonne V
   For j = LBound(a) To UBound(a)' boucle sur tous les mots trouvés
     If a(j) = "GO_function:" Then 'si le mot="GO_function:"
       Cells(i, y).Value = a(j) & a(j + 1)'on recopie ce mot et le mot suivant dans la 1ère cellule vide
       y = y + 1'on incremente la colonne
     End If
   Next
  Next
End Sub

A+ François

Bonjour,

Une alternative, par le biais de Power Query. (PQ)

Ce complément est nativement intégré à votre version d'Excel (365, selon vos dires)

Pour mettre à jour, clic droit dans la requête (à partir de la colonne V), "Actualiser"

J'ai "dispatché" sur plusieurs colonnes, mais on pourrait tout mettre dans une seule

Le code (il s'agit de code M, langage utilisé par PQ)

let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    SupprCol = Table.SelectColumns(Source,List.Range(Table.ColumnNames(Source),11,3)),
    Idx = Table.AddIndexColumn(SupprCol, "Index", 1, 1, Int64.Type),
    UnPivot = Table.UnpivotOtherColumns(Idx, {"Index"}, "Attribut", "Valeur"),
    FractV = Table.ExpandListColumn(Table.TransformColumns(UnPivot, {{"Valeur", Splitter.SplitTextByDelimiter("GO_", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Valeur"),
    Filtr = Table.SelectRows(FractV, each Text.StartsWith([Valeur], "function") or Text.StartsWith([Valeur], "process") or Text.StartsWith([Valeur], "component")),
    Extract = Table.TransformColumns(Filtr, {{"Valeur", each Text.BeforeDelimiter(_, " -"), type text}}),
    NbCol= List.Max(Table.Group(Extract, {"Index"}, {{"Nombre", each Table.RowCount(_)}})[Nombre]),
    Fractt = Table.SplitColumn(Table.Group(Extract, {"Index"}, {{"GO", each Text.Combine([Valeur],"\")}}), "GO", Splitter.SplitTextByDelimiter("\", QuoteStyle.Csv), NbCol),
    Fusion = Table.NestedJoin(Idx, {"Index"}, Fractt, {"Index"}, "Fraction", JoinKind.LeftOuter),
    Expand = Table.ExpandTableColumn(Fusion, "Fraction", List.Range(Table.ColumnNames(Fractt),1,NbCol), List.Range(Table.ColumnNames(Fractt),1,NbCol)),
    Tri = Table.Sort(Expand,{{"Index", Order.Ascending}}),
    SelectCol = Table.SelectColumns(Tri,List.Range(Table.ColumnNames(Fractt),1,NbCol))
in
    SelectCol

Bonne journée

13pq-list-of-genes.zip (889.09 Ko)

Merci beaucoup à tous les deux.

Je vais étudier ces 2 façons de faire pour progresser j'espère sur Excel !

Bonne journée,

Agnès

Rechercher des sujets similaires à "extraire information specifique tableau horrible"