Récupérer données automatiquement selon premier chiffre

Bonjour

Je vous explique mon sheet : https://docs.google.com/spreadsheets/d/15s9NRmnI-wOa2RaV2kyeSKU6HtmqSb9B-YDw6mvOpqU/edit#gid=0

J'ai en colonne A à J à chaque fois, une référence produit et la date d'expiration :

Colonne A : Ref produit 1
Colonne B : date d'expiration produit 1

Colonne C : Ref produit 2
Colonne D : date d'expiration produit 2

etc .. et j'ai 5 produits et 5 date d'expiration.

Ce que je voudrais faire c'est de les classer de la sorte :

Si le numéro du produit commence par 3 ou 5 il faudrait que ça aille automatiquement dans les colonnes REF A (les colonnes vertes K à T) avec la date d'expiration à chaque fois.

Si le numéro du produit commence par un chiffre autre que 3 ou 5 que ça aille automatiquement dans les colonnes REF B (les colonnes jaunes U à AD) avec la date d'expiration correspondante à chaque fois.

En ligne 2, je vous ai mis un exemple ce de que je voudrais faire, sauf qu'il est fait manuellement, l'idée ça serait de pouvoir trouer une formule pour que ça le fasse automatiquement (en vert, les références produits commençant par 3 ou 5 et ça va dans les colonnes vertes et en jaune les autres références qui ne commencent pas par 3 et 5)

Je vous ai mis des exemples en ligne 3 pour que vous puissiez trouver les formules adéquates.

J'espere avoir été assez claire, merci beaucoup de votre aide.

Bonjour,

pour rester compréhensible j'ai évité les formules trop abstraites

je commence par construire une matrice de ce type

image

j'applique ensuite query

donc

en K3

=TRANSPOSE(FLATTEN(QUERY({left(to_text(A3))\A3\B3;left(to_text(C3))\C3\D3;left(to_text(E3))\E3\F3;left(to_text(G3))\G3\H3;left(to_text(I3))\I3\J3};"Select Col2,Col3 WHERE Col1='3' or Col1='5'")))

en U3

=TRANSPOSE(FLATTEN(QUERY({left(to_text(A3))\A3\B3;left(to_text(C3))\C3\D3;left(to_text(E3))\E3\F3;left(to_text(G3))\G3\H3;left(to_text(I3))\I3\J3};"Select Col2,Col3 WHERE not Col1='3' and not Col1='5'")))

mieux vaut éviter des dates ésotériques comme le 31 avril !

image

Super ça marche très bien !

Dans mon exemple j'ai voulu simplifier en ne mettant que 5 références en me disant que j'allais l'adapter sur mon document final qui en contient 30 ... je vois que sur ta formule, tu vas chercher les colonnes à chaque fois

=TRANSPOSE(FLATTEN(QUERY({GAUCHE(to_text(A4))\A4\B4;GAUCHE(to_text(C4))\C4\D4;GAUCHE(to_text(E4))\E4\F4;GAUCHE(to_text(G4))\G4\H4;GAUCHE(to_text(I4))\I4\J4};"Select Col2,Col3 WHERE Col1='3' or Col1='5'")))

Il y a t-il un moyen de le rendre plus simple pour aller jusqu'en BH ? ou faut-il que j'aille chercher les 30 colonnes ?

Pour info, j'ai remis l'exemple ici sur 30 colonnes : https://docs.google.com/spreadsheets/d/15s9NRmnI-wOa2RaV2kyeSKU6HtmqSb9B-YDw6mvOpqU/edit#gid=1044257... (onglet 30)

Merci beaucoup

justement, c'est parce qu'il en avait peu que je me suis dit que je n'allais pas faire un truc trop théorique ... mais va falloir y aller !

En BI3

=transpose(flatten(query(arrayformula({
query(transpose(if(mod(column(A3:BH3);2)=1;left(to_text(A3:BH3));));"where Col1 is not null")\
query(transpose(if(mod(column(A3:BH3);2)=1;A3:BH3;));"where Col1 is not null")\
query(transpose(if(mod(column(A3:BH3);2)=0;A3:BH3;));"where Col1 is not null")
});"select Col2, Col3 where Col1 = '3' or Col1 = '5' ")))

en DQ3

=transpose(flatten(query(arrayformula({
query(transpose(if(mod(column(A3:BH3);2)=1;left(to_text(A3:BH3));));"where Col1 is not null")\
query(transpose(if(mod(column(A3:BH3);2)=1;A3:BH3;));"where Col1 is not null")\
query(transpose(if(mod(column(A3:BH3);2)=0;A3:BH3;));"where Col1 is not null")
});"select Col2, Col3 where NOT Col1 = '3' AND NOT Col1 = '5' ")))

il faudra mettre les colonnes une sur deux en format date

pour rendre encore plus flexible (et opaque), tu peux remplacer

A3:BH3

par

offset(A3;;;;2*30)

dans les formules, où 30 est le nombre de couples

=transpose(flatten(query(arrayformula({
query(transpose(if(mod(column(offset(A3;;;;2*30));2)=1;left(to_text(offset(A3;;;;2*30)));));"where Col1 is not null")\
query(transpose(if(mod(column(offset(A3;;;;2*30));2)=1;offset(A3;;;;2*30);));"where Col1 is not null")\
query(transpose(if(mod(column(offset(A3;;;;2*30));2)=0;offset(A3;;;;2*30);));"where Col1 is not null")
});"select Col2, Col3 where Col1 = '3' or Col1 = '5' ")))

Super, ça marche ! Cependant j'ai rajouté une première colonne pour le nom de société et je crois que j'ai tout cassé 😭

https://docs.google.com/spreadsheets/d/15s9NRmnI-wOa2RaV2kyeSKU6HtmqSb9B-YDw6mvOpqU/edit#gid=1044257...

dans la formule, il y a mod (modulo) qui permet de choisir les colonnes paires ou impaires

donc soit tu ajoutes 2 colonnes et cela respecte l'alternance, soit tu changes le 1 en 0 et vice-versa pour intervertir, ce que j'ai fait dans ton fichier et cela fonctionne

Merci beaucoup pour l'explication !

Rechercher des sujets similaires à "recuperer donnees automatiquement premier chiffre"