Extraction d'une portion de chaine avec condition et valeurs differentes

gpinpin

XLDnaute Nouveau
Bonjour
Les xtxt ou autres me font replonger 15 ans en arriere...

donc voila mon souci j'ai une colonne comme ceci là je ne mets que 3 lignes en collonne D et a partir de D2

TUFI A300 PREaviso-2 F070 1R Bypas M-30 Enlace A-3 DIR A-2
TUCI DOBR 040 Tunel Pl Oriente DIR N TRIP LIDAR
TUCE KAPE PRE DIR Vigo

Je voudrais extraire:
070
040
ou
rien dans la troisieme ligne
Bien d'autres lignes ont d'autres valeur

J'ai créé une condition pour sortir le 070 ou 70
{=SI(STXT(D12;TROUVE("F0";D12;2);2)="F0";(STXT(D12;TROUVE("F0";D12;2);4));"pas F0")}

Cette formule je là mets en colonne E et ça fonctionne bien sur pas pour toutes les valeurs car je ne fais que commencer la formule.
Mais des que je là change çà me met une erreur de valeur
pour la deuxième ligne re teste autrement:
=SI(STXT(D28;CHERCHE("4";D28;2);2)<>"40";SI(STXT(D28;CHERCHE("7";D28;2);2)<>"70";"pas 70";"70");"40")

Donc après ces échecs j'ai essayé en ouvrant VBA mais là j'ai du mal à démarrer le bout de programme.

J'ai vu en lisant de par-ci par-là qu'une fonction rapide existe mais difficile à mettre en pratique après de longues années sans triturer ces ligne.

Donc si vous avez une idée je suis preneur

Merci déjà de m'avoir lu
Gpinpin
 

Modeste

XLDnaute Barbatruc
Re : Extraction d'une portion de chaine avec condition et valeurs differentes

Bonjour gpinpin et bienvenue à toi,

Pour que ton message ne reste pas lettre morte, deux suggestions:
- expliciter la règle qui présiderait à l'extraction de cette fameuse portion de texte (qu'est-ce qui va permettre de déterminer où elle commence et où elle finit!?) ... parce que là ... je ne vois rien qui donne un indice quelconque!?
- fournir un petit fichier qui permettra à ceux qui l'envisagent de tester une proposition éventuelle; fichier qui reprendra les différents cas de figure
 

gpinpin

XLDnaute Nouveau
Re : Extraction d'une portion de chaine avec condition et valeurs differentes

Merci re
J'essaye autrement
j'ai trois ligne ou plus contenant par exemple
TUFI A300 PREaviso-2 F070 1R Bypas M-30 Enlace A-3 DIR A-2 | ici je dois trouver 70 | ou 070
TUCI DOBR 040 Tunel Pl Oriente DIR N TRIP LIDAR | ici je dois trouver 40 | ou 040
TUCE KAPE PRE DIR Vigo | ici ben rien
TUCE ADOL PRE 1R 50 Tripode SalidaTunel Odonell DIR Pirulí | ici je dois trouver 50 | ou 050

bref ce qui détermine le premier chiffre c'est un 3; 4; ; 5 ; 6 ;7 ;8 ; 9 ; 1; 11 ; ou 12

donc j'ai essayé d'imbriqué ces conditions mais dès que j'en rajoute une, j'ai une erreur de valeur
Ce qui m’amène à penser qu'un bout de prog en VBA serait mieux en faisant ce qui suit:
-lire caractère par caractère sur la cellule.
-Si un de ces chiffres est présent vérifier si apres il y a un "0" zéro
et si c'est bon inscrire ce nombre dans la colonne d’à coté
par exemple lire D2 et écrire la valeur en E2

Mais bon je continue de chercher par moi même ça me permet de réviser le VBA en ce moment et ce par plaisir :)

A+ Gpinpin
 

Dugenou

XLDnaute Barbatruc
Re : Extraction d'une portion de chaine avec condition et valeurs differentes

Bonjour,
avec les valeurs 30;40;50....90;10;110;120 en B12:B21
et le texte en C5, c6 etc

=TEXTE(MIN(SI(ESTNUM(CHERCHE($B$12:$B$21;C5));$B$12:$B$21));"000")
validé en matriciel (ctrl+maj+enter) et recopié en face de chaque ligne donne le résultat sauf le rien qui affiche 000

Cordialement
Edit : oups non ça marche pas ça renvoie 30 au lieu de 70 pour la première ligne !!!
et je pense que tu auras le même problème en vba : comment distinguer une valeur numérique attendue quand il y a deux ou plus valeurs dans le texte
désolé
 
Dernière édition:

gpinpin

XLDnaute Nouveau
Re : Extraction d'une portion de chaine avec condition et valeurs differentes

Déjà merci pour cette approche je regarde
A+ Gpinpin

re
déjà je suppose que "estnum est la valeur de "cherche" qui donne la position de départ
MIN j'ai un doute
et TEXTE aussi...

A+
 
Dernière édition:

gpinpin

XLDnaute Nouveau
Re : Extraction d'une portion de chaine avec condition et valeurs differentes

Edit : oups non ça marche pas ça renvoie 30 au lieu de 70 pour la première ligne !!!
et je pense que tu auras le même problème en vba : comment distinguer une valeur numérique attendue quand il y a deux ou plus valeurs dans le texte
désolé
Ces valeurs sont soit précédé de "0" zéro soit de F les autres par exemple ont un "-" tiret je ne prends pas

par exemple ici le F050 il me faut 50 et le -20 n'est pas la valeur cherché:
TUFI VICT PREaviso F050 SC-20 Compost

là il me faut le 50
TUCE ADOL PRE 1R 50 Tripode

autre cas c'est bien le 60 qu'il faut et le 15 est pour moi pas une valeur a extraire:
TUFI SICA F060 BusVao A-6 Km 15 Sal. Plantío DIR

je me gratte la tête et le peu de cheveux restant et c'est pour toutes ces conditions que je cherche. Je fais ces modifs une à deux fois par ans et j'aimerais ne par refaire ligne par ligne car dans le temps j'oublie comment j'ai fait.
A+
 

Dugenou

XLDnaute Barbatruc
Re : Extraction d'une portion de chaine avec condition et valeurs differentes

Bonjour,
Un nouvel essai sur le même principe de recherche de valeurs dans une liste.
En considérant que les valeurs sont
  • soit numériques précédées et suivies d'un espace
  • soit (si pas numériques) dans la liste nommée liste_a_trouver
  • si plusieurs valeurs numériques séparées par un espace : c'est la première qui est retenue
On converti la colonne avec séparateur espace (données convertir...) pour séparer chaque groupe.
Une formule (colonne B) identifie la première colonne qui contient soit une valeur numérique soit une des valeurs à trouver : cette formule est matricielle.
Une seconde formule (colonne A) renvoie la valeur (numérique à 3 digits) correspondante.

Voir PJ
 

Pièces jointes

  • gpinpin v2.xlsx
    54.5 KB · Affichages: 34

gpinpin

XLDnaute Nouveau
Re : Extraction d'une portion de chaine avec condition et valeurs differentes

Bonjour
Merci Dugenou j'ai roulé toute la journée d'hier avec la caravane et je viens de découvrir ton travail ...Super je vais essayé de décoder cela

Donc il me faut dans mon listing séparé en colonne cette écriture et le mieux est de le faire dans une troisième feuille avec lien car il me faut parfois mettre d'autres données d'un autre fichier.
Par contre du coté de la feuille outils je vois une image (bouton ?) mais je ne comprends pas ce qui est dedans

Encore merci
Gpinpin
 

Dugenou

XLDnaute Barbatruc
Re : Extraction d'une portion de chaine avec condition et valeurs differentes

Bonjour,
dans une troisième feuille avec lien : ça va pas marcher. Il faut copier coller les valeurs puis convertir.
L'image dans la feuille outils est pour montrer comment j'ai créé la zone nommée (formule/gestionnaire de nom)
Cordialement
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Extraction d'une portion de chaine avec condition et valeurs differentes

Bonjour gpinpin, Dugenou :),

Un autre essai avec une fonction personnalisée VBA.
La fonction prend deux formes:
=extnum(B2) => Dans B2, on ne considère que les expressions commençant par "F". On renvoie les numéros de toutes ces expressions.

=extnum(B2;1) => Dans B2, on cherche toutes les expressions pouvant comportant un nombre valide (commençant par "F" ou isolé) On renvoie les numéros de toutes ces expressions. Le second paramètre peut être n'importe quoi. C'est le fait qu'il soit présent ou pas qui est utilisé dans le code de la fonction.

VB:
Function ExtNum(texte, Optional QueLesF)
Dim tablo, elem, DebutF As Boolean

ExtNum = vbNullString
tablo = Split(UCase(texte))
For Each elem In tablo
  DebutF = False
  If elem Like "F#*" Then elem = Replace(elem, "F", 0): DebutF = True
  elem = "0" & elem
  If elem Like "0#*" Then
    If IsNumeric(elem) Then
      If CInt(elem) = elem Then
        If DebutF And IsMissing(QueLesF) Then
          ExtNum = ExtNum & ";" & Format(CInt(elem), "###")
        ElseIf Not IsMissing(QueLesF) Then
          ExtNum = ExtNum & ";" & Format(CInt(elem), "###")
  End If: End If: End If: End If
Next elem
If Left(ExtNum, 1) = ";" Then ExtNum = Mid(ExtNum, 2)
End Function

nota: si on désire pour, chacune des deux formes, ne renvoyer que le premier élément trouvé, insérer l’instruction suivante avant la dernière ligne (End Function):
VB:
ExtNum = Split(";" & ExtNum, ";")(1)
 

Pièces jointes

  • gpinpin-ver1.xlsm
    62.4 KB · Affichages: 37
Dernière édition:

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 871
dernier inscrit
Maïmanko