OVH Cloud OVH Cloud

Extraction d'une sous-chaine

22 réponses
Avatar
Apitos
Bonsoir,

Dans la feuille1 j'ai les donn=E9es suivantes :

Articles.....................Laboratoire
Bio-Tourbe-1 Biologie
Chm-Pipette-1 Chimie
Eln-Circuit int=E9gr=E9-1 Electronique
Eln-diode-1 Electronique
Eln-Omettre-1 Electronique
Elt-Ondulaire-1 Electricite
Bio- St=E9rilisateur -1 Biologie
Eln-Omettre-2 Electronique

Comment extraire les sous-chaines avant le tiret "-" dans la colonne A
ainsi que la valeur correspondante dans la colonne B pour avoir dans
Feuil2 le r=E9sultat suivant :

Laboratoire............... Abr=E9viation
Biologie Bio
Chimie Chm
Electronique Eln
Electricit=E9 Elt

Merci.

10 réponses

1 2 3
Avatar
LSteph
Bonjour Apitos,


http://cjoint.com/?lylhn8Xbsq

Voilà qui fonctionne selon ce que j'ai compris mais le principe même de
ta demande te posera éventuellement un problème, voir ligne 12 de la
table.

Il serait nettement préférable de créer d'abord une liste exhaustive des
Laboratoires et leur assigner une abréviation unique.
Ainsi ne pas être confronté à des articles où le suffixe serait
différent ou erroné pour un même laboratoire.

A ce que j'en vois l'abréviation (c'est de cela que je parlais) est bien
toujours de 3 chr mais sinon tu peux d'en départir avec cherche() ou
trouve(), l'essentiel n'est pas là...

puisqu'au lieu au lieu de cette recherche
=SI(E2="";"";GAUCHE(INDEX(base A:A;EQUIV(E2;base B:B;0));3))
selon une meilleure organisation on irait directement dans la table
laboratoire et peu importerait également le nb de chr , ce serait une et
seule abréviation tel que fixée.

Pour la macro j'ai simplement déterminé base et extraction et utilisé
l'enregistreur sur mes actions dans données filtre élaboré.

Cordialement.

lSteph

Bonsoir Modeste, Jacky.

J'ai essayé avec vos formulaires mais ça n'a pas marché.

Alors j'ai utilsé une macro pour le besoin, mais il reste des
correstions à faire.

Voilà un fichier joint.

http://cjoint.com/?lxxC5ZsTHa

Merci.


Avatar
LSteph
...suffixe oupsss préfixe!


Bonjour Apitos,


http://cjoint.com/?lylhn8Xbsq

Voilà qui fonctionne selon ce que j'ai compris mais le principe même de
ta demande te posera éventuellement un problème, voir ligne 12 de la
table.

Il serait nettement préférable de créer d'abord une liste exhaustive des
Laboratoires et leur assigner une abréviation unique.
Ainsi ne pas être confronté à des articles où le suffixe serait
différent ou erroné pour un même laboratoire.

A ce que j'en vois l'abréviation (c'est de cela que je parlais) est bien
toujours de 3 chr mais sinon tu peux d'en départir avec cherche() ou
trouve(), l'essentiel n'est pas là...

puisqu'au lieu au lieu de cette recherche
=SI(E2="";"";GAUCHE(INDEX(base A:A;EQUIV(E2;base B:B;0));3))
selon une meilleure organisation on irait directement dans la table
laboratoire et peu importerait également le nb de chr , ce serait une et
seule abréviation tel que fixée.

Pour la macro j'ai simplement déterminé base et extraction et utilisé
l'enregistreur sur mes actions dans données filtre élaboré.

Cordialement.

lSteph

Bonsoir Modeste, Jacky.

J'ai essayé avec vos formulaires mais ça n'a pas marché.

Alors j'ai utilsé une macro pour le besoin, mais il reste des
correstions à faire.

Voilà un fichier joint.

http://cjoint.com/?lxxC5ZsTHa

Merci.




Avatar
Modeste
Bonsour® LSteph

La solution de JB est on ne peut plus judicieuse et élégante...

Notre JB fait toujours preuve d'une présence efficace, pour son didactisme par
l'exemple.

@+
;o)))
Avatar
LSteph
Bonjour,


oui certes cela répond exactement, mais cela n'écarte pas le le bug ou
plutôt dû à un souci
d'organisation des données que j'évoquais.
Créer d'abord une table des laboratoires serait préférable en cas de
libellé d'article.. lire aussi ma proposition, puisque tu m'attires sur
celle de JB. Merci d'ailleurs car tu as eu le nez creux, elle m'avait
réellement échappé.
Pour le reste, j'ai préfèré quand même utiliser d'abord
le contexte et les outils d'excel avant d'aller
chercher ailleurs.(Scripting.Dictionary) cela dit c'est fort
intéressant ce qu'on peut en faire.

La solution de JB est on ne peut plus judicieuse et élégante...

Notre JB fait toujours..


Je ne crois pas qu'il soit vraiment à propos de parler à la 3ème
personne sur un forum ..
JB pardonne moi puisqu'indirectement on m'y engage je donne ma pensée:

Sur le style du code, ce que je n'aime pas du tout c'est
l'absence presque systématique de déclaration des variables,(faut pas
oublier tous ceux qui utilisent Option explicit même s'il leur est
loisible d'adapter) pour le reste
c'est un ensemble soutenu d'excellentes idées et elles sont encore plus
appréciées et efficaces pour le suivi du forum lorsqu'il prend soin de
donner formules ou solutions dans le post en plus du lien vers jb-...

Oui, en dehors de ces appréciations qui n'engagent que mes goûts et
sentiments personnels, s'il m'est permis de formuler un avis je trouve
que JB est vraiment un excellent contributeur.

Cordialement.

lSteph

Bonsour® LSteph

La solution de JB est on ne peut plus judicieuse et élégante...

Notre JB fait toujours preuve d'une présence efficace, pour son didactisme par
l'exemple.

@+
;o)))




Avatar
Modeste
Bonsour® LSteph avec ferveur ;o))) vous nous disiez :

Notre JB fait toujours..


Je ne crois pas qu'il soit vraiment à propos de parler à la 3ème
personne sur un forum ..


;o)))
foin de polémique...
de part ses contributions JB fait maintenant partie des "meubles" ;o)))
ses efforts louables pour ne plus mettre un lien sec vers cjoint.com,
l'étoffement de son site,
et au-delà du didactisme une évolution vers plus de pédagogie
font et feront que sa signature appartiendra aux "incontournables"
comme aimait à les signaler "notre" [MB] Monique
;o)))


@+
;o)))


Avatar
LSteph
:-) ...Dis donc GD en tout bonne camaraderie
ne m'en veuilles pas mais si tu permets:

Tu écris sous mon post , je réponds sans parler ni de Paul ni de Mick
....je ne sais où tu vois du foin??!!!


...et avec Ferveur t'exprime ce que j'en pense sans faux semblant à cet
égard
..c'est sans doute le contenu de ce que j'ai écrit qui est à lire
( au lieu de relever une bribe) qu'il en ressorte l'essentiel
qui nécessite d'avoir lu jusqu'en bas.

Pour le reste tu y verra que mon point de vue n'est pas si éloigné
permets que j'y maintienne les nuances d'appréciation qui me sont
personnelles.

Sur le sujet je pense quand même maintenir ma proposition de réponse.
Sinon tu sais que tu n'as pas besoin d'autorisation pour me dire
ce qui n'y convient pas!


@+

Amicalement.

Stéphane



Bonsour® LSteph avec ferveur ;o))) vous nous disiez :

Notre JB fait toujours..
Je ne crois pas qu'il soit vraiment à propos de parler à la 3ème

personne sur un forum ..


;o)))
foin de polémique...
de part ses contributions JB fait maintenant partie des "meubles" ;o)))
ses efforts louables pour ne plus mettre un lien sec vers cjoint.com,
l'étoffement de son site,
et au-delà du didactisme une évolution vers plus de pédagogie
font et feront que sa signature appartiendra aux "incontournables"
comme aimait à les signaler "notre" [MB] Monique
;o)))


@+
;o)))






Avatar
Apitos
Bonsoir à tous,

Je m'excuse pour avoir pris tout ce retard pour vous répondre, à cause
de quelques empêchements.

Un grand merci pour LSteph, JB et Modeste pour leurs précieux temps
qu'ils avaient pris pour me répondre.
Avatar
Apitos
Bonjour à tous,

'----------------
Set mondico = CreateObject("Scripting.Dictionary")
Set f = Sheets("feuil1")
For Each c In f.Range("B2", f.[B65000].End(xlUp))
If Not mondico.Exists(c.Value) Then mondico.Add c.Value,
Left(c.Offset(0, -1), InStr(c.Offset(0, -1), "-") - 1)
Next c
[f2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
[g2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)

'----------------

Chaque mois j'utilise cette macro dans un nouveau classeur.

Mais j'aimerais bien que la liste du mois précédent soit retenue.

On ne devra alors y ajouter que les nouveaux noms de laboratoires
saisis dans Feuil1 et non pas créer une nouvelle liste chaque mois et
effacer l'ancienne.

Merci.
Avatar
JB
Bonjour,

Sub Essai()
Set mondico = CreateObject("Scripting.Dictionary")
'-------------
Set f = Sheets("feuil2")
For Each c In f.Range("f2", f.[f65000].End(xlUp))
mondico.Add c.Value, c.Offset(0, 1)
Next c
'-------------
Set f = Sheets("feuil1")
For Each c In f.Range("B2", f.[B65000].End(xlUp))
If Not mondico.Exists(c.Value) Then mondico.Add c.Value,
Left(c.Offset(0, -1), InStr(c.Offset(0, -1), "-") - 1)
Next c
[f2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
[g2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)
End Sub

http://cjoint.com/?mdrsEr1jDX

JB



On 3 déc, 15:01, Apitos wrote:
Bonjour à tous,

'----------------
Set mondico = CreateObject("Scripting.Dictionary")
Set f = Sheets("feuil1")
For Each c In f.Range("B2", f.[B65000].End(xlUp))
If Not mondico.Exists(c.Value) Then mondico.Add c.Value,
Left(c.Offset(0, -1), InStr(c.Offset(0, -1), "-") - 1)
Next c
[f2].Resize(mondico.Count, 1) = Application.Transpose(mondico.keys)
[g2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)

'----------------

Chaque mois j'utilise cette macro dans un nouveau classeur.

Mais j'aimerais bien que la liste du mois précédent soit retenue.

On ne devra alors y ajouter que les nouveaux noms de laboratoires
saisis dans Feuil1 et non pas créer une nouvelle liste chaque mois et
effacer l'ancienne.

Merci.


Avatar
Apitos
Bonsoir JB et tous le forum,

Si la macro est exécutée pour la première fois (colonne F et G de
Feuil2 sont vides) je reçois cette erreur :

Erreur d'exécution '13'
Incompatibilité de type

Et le débogueur se positionne sur cette ligne :

[g2].Resize(mondico.Count, 1) = Application.Transpose(mondico.items)

Que signifie tout cela ?

Merci.
1 2 3