Extraction des chaines de carateres
Résolu
Sleilo60
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
Sleilo60 Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Sleilo60 Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
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 !
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 !
A voir également:
- Extraction des chaines de carateres
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Comment décrypter les chaines cryptées sur eutelsat 16a - Forum Réseaux sociaux
- Problème réception chaînes 20 21 23 24 25 - Forum Téléviseurs
- Balayage des chaines - Forum TNT / Satellite / Réception
- Vous devez lancer l'extraction depuis un volume précédent pour décompresser ✓ - Forum Compression
4 réponses
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
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
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 :)
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 :)
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
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
Super !
Cela marche parfaitement !
Merci beaucoup :)
Cela marche parfaitement !
Merci beaucoup :)
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.
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.
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
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
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
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
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 :
eric
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