Extraire chaine de caractères

Résolu
moseca Messages postés 32 Date d'inscription   Statut Membre Dernière intervention   -  
Raymond PENTIER Messages postés 58990 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,


J'ai le problème suivant:

J'a i une chaine de caractère qui vient toujours sous cette forme : 1ABC2BCD3CDA
Donc il y a toujours un nombre qui précède une chaine de caractère, le nombre varie de 1 à 15.

je dois rechercher des caractères dans cette chaine. Par exemple: 1ABC ou 2 BCD. Et si les caractères se trouvent dedans j attribue une valeur.

Pour ce faire j ai utilise la formule suivante : SI(ESTERREUR(TROUVE($AE$66;1));0;$G$66). La formule marche tres bien mais il confond certains caractères : par exemple pour 11ABC, elle considère également 1ABC.

COMMENT FAIRE POUR DIFFERENCIER 11ABC ET 1ABC

MERCI

Si ce n est pas claire, je vais joindre mon fichier.

MERCI


A voir également:

7 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
Bonjour

En me basant sur la présentation de ton lien #2 à 5:12

cette macro utilise les relations régulières et écrit les Nombres en ent^te de ligne et les groupes de lettres en ent^te de colonnes de tableau
la macro est paramétrée pour permettre l'usage de plusieurs recherches

Option Explicit
Sub test()
decouper_chiffres_lettres Range("B1").Value, "C4"
End Sub

Sub decouper_chiffres_lettres(Texto, restitution)
Dim Reg As Object
Dim Extraction As Object, Digit As Object
Dim T_chiffres, Idx As Byte, T_pos, T_lettres, Depart As Byte

Application.ScreenUpdating = False
Set Reg = CreateObject("vbscript.regexp")
Reg.Global = True
Reg.Pattern = "(\d?\d)"
Texto = Range("B1")
Set Extraction = Reg.Execute(Texto)
ReDim T_chiffres(Extraction.Count - 1)
ReDim T_pos(Extraction.Count - 1)

For Each Digit In Extraction
T_pos(Idx) = Digit.Firstindex + 1
T_chiffres(Idx) = Digit.Value
Idx = Idx + 1
Next

ReDim T_lettres(UBound(T_pos))
For Idx = 0 To UBound(T_pos) - 1
Depart = T_pos(Idx) + Len(T_chiffres(Idx))
T_lettres(Idx) = Mid(Texto, T_pos(Idx) + Len(T_chiffres(Idx)), T_pos(Idx + 1) - Depart)
Next
T_lettres(Idx) = Right(Texto, Len(Texto) - T_pos(Idx) - 1)

Range(restitution).Offset(1, 0).Resize(Extraction.Count, 1) = Application.Transpose(T_chiffres)
Range(restitution).Offset(0, 1).Resize(1, UBound(T_pos) + 1) = T_lettres
End Sub

La maquette de W
https://www.cjoint.com/?3ErwUdD1Etx

En espérant une réponse (bonne ou mauvaise)....
1
moseca Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
BONJOUR,
Je vous remercie!! C'est génial.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
bonjour,

dans la macro, enlever la ligne
Texto = Range("B1")
erreur de précipitation: vu l'heure de réponse, envie d'aller au dodo....
0
moseca Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
D'accord. Merci encore pour ta sollicitude!
0
Raymond PENTIER Messages postés 58990 Date d'inscription   Statut Contributeur Dernière intervention   17 354
 
ça ne semble pas facile ! envoie toujours le fichier ; ça peut aider ...
0
moseca Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
0
Raymond PENTIER Messages postés 58990 Date d'inscription   Statut Contributeur Dernière intervention   17 354
 
Puisque le nombre-test varie de 1 à 15, il faudrait toujours saisir 2 chiffres, et remplacer 1ABC2BCD3CDA par 01ABC02BCD03CDA
Et dans la feuille Excel, à la place des nombres 1, 2, 3, 4, 11 des cellules A5:A9, il faudrait mettre les textes '01, '02, '03, '04, '11 ...
et tout marchera alors très bien !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
Bonjour

Comme dit Raymond (salut à toi), difficile sans changer le format de tes saisies, sinon, il y a des solutions via une macro
https://www.cjoint.com/?3ErmjY42Q1w

Cdlmnt
0
moseca Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
Salut! Je pense que ca marche par macro, je te remercie!!
0
moseca
 
Bonjour, j'ai ajouté votre la fonction chche sur plusieurs ligne de mon classeur mais ca ralentit le fichier, je suis a 10 Mo. ESt ce vraiment cette fonction qui rend le fichier lent à s'ouvrir? MERCI
0
moseca
 
Bonjour,
J'ai une autre question. J'ai un fichier de base que les autres usagers doivent utiliser comme modèle. Mais je ne veux pas qu'il altère le fichier. Alors, je veux que quand un usager clique sur sauver il apparaît un interface pour lui demande de sauvegarder sous....Il peut alors sauver les changement dans la version renommée. Donc le fichier initial ne sera pas altéré car personne ne peut le sauver avec des changements.

Comment faire ça? MERCI ENCORE
0
Raymond PENTIER Messages postés 58990 Date d'inscription   Statut Contributeur Dernière intervention   17 354
 
C'est simple : tu ne communiques le fichier modèle à personne ; tu fournis chaque fois une copie avec le nom qui te convient ...
0
tontong Messages postés 2572 Date d'inscription   Statut Membre Dernière intervention   1 062
 
Bonjour à tous,
Comme les nombres vont de 1 à 15 le chiffre des dizaines est 1 ou rien.

En C4 on vérifie si B1 contient 1EBT sans contenir 11EBT ce qui donne:
=SI(ET(ESTERREUR(TROUVE(CONCATENER($A5;1;C$4);$B$1;1));ESTNUM(TROUVE(CONCATENER($A5;C$4);$B$1;1)));$A$1;0)
On peut alléger:
=SI(ET(ESTERREUR(TROUVE($A5&1&C$4;$B$1;1));ESTNUM(TROUVE($A5&C$4;$B$1;1)));$A$1;0)
0
moseca
 
Merci! c super
0
moseca Messages postés 32 Date d'inscription   Statut Membre Dernière intervention  
 
Oui je comprend mais je ne peux contrôler la saisie, mais je pense que la macro fournie par ccm81 marche. merci!
0