Extraire n caractères à partir d'un caractère donné.

Nazim

XLDnaute Junior
Bonjour,

dans un programme que je souhaite faire, je rencontre un problème dans l'extraction des données.

Pour le résoudre voici mon idée:

- je dois chercher dans une ligne donné, une séquence de caractère qui commence par "O" ou "N" puis (8chiffres) ensuite "O" ou "N et encore une fois 8 chiffres. et mettre le résultat dans 4 cellules :
[cellule1: O ou N]
[Cellule2:8 chiffres]
[cellule3: O ou N]
[Cellule2:8 chiffres]


:)
 
Dernière modification par un modérateur:

CPk

XLDnaute Impliqué
Re : Extraire n caractères à partir d'un caractère donné.

Bonjour, sur la première ligne je ne trouve qu'une occurrence correspondant au critère, c'est ceci :

O20130418N.

Le résultat est juste où il doit y avoir 3 autres séries de 1 lettre + 8 chiffres ? (je ne parle que pour la ligne 1)
 

Nazim

XLDnaute Junior
Re : Extraire n caractères à partir d'un caractère donné.

Bonjour,
pour la première ligne, voici le résultat attendu O20130418N20131205.

donc il y'a deux séries: lettre+8chiffre, lettre+8chiffres, sachant que ces dernieres sont toujours concaténés.
par contre c'est pas toujours le même emplacement dans les lignes.

Merci
 

CPk

XLDnaute Impliqué
Re : Extraire n caractères à partir d'un caractère donné.

hum...pardon d'être chieur...Mais autant l'être jusqu'au bout.
Si il faut prendre en compte N20131205 car les 8 chiffres sont précédés du N
Ne faudrait-il pas avoir également en résultat (toujours pour la première ligne) : N99991231 ? C'est bien un N suivi de 8 chiffres ?
Voici pour le moment un résultat que j'obtiens pour les lignes proposées dans le fichier

N99991231O20130418N20131205
N99991231O20130418N20131205
N09607037N00000000O20130418N20131205
N06406756N99991231O20130418N20131205
N99991231N20130418N20131205
N00000000O20130418N20131205
 
Dernière modification par un modérateur:

job75

XLDnaute Barbatruc
Re : Extraire n caractères à partir d'un caractère donné.

Bonjour Nazim, CPk,

Voyez le fichier joint qui utilise cette fonction macro matricielle :

Code:
Function ON_8(t$)
Dim i%, n%, x$, a$(3) 'base 0
For i = 1 To Len(t) - 8
  If n > 2 Then Exit For
  x = Mid(t, i, 1)
  If x = "O" Or x = "N" Then
    If Mid(t, i + 1, 8) Like "########" Then
      a(n) = x: a(n + 1) = Mid(t, i + 1, 8)
      i = i + 8: n = n + 2
    End If
  End If
Next
ON_8 = a 'matrice (vecteur ligne)
End Function
Le code doit bien entendu être placé dans un module standard (Module1).

Edit : j'ai travaillé sur l'énoncé initial du post #1, vous l'avez ensuite modifié...

Quel est le bon ?

A+
 

Pièces jointes

  • test(1).xlsm
    17.8 KB · Affichages: 34
  • test(1).xlsm
    17.8 KB · Affichages: 35
Dernière édition:

job75

XLDnaute Barbatruc
Re : Extraire n caractères à partir d'un caractère donné.

Re,

Si maintenant on recherche les chaînes commençant par "O20" ou N20" utiliser :

Code:
Function ON_8(t$)
Dim i%, n%, a$(3) 'base 0
For i = 1 To Len(t) - 8
  If n > 2 Then Exit For
  If Mid(t, i, 3) = "O20" Or Mid(t, i, 3) = "N20" Then
    If Mid(t, i + 3, 6) Like "######" Then
      a(n) = Mid(t, i, 1): a(n + 1) = Mid(t, i + 1, 8)
      i = i + 8: n = n + 2
    End If
  End If
Next
ON_8 = a 'matrice (vecteur ligne)
End Function
Fichier (2), les 6 lignes donnent les mêmes résultats.

A+
 

Pièces jointes

  • test(2).xlsm
    17.9 KB · Affichages: 24
  • test(2).xlsm
    17.9 KB · Affichages: 25

job75

XLDnaute Barbatruc
Re : Extraire n caractères à partir d'un caractère donné.

Re,

je vais chercher dans la chaîne de caractère une séquence qui commence soit par N20 ou O20, si c'est le cas, extraire les 18 caractères à partir de N ou de O

Si l'on est sûr de toujours obtenir ainsi le résultat souhaité alors c'est plus simple et plus rapide :

Code:
Function ON_8(t$)
Dim i%, a$(3) 'base 0
For i = 1 To Len(t) - 8
  If Mid(t, i, 3) = "O20" Or Mid(t, i, 3) = "N20" Then
    a(0) = Mid(t, i, 1): a(1) = Mid(t, i + 1, 8)
    a(2) = Mid(t, i + 9, 1): a(3) = Mid(t, i + 10, 8)
    Exit For
  End If
Next
ON_8 = a 'matrice (vecteur ligne)
End Function
Fichier (2 bis).

A+
 

Pièces jointes

  • test(2 bis).xlsm
    17.9 KB · Affichages: 37

Modeste geedee

XLDnaute Barbatruc
Re : Extraire n caractères à partir d'un caractère donné.

Bonsour® MALLEK SG
en analysant les données fournies ...
ce fichier est constitué de données à largeur fixe
il apparaît par ailleurs que de nombreuses séquences de 8 chiffres s'apparentent à des dates de type AAAAMMJJ
ne possédant pas les entêtes des champs de données :(

voir en pièce jointe la restitution obtenue via le menu Données > convertir > largeur fixe
Capture.jpg CaptureB.JPG
voir en colonne AM,AP,BA, BC les séquences reconnues :
Capture.jpg
 

Pièces jointes

  • test(1).xlsm
    15.4 KB · Affichages: 27
  • test(1).xlsm
    15.4 KB · Affichages: 31
  • Capture.jpg
    Capture.jpg
    70.9 KB · Affichages: 33
  • CaptureB.JPG
    CaptureB.JPG
    60.7 KB · Affichages: 37
  • Capture.jpg
    Capture.jpg
    60 KB · Affichages: 36
Dernière édition:

job75

XLDnaute Barbatruc
Re : Extraire n caractères à partir d'un caractère donné.

Bonjour le fil, le forum,

Merci Modeste geedee d'avoir bien vu que les textes sont constitués de champs alignés.

Dans la mesure où le texte recherché commence toujours au 674ème caractère, pas besoin de VBA.

Voyez les formules dans le fichier joint.

Bonne journée.
 

Pièces jointes

  • test par formule(1).xlsx
    11.3 KB · Affichages: 24
  • test par formule(1).xlsx
    11.3 KB · Affichages: 26

Modeste geedee

XLDnaute Barbatruc
Re : Extraire n caractères à partir d'un caractère donné.

Bonsour®
on pourrait encore peaufiner en C10 :rolleyes:
Code:
=1*TEXTE(1*STXT($A10;674+NON(MOD(COLONNE(B10);2))+9*(COLONNE(B10)>2);1+7*NON(MOD(COLONNE(B10);2)));"0000\/00\/00")
format de cellule : jj/mm/aaaa
:eek:
 

job75

XLDnaute Barbatruc
Re : Extraire n caractères à partir d'un caractère donné.

Re,

Pour convertir les colonnes C et E en dates c'est en effet assez simple, voir ce fichier (2) et le nom défini X.

A+
 

Pièces jointes

  • test par formule(2).xlsx
    11.5 KB · Affichages: 19
  • test par formule(2).xlsx
    11.5 KB · Affichages: 29

Nazim

XLDnaute Junior
Re : Extraire n caractères à partir d'un caractère donné.

Re,

Si maintenant on recherche les chaînes commençant par "O20" ou N20" utiliser :

Code:
Function ON_8(t$)
Dim i%, n%, a$(3) 'base 0
For i = 1 To Len(t) - 8
  If n > 2 Then Exit For
  If Mid(t, i, 3) = "O20" Or Mid(t, i, 3) = "N20" Then
    If Mid(t, i + 3, 6) Like "######" Then
      a(n) = Mid(t, i, 1): a(n + 1) = Mid(t, i + 1, 8)
      i = i + 8: n = n + 2
    End If
  End If
Next
ON_8 = a 'matrice (vecteur ligne)
End Function
Fichier (2), les 6 lignes donnent les mêmes résultats.

A+


Bonjour,

Merci pour la réponse que tu m'as apportée, juste une dérnière question:
le résultat que tu obtiens par la fonction est bon, par contre est ce que c'est possible de m'aider pour l'integrer d'une macro ? je n'arrive pas a faire appel a cette macro pour un autre fichier.
 

Nazim

XLDnaute Junior
Re : Extraire n caractères à partir d'un caractère donné.

Bonjour CPk,

Désolé pour le retard que j'ai pris avant de répondre.
Pour ta remarque, non, il faudrait prendre N suivi de 8 chiffres sachant que les 8 chiffres correspond a une date qui commence par (20) car dans mon fichier global on trouvera 2014,2015,2013...
donc je cherche plûtot a extraire les lignes qui commencent par O20 ou N20.
 

Nazim

XLDnaute Junior
Re : Extraire n caractères à partir d'un caractère donné.

Bonjour Modeste,job7

Merci pour vos réponses mais le problème c'est que c'est pas toujours le meme emplacement (numéro de ligne) c'est vrai que sur l'exemple test la largeur des des données n'est pas fixe...

donc votre méthode ne marche pas trop avec tous mes fichiers

Merci
 

Discussions similaires

Statistiques des forums

Discussions
312 203
Messages
2 086 194
Membres
103 153
dernier inscrit
SamirN