Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

  • Initiateur de la discussion Initiateur de la discussion Nazim
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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:
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)
 
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
 
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

[TABLE="width: 320"]
[TR]
[TD="width: 80"]N99991231[/TD]
[TD="width: 80"]O20130418[/TD]
[TD="width: 80"]N20131205[/TD]
[TD="width: 80"][/TD]
[/TR]
[TR]
[TD]N99991231[/TD]
[TD]O20130418[/TD]
[TD]N20131205[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]N09607037[/TD]
[TD]N00000000[/TD]
[TD]O20130418[/TD]
[TD]N20131205[/TD]
[/TR]
[TR]
[TD]N06406756[/TD]
[TD]N99991231[/TD]
[TD]O20130418[/TD]
[TD]N20131205[/TD]
[/TR]
[TR]
[TD]N99991231[/TD]
[TD]N20130418[/TD]
[TD]N20131205[/TD]
[TD][/TD]
[/TR]
[TR]
[TD]N00000000[/TD]
[TD]O20130418[/TD]
[TD]N20131205[/TD]
[TD][/TD]
[/TR]
[/TABLE]
 
Dernière modification par un modérateur:
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

Dernière édition:
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

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

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

voir en colonne AM,AP,BA, BC les séquences reconnues :
 

Pièces jointes

  • test(1).xlsm
    test(1).xlsm
    15.4 KB · Affichages: 27
  • test(1).xlsm
    test(1).xlsm
    15.4 KB · Affichages: 31
  • Capture.jpg
    70.9 KB · Affichages: 35
  • CaptureB.JPG
    60.7 KB · Affichages: 39
  • Capture.jpg
    60 KB · Affichages: 38
Dernière édition:
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

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

Bonsour®
on pourrait encore peaufiner en C10 🙄
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
😱
 
Re : Extraire n caractères à partir d'un caractère donné.



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.
 
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.
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
19
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…