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 SubMerci 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
Merci !
Bon après midi !