Lister des cellules précises d'une colonne

A

Antoine

Guest
Bonsoir à tous !

Ca fait pas mal de temps que je passe sur votre site pour trouver réponses à mes questions. La fonction recherche du forum est une merveille :')
Je ne cache pas que je suis novice, mais ça rentre plutôt bien dans ma petite tête.


Mais là je coince sur quelque chose qui semble 'simple' en formule matricielle. ('simple'.. enfin je crois !)

Je voudrais, dans une colonne B, afficher tous les contenus de cellules de la colonne A qui correspondent à 'Commande' suivit de quelque chose.

Exemple:
Code:
          [A]                               [B]
[1] Commande FP456                     Commande FP456
[2] produit                            Commande FP478-A
[3] produit                            Commande FP986-7
[4] Commande FP478-A
[5] produit
[6] produit
[7] produit
[8] Commande FP986-7
[9] produit

Est-ce vraiment possible au moins, avec une formule matricielle ? (je commence à douter héhé)

(et si je veux récupérer les lignes qu'il y a entre 2 'Commande ...' (les lignes produits donc), il existe une formule matricielle qui peut faire ça si on lui donne simplement les 2 numéro de ligne (de début et fin) ?)


Merci pour les réponses dans tous les autres postes, elles font souvent mon bonheur :)
 
A

Antoine

Guest
Partiellement trouvé, mais c'est toujours pas ça

En fait j'ai trouvé un petit quelque chose:
J'ai mis un CHERCHE('commande ?*';A:A) dans un PETITE.VALEUR avec un LIGNE().

Mais dans ce cas précis, si j'ai une cellule qui contient 'PwetCommande ....' ça va me la marquer quand même...

Mais bon c'est pas trop grave, je doute que ça se produise ce genre de chose (mais on sait jamais !)

Donc si quelqu'un a une idée pour ça...


Reste maintenant à trouver la formule matricielle pour lister les lignes 'produits' entre deux 'Commande ...' ! Là je veux bien un petit coup de main ;)

Désolé pour la précipitation du poste précédent :/
 

Monique

Nous a quitté
Repose en paix
Re:partiellement trouvé, mais c'est toujours pas ça

Bonjour,

Si j'ai bien compris

Pour les 'Commande' avec quelque chose après :
Ta liste de A2 à A10
Tu laisses vide A1
En D2 :
=INDEX(A$1:A10;MIN(SI(GAUCHE(A$2:A$10;8)='commande';SI(NBCAR(A$2:A$10)>9;SI(NB.SI(D$1:D1;A$2:A$10)=0;LIGNE(A$2:A$10))))))&''
formule matricielle, à valider par ctrl, maj et entrée

Pour le mot 'Produit' isolé :
En E2 :
=SI(NB.SI(A$2:A$10;'produit')<LIGNES(E$2:E2);'';'Produit')

Si tu veux une matricielle pour le mot 'Produit' :
En F2 :
=SI(NB.SI(A$2:A$10;'produit')<LIGNES(F$2:F2);'';INDEX(A$1:A$10;PETITE.VALEUR(SI(A$2:A$10='produit';LIGNE(A$2:A$10));LIGNES(F$2:F2))))
 

ChTi160

XLDnaute Barbatruc
Re:partiellement trouvé, mais c'est toujours pas ç

Salut Antoine
bonsoir Monique

en pièce jointe un peu de Vba
moi je vais récupérer le code de Monique Merci Lol

bonne soirée [file name=Tri_Commande.zip size=7825]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Tri_Commande.zip[/file]
 

Pièces jointes

  • Tri_Commande.zip
    7.6 KB · Affichages: 21
A

Antoine

Guest
Re:partiellement trouvé, mais c'est toujours pas ça

Bonsoir Monique,

Je viens de passer un bon petit moment à essayer de comprendre pourquoi le résultat de ta formule semble bizarre:

** Si je valide en matricielle sur D2:D10 ça me remplit toutes ces cases avec le nom de la 1ère ligne 'commande' trouvée, pas la liste de toutes les cellules 'commande'.

En gardant ta structure, et en mettant en B2 le mot à chercher 'commande', j'ai réussi (en validant sur D2:10) comme ça:

Code:
=INDEX(A2:A10;PETITE.VALEUR(SI(GAUCHE(A2:A10;NBCAR(B2))=B2;LIGNE(A2:A10));LIGNE()))
Est-ce une méthode tout aussi intéressante que ton MIN() ?


Le problème qui se pose alors est le suivant, ça me donne:
Code:
commande XY789
commande XY123454
commande XY
#NOMBRE!
#NOMBRE!
[...]
#NOMBRE!
J'ai testé quelques petites choses mais je n'arrive pas à faire en sorte que INDEX() retourne '' quand il n'y a pas de valeur trouvée :/

Donc pour récupérer ses données dans une Liste de Validation, j'ai chercher une valeur pour DECALER(;;;;X), avec X le nombre de valeur sans erreur:
Code:
' Valider en F2 en matricielle:
=NB.SI(D2:D10;(NON(ESTERR(D2:D10))))
' ou
=NBVAL((NON(ESTERR(D1:D10))))
mais pas de résultat satisfaisant, ça me renvoit 10 à chaque fois. Je me contenterai d'un =NB.SI(D1:D10;B2&'*') si on me propose pas autre chose (histoire d'apprendre quelque chose..)
 
A

Antoine

Guest
Re:partiellement trouvé, mais c'est toujours pas ça

SUITE et FIN:

** En ce qui concerne la gestion des lignes 'produit', ce n'est pas vraiment ça. C'est le problème des forums, quand on explicite pas le problème au maximum :/

Donc en fait, les cellules qui n'ont pas 'commande' comme texte ne contiennent pas forcément le mot 'produit', mais 'n'importe quoi'.
Ce que je cherche (et là je ne sais pas si l'on peut avec une formule matricielle), c'est de lister simplement toutes les cellules comprises entre deux lignes. Par exemple toutes les cellule de la Colonne A qui qui sont entre la 5 et la 7ème (comprises) lignes.

Genre quelque chose comme ça peut être:
Code:
=INDEX(A2:A10;PETITE.VALEUR(SI((LIGNE(A2:A10)>=5)*(LIGNE(A2:A10)<=7);LIGNE(A2:A10));LIGNE()))
[code]
Ca ne marche pas très bien chez moi (ça me donne des lignes, mais décalée..).
Bref ! Je suis dessus depuis que tu as posté, ça chauffe 'là-haut' !

Je te remercie pour la réponse apportée !
 
A

Antoine

Guest
Re:partiellement trouvé, mais c'est toujours pas ç

Bonsoir ChTi160 !

Merci bien pour ce petit cours de VBA. Je vais essayer de continuer avec des formules dans un 1er temps (plus facile à adapter pour ma part, je vais manquer de temps pour apprendre le VBA à ce rythme :/)

Bref, merci tout de même ;)
 

Monique

Nous a quitté
Repose en paix
Re:partiellement trouvé, mais c'est toujours pas ç

Re,

Tu ferais peut-être bien de poster un mini fichier. Ton message est rudement difficile à comprendre.

Ce n'est pas INDEX(A2:A10 c'est INDEX(A1:A10,
vu que tu cherches le contenu d'une cellule avec, comme critère, son n° de ligne

Si tu écris Petite.Valeur(plage;Ligne()),
tu remplaces l'argument de Petite.Valeur par le n° de ligne où est ta formule
La 1ère des petites valeurs : argument 1 donc ligne 1
C'est probablement là la raison de ton décalage, si tu n'as pas démarré en ligne 1

La formule que tu donnes fonctionne si tu la tapes à partir de la ligne 1, de cette manière
=INDEX(A$1:A$10;PETITE.VALEUR(SI((LIGNE(A$2:A$10)>=5)*(LIGNE(A$2:A$10)=5)*(LIGNE(A$2:A$10)<=7);LIGNE(A$2:A$10));LIGNE()-1))

Tu dis :
'Si je valide en matricielle sur D2:D10 '
Non, tu valides d'abord dans une seule cellule, puis tu copies et tu colles

Quand on peut utiliser Min() à la place de Petite.Valeur(), je préfère
C'est plus court, et d'une
Ensuite, regarde la 1ère formule que je t'ai écrite :
elle n'a pas besoin d'être mise au conditionnel, contrairement à Petite.Valeur()
C'est le manque de conditionnel qui te fait obtenir ça :
commande XY789
commande XY123454
commande XY
#NOMBRE!
#NOMBRE!

Avec celle-ci, tu obtiens #NOMBRE! si elle n'est pas mise au conditionnel
=INDEX(A$1:A$10;PETITE.VALEUR(SI(GAUCHE(A$2:A$10;NBCAR($B$2))=$B$2;LIGNE(A$2:A$10));LIGNE()-1))

Avec celle-ci (en D2) ça marche
=INDEX(A$1:A10;MIN(SI(GAUCHE(A$2:A$10;NBCAR($B$2))=$B$2;SI(NB.SI(D$1:D1;A$2:A$10)=0;LIGNE(A$2:A$10)))))&''
(sauf que je croyais que tu voulait les 'Commande' suivi de quelque chose
Là, tu obtiens les mots 'Commande' tout court aussi.)
 
A

Antoine

Guest
Re: On y arrive enfin !

Hi again,

Je viens de refaire tout ça, ça fonctionne plutôt bien !

Merci beaucoup pour les explications, ça m'éclaire énormément. J'ai opté pour le MIN() partout finalement, c'est beaucoup plus pratique (sauf cas spéciaux où l'on veut accepter la redondance de données semble-t-il)

Si j'ai le temps après avoir finaliser mon fichier, je posterais un exemple, au cas où certaines personnes cherchent un cas similaire.

A bientôt peut-être !
 

Discussions similaires

Statistiques des forums

Discussions
312 500
Messages
2 089 010
Membres
104 004
dernier inscrit
mista