Macro pour remplacer le troisième chiffre d'une valeur

Bonjour,

je souhaite trouver la solution de macro qui remplace le troisième chiffre d'une valeur (exemple : 101)dans plusieurs cellules par une autre valeur (1, 2, 3, 4, 5, 6 ou 7) sélectionner dans une liste déroulante.

Dim Cellvalue As Integer

Cellvalue = Range("D5").Value
MsgBox (Cellvalue)

Cells.Replace What:="1", Replacement:=Cellvalue, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

la macro ci-dessus que ne s'applique que pour un seul cas (cas où le troisième chiffre est égal à 1) et j'aimerais l'appliquer pour tous les cas possible du troisième chiffre.

Merci pour votre aide,

Bonjour,

Excusez-moi mais le code proposé ne vérifie pas si le "1" est en 3e caractère.

Vous devriez convertir les numéros en Strings, et utiliser les opérateurs correspondants

Le code pour remplacer le dernier caractère par 2 serait

Dim Cellvalue As String
Cellvalue = CStr(Range("D5").Value)
MsgBox (Cellvalue)

Dim remplacement As String
remplacement = "2"

Cellvalue = Left(Cellvalue, len(Cellvalue) – 1) & remplacement

' écriture dans Excel
Range("D5").Value = Cellvalue

Bonjour à tous les deux. J'utiliserais la fonction Mid$ pour aller plus vite :

    Dim cellvalue As String, remplacement As String    
    cellvalue = Range("D5")
    remplacement = "2"
    Mid(cellvalue, 3, 1) = remplacement
    Range("D5") = cellvalue

bonjour Cédric, salut Optimix,Saboh12617

comme ceci ?

Sub remplacer()
     For Each c In Range("A1:A100").Cells
          With c
               If Len(.Value) >= 3 Then .Value = --(Left(c.Value, 2) & "7" & Mid(.Value, 4))
          End With
     Next
End Sub
11cedric.xlsb (13.82 Ko)

Pour mieux poser le problème, je veux avoir une macro qui modifie le troisième chiffre de chaque cellule de "A2-A10" en fonction du choix sélectionner dans la liste déroulante de la cellule B1

merci pour votre aide,

screenshot 281

re,

comme ceci

Sub Remplacer()
     Dim c, s

     With Range("B1")
          If Len(.Value) <> 1 Then MsgBox "longueur de B1 n'est pas 1 charactère", vbCritical: Exit Sub
          s = .Value
     End With

     For Each c In Range("A2:A10").Cells
          With c
               If Len(.Value) >= 3 Then .Value = Left(c.Value, 2) & s & Mid(.Value, 4)
          End With
     Next
End Sub

Une proposition :

12essai.xlsm (20.00 Ko)
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim cellValue As String

    If Target.Column <> 2 Then Exit Sub
    cellValue = Cells(Target.Row, 1)
    Mid(cellValue, 3, 1) = Cells(Target.Row, 2)
    Target.Offset(0, -1).Value = cellValue
End Sub

@optimix,

c'est une faute ce "Mid(cellValue, 3, 1)" à gauche du "=" ??? Je n'ai jamais vu cela.

#BsAlv
Avez-vous une erreur avec le fichier que j'ai proposé ?
pour info : https://learn.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/mid-statement

Intéressant. De toute évidence l'appel de Mid est implicitement réaffecté à la variable sur lequel la fonction opère.

Puisque par défaut en VBA les paramètres sont passés ByRef, en pointeurs, la fonction Mid ne crée pas une copie locale de cellValue, mais réaffecte directement le résultat de l'opération sur son paramètre… Tout de même intriguant comme syntaxe meme si c'est concis.

Comme quoi bon à savoir, l'instruction Mid modifie la chaine de caractères sur laquelle elle est appelée. C'est logique mais perturbant.

Edit suite au com de Optimix : tout simplement... Je regardais Mid function (Visual Basic for Applications) | Microsoft Learn au lieu de Mid statement (VBA) | Microsoft Learn ... a gauche du "=" on affecte, à droite on calcule. Deux fonctions différentes (avec le meme nom) suivant l'emplacement tout simplement.

Tout de même intriguant comme syntaxe meme si c'est concis

C'est exact, j'avais été très surpris par cette fonction/instruction d'assignation il y a des lustres. Elle existait déjà sous VB 2.0.
Mais c'est tellement pratique et facile à lire qu'on finit par l'adopter.

J'en profite pour mettre en ligne le besoin de Cédric d'hier à 16h30.

11essai2.xlsm (20.27 Ko)

On comprend mieux avec ce petit code plusieurs choses. Notamment le highlight syntaxique est différent pour la fonction Mid à gauche et à droite. Malheureusement l'aide via F1 ne renvoie que sur la page des keywords où les 2 fonctions sont bien listées, mais sans renvoyer directement sur "la bonne".

image

Mais la String a se fait bien modifier par l'instruction située à gauche, là où b reste inchangée via le mid de droite.

image

Une curiosité de plus : on peut même utiliser le signe "$" des string :

Mid$(a, 3, 2) = "BB"

@Optimix,

avec Excel365, je reçois cette erreur "5" sur la ligne "Mid(cellValue, 3, 1) = ...", je ne connias pas la raison

image

d'après https://support.microsoft.com/en-gb/topic/-run-time-error-5-when-you-use-mid-left-or-right-function-... cela voudrait dire que tu as dans cellValue une String de longueur < 3

supprimé

Bonjour à tous,

Une version qui autorise à remplacer le 3° caractère par aucun (effacement) ou par un caractère (remplacement) ou par plusieurs caractères (effacement et insertion) :

Sub Troquer()
Dim cible, N&, t, i&
   cible = [b1]
   N = Me.UsedRange.Row + Me.UsedRange.Rows.Count - 1
   If N < 3 Then Exit Sub Else t = Range(Range("a3"), Cells(N + 1, "a")).Value
   For i = 1 To UBound(t)
      If Len(t(i, 1)) >= 3 Then t(i, 1) = Left(t(i, 1), 2) & cible & Mid(t(i, 1), 4)
   Next i
   Range("a3").Resize(UBound(t), 1) = t
End Sub
Rechercher des sujets similaires à "macro remplacer troisieme chiffre valeur"