Extraction des chaines de carateres

Résolu/Fermé
Sleilo60 Messages postés 13 Date d'inscription mercredi 12 février 2014 Statut Membre Dernière intervention 2 juillet 2014 - 12 févr. 2014 à 15:53
Sleilo60 Messages postés 13 Date d'inscription mercredi 12 février 2014 Statut Membre Dernière intervention 2 juillet 2014 - 2 juil. 2014 à 11:03
Bonjour,

J'ai une colonne de références du type : ABS050TX40-60S et je souhaiterai la décomposer sur les colonnes de droite de cette façon : ABS / 050 / TX / 40 / 60 / S
en sachant que sur mes 11 000 références, le nombre de lettre ou chiffre varie.

j'ai trouvé comment extraire les chaines numériques ou alphanumériques mais pas les 2 en même temps :

Sub ExtractionChiffre_Lettres()

j = 1
While (Cells(j, 1).Value <> "")

'Extraction des chaines numériques :
For i = 1 To rng.Characters.Count
If IsNumeric(rng.Characters(i, 1).Text) Then
A = i
Do While IsNumeric(rng.Characters(A, 1).Text)
temp = temp & rng.Characters(A, 1).Text
A = A + 1
Loop
j = j + 1
Cells(1, j) = temp
i = A
temp = ""
End If
Next

'Extraction des chaines alphanumériques :
For i = 1 To rng.Characters.Count
If Not IsNumeric(rng.Characters(i, 1).Text) Then
A = i
Do While Not IsNumeric(rng.Characters(A, 1).Text)
temp = temp & rng.Characters(A, 1).Text
A = A + 1
Loop
j = j + 1
Cells(1, j) = temp
i = A
temp = ""
End If

Next

End Sub


et en plus, la 2eme action écrase la 1ere... et cela ne fonctionne que sur la cellule A1, pas sur toute la colonne :(

Quelqu'un aurait-il une solution ?



Merci d'avance !

4 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
12 févr. 2014 à 15:59
Bonjour,

en sachant que sur mes 11 000 références, le nombre de lettre ou chiffre varie
Il faut que tu fournisses un fichier avec tous les cas rencontrés et le résultats attendu, sans aucune ambiguïté sur l'extraction.

cjoint.com et coller ici le lien fourni.

eric

0
Sleilo60 Messages postés 13 Date d'inscription mercredi 12 février 2014 Statut Membre Dernière intervention 2 juillet 2014
13 févr. 2014 à 19:13
Bonsoir,

Désolée pour le retour tardif, mais au bureau le site de dépôt des pièces jointes est bloqué. Je bosse de la maison du coup :)

le fichier d'exemple est ici :


https://www.cjoint.com/?0Bntkfrc0Ma


Merci :)
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
14 févr. 2014 à 00:30
Bonsoir,

Plutôt que de faire x cas particuliers, pour simplifier en gros ce que tu veux c'est une nouvelle colonne si "-", ou bien si on passe de lettre en chiffre ou l'inverse.
https://www.cjoint.com/c/DBoaA2I7JeG
Regarde si ça te va (la réponse doit être oui, parce que c'est un peu prise de tête et je ne me vois pas replonger dedans ;-) )

eric
0
Sleilo60 Messages postés 13 Date d'inscription mercredi 12 février 2014 Statut Membre Dernière intervention 2 juillet 2014
14 févr. 2014 à 12:41
Super !

Cela marche parfaitement !

Merci beaucoup :)
0
Sleilo60 Messages postés 13 Date d'inscription mercredi 12 février 2014 Statut Membre Dernière intervention 2 juillet 2014
10 mars 2014 à 14:22
Me revoilà,

La macro fonctionne à merveille, par contre j'ai rencontré plusieurs cas avec des tirets et il faudrait pouvoir conserver les tirets dans l'extraction ( - ), comme une chaîne de caractère à part entière. C'est possible ?

pour obtenir ABS055TK050-12 --> ABS / 055 / TK / 050 / - / 12


Merci.
0
Sleilo60 Messages postés 13 Date d'inscription mercredi 12 février 2014 Statut Membre Dernière intervention 2 juillet 2014
10 mars 2014 à 14:26
en fait il faudrait si possible prendre en compte les tirets et les dollars :
-
$
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 10/03/2014 à 18:59
Bonjour,

et pourquoi ce tiret là plus qu'un autre ?
Quelle la règle qui le distingue et permet de le reconnaitre ?
Et les $ tu leur veux quoi ? Il faut expliquer, je n'ai pas de boules de cristal...
Merci, en plus des explications supplémentaires, de déposer un fichier avec tous les cas de figure, les règles, le résultat attendu, et la macro telle qu'elle est actuellement.
Sans garanti de résultat car c'était déjà prise de tête...

eric
0
Sleilo60 Messages postés 13 Date d'inscription mercredi 12 février 2014 Statut Membre Dernière intervention 2 juillet 2014
11 mars 2014 à 14:05
Bonjour,

J'ai actualisé le fichier d'exemple avec la macro actuelle :

https://www.cjoint.com/?0Clock9OXIF

Pourquoi le tiret et $, parce qu'ils ressortent dans nos références, mais si pour simplifier il est préférable de ne pas distinguer un caractère particulier, ça ira aussi, du moment qu'on arrive a décomposer la référence peu importe le caractère.

La macro actuelle plante sur les caractères spéciaux.

Merci
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
11 mars 2014 à 15:48
La macro plante sur les espace.
C'est normal. Il n'y en avait pas dans la liste complète (!?!) des cas de figure que je t'avais demandée.
Remplace par :
Sub decomposeRef()
    Dim lig As Long, derlig As Long, ref As Variant
    derlig = Cells(Rows.Count, 1).End(xlUp).Row
    Application.ScreenUpdating = False
    ' nettoyer 6 colonnes
    [B:G].ClearContents
    ' traiter ligne
    For lig = 2 To derlig
        ref = Split(ajoutSep(Replace(Trim(Cells(lig, 1)), " ", "-")), "-")
        Cells(lig, 2).Resize(1, UBound(ref) + 1) = ref
    Next lig
    
    Application.ScreenUpdating = True
End Sub

eric
0