VBA - Travail sur les chaînes de caractères

Bonjour,

Depuis 2 semaines j'essaie d'appliquer quelques traitements sur des chaînes de caractères.

C'est un sujet qui est assez bien traité sur internet, et sur ce forum.

Malgré cela, je n'ai pas encore compris comment m'y prendre, comment utiliser les len() mid() left() etc.

Dans mon tableau Excel, j'ai différents codes qui sont traités. Il arrive que des erreurs de saisie apparaissent, j'aimerais qu'elles soient corrigées avant que le reste du code ne s'active de façon à réduire les erreurs inutiles.

La situation :

Un code doit obligatoirement être composé de séries de 4 lettres ; sauf lorsque la correspondance du code en question ne contient que 3 lettres.

> Lorsqu'une partie du code contient 5 lettres au lieu de 4 alors supprimer la dernière lettre.

Ex :

- Pipta mili => Pipt mili

- Doryc pent ssp. penta => Dory pent ssp. pent

> Lorsqu'un code se termine par "sp" alors ajouter "." après "sp" sans que cela n'affecte les codes contenant sp.

- Ex : Hyac sp => Hyac sp. Mais Camp spec ne doit pas devenir Camp sp.ec

J'ai créé un petit document Excel pour montrer la situation si vous souhaitez regarder.

Ça n'a pas l'air compliqué en soit, mais je ne sais pas comment m'y prendre.

Par la suite j'aurai une flopée de corrections du même genre à faire, je pourrai, de ce fait, reprendre ce code.

Merci de votre attention,

Bon après-midi !

A plus tard.

Bonjour,

Pour le principe.

Cdlt.

Public Sub ConvertText()
Dim ws As Worksheet
Dim lastRow As Long, i As Long, j As Long
Dim tbl As Variant, x As Variant
Dim arr() As String, txt As String
    Set ws = Worksheets("Feuil2")
    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        tbl = .Cells(2, 1).Resize(lastRow - 1)
    End With
    ReDim arr(1 To UBound(tbl), 1 To 1)
    For i = LBound(tbl) To UBound(tbl)
        txt = ""
        x = Split(Application.Trim(tbl(i, 1)))
        For j = LBound(x) To UBound(x)
            txt = txt & " " & Left(x(j), 4)
        Next j
        If Right(txt, 2) = "sp" Then txt = txt & "."
        arr(i, 1) = Application.Trim(txt)
    Next i
    ws.Cells(2, 2).Resize(UBound(tbl), 1).Value = arr
End Sub

Merci beaucoup, c'est beaucoup plus complexe que ce que j'essayais de faire avec mes len et mid...

D'ailleurs j'ai encore un peu de mal à tout comprendre En revanche, ça fonctionne très bien et n'engendre pas le moindre temps de traitement en plus ! (Ce qui est important dans mon cas, vue que mon code prend déjà du temps à s'exécuter...)

Merci !

Bon après midi !

Rechercher des sujets similaires à "vba travail chaines caracteres"