Remplacer le premier caractere d'une chaine

Bonjour,

Je suis débutant, cela fait plusieurs jours que je cale sur ma macro. Elle doit effectuer le remplacement du premier caractère d'une chaine si celle ci comporte un zéro.

Dans l'absolue elle fonctionne, sauf que les changements affecte aussi les cellules contenant des zéros qu'elle que soit leur place.

Ai je fait le bon choix de la fonction replace, ne manque t il pas une condition... je sais plus

Merci pour votre aide

35test.xlsm (12.87 Ko)

Bonsoir,

D'abord éliminer tout Select pour conserver un peu de tenue à un code VBA ! , ensuite typer Range une variable devant représenter une cellule, enfin la fonction Replace permet de nombreuses ruses... pour faire en sorte que le fragment de chaîne remplacé soit unique !

Sub remplacercaractere()
    Dim c As Range
    With Worksheets("A")
        For Each c In .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp))
            c.Value = Replace(Replace("@" & c, "@0", "A"), "@", "")
        Next c
    End With
End Sub

Cordialement.

edit : petite correction, ça va mieux avec...

Bonjour,

voici un exemple,

Sub remplacercaractere()
'remplacer le 1er caractere par un "A" si celui ci est un zéro
Dim c As Range, sh1, LastRw As Long
Set sh1 = Sheets("A")
LastRw = sh1.Cells(Rows.Count, 2).End(xlUp).Row

For Each c In sh1.Range("B2:B" & LastRw)
  If Left(c, 1) = 0 Then
    c.Value = "A" & Right(c, Len(c) - 1)
  End If
Next c
Set sh1 = Nothing
End Sub

Bonjour à tous

Un essai avec ce code:?

Sub remplacercaractere()
Dim i&, tablo
  With Sheets("A")
    tablo = .Range(.Cells(1, "b"), .Cells(.Rows.Count, "b").End(xlUp))
    For i = 1 To UBound(tablo)
      If tablo(i, 1) Like "0*" Then tablo(i, 1) = "A" & Mid(tablo(i, 1), 2)
    Next i
    .Cells(1, "b").Resize(UBound(tablo)) = tablo
  End With
End Sub

Bonjour,

et sans macro :

=SUBSTITUE(GAUCHE(B2;1);"0";"A")&STXT(B2;2;99)

Bonjour à tous,

Une autre version, utilisant Mid (instruction)

Sub remplacercaractere()
    Dim Tref, ref
    With Worksheets("A")
        Tref = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value
        For Each ref In Tref
            If ref Like "0*" Then Mid(ref, 1, 1) = "A"
        Next ref
        .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp)).Value = Tref
    End With
End Sub

Cordialement.

Salut MFerrand, Bonjour à tous, Hello Kengi ... encore plus court

Sub remplacercaractere()
    Dim cel As Range
    For Each cel In Range(Cells(2, 2), Cells(Rows.Count, 2).End(xlUp))
        cel = Replace(Mid(cel, 1, 1), "0", "A") & Mid(cel, 2, Len(cel))
    Next cel
End Sub

Steelson:

Tu raccourcis effectivement avec utilisation de Mid (fonction)

Mon propos était cependant l'utilisation de Mid (instruction, à ne pas confondre avec la fonction), non présente jusqu'à présent dans les réponses.

Là je ne sais pas s'il y a des manières de faire nouvelles que l'on puisse invoquer...

Cordialement.

Bonjour,

Un grand merci pour commencer, pour votre aide aussi rapide. j'ai testé l'ensemble des propositions,elles fonctionnent toutes donc merci encore.

Par contre je ne comprends pas les subtilités par rapport aux une et aux autres, juste une petite différence sur celle de Mferrand qui change le genre de standard à nombre.

Par contre j'aurais aimé savoir pourquoi ma macro ne fonctionne pas, malgré les paramètres conditionnel que j'ai mis dans la fonction "replace".

cell.Value = Replace(cell.Value, "A", "0", 1, 1)

Merci

Bonsoir,

Par contre je ne comprends pas les subtilités par rapport aux une et aux autres, juste une petite différence sur celle de Mferrand qui change le genre de standard à nombre.

J'ai fait ça moi ! Tu es sûr ? Vérifie donc !

Pour :

cell.Value = Replace(cell.Value, "A", "0", 1, 1)

Cela remplace le 1er 0 de la chaîne, s'il existe, qui ne se trouve pas forcément en position 1 !!

Cordialement.

Bonjour,

Effectivement je viens de refaire un test cela n'affecte en rien le genre, à force de manipulation j'ai du peut être faire une mauvaise manip .

C'est plus limpide, j'ai mal interprété la fonction replace, merci beaucoup pour votre explication.

Cordialement

Rechercher des sujets similaires à "remplacer premier caractere chaine"