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

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  2. Sleilo60 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  4. Sleilo60 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
     
    Super !

    Cela marche parfaitement !

    Merci beaucoup :)
    0
    1. Sleilo60 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    2. Sleilo60 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
       
      en fait il faudrait si possible prendre en compte les tirets et les dollars :
      -
      $
      0
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    4. Sleilo60 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    5. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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