Insérer un caractère en fin de chaine VBA

Bonjour,

Je bloque sur une macro.

L'idée est d'insérer un 2 à toutes les cellules dans une plage donnée qui commencent par un B. Les cellules auxquelles je veux attribuer ce 2 sont sur les lignes paires.

J'ai tenté de rédiger, mais cela ne fonctionne pas.

Sub paire()

Dim plage As Range, ligne As Range, c As Range

With Sheets("Visuel")
Set plage = .Range("E3:BQ58")

For i = 3 To 58
    If (i Mod 2 = 0) Then
'    Set ligne = Rows(i)

        For Each c In Rows(i)
            'If c <> "" Then
                If c.Value = Left(c.Value, 1) = "B" Then
                c.Value = c.Value & "2"

                End If
        Next c
    End If

Next i
End With

End Sub

De plus, j'aimerai que ce code s'applique à chaque fois que je modifie la page. Je passe qu'il faut mettre ce code dans la page avec

Private Sub Worksheet_Change(ByVal Target As Range)

... je pense savoir le faire.

Cordialement,

Leakim

Bonjour,

Peut-être

 For Each c In plage(i)
            'If c <> "" Then
               If Left(c, 1) = "B" Then
                c = c & "2"

                End If
        Next c

Bonjour Leakim,

A essayer :

Sub paire()
    Dim c As Range, i%
    With Sheets("Visuel").Range("E3:BQ58")
        For i = 2 To .Rows.Count Step 2
            For Each c In .Rows(i)
                If c > "" Then c = IIf(Asc(c) = 66, c & 2, c)
            Next c
        Next i
    End With
End Sub

Cordialement.


Et proposition pour l'évènementielle :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range, plage As Range
    Set plage = Intersect(Target, Me.Range("E3:BQ58"))
    If Not plage Is Nothing Then
        Application.EnableEvents = False
        For Each c In plage
            If c.Row Mod 2 = 0 And c > "" Then c = IIf(Asc(c) = 66, c & 2, c)
        Next c
        Application.EnableEvents = True
    End If
End Sub

Bonjour à vous deux et merci de votre sollicitude.

Je joins un fichier que j'ai anonymisé, car il y un bug. Je vous laisse regarder.

Merci encore.

Leakim

Re !

Mystérieux pour l'instant !

Pas dû à la condition, qui peut d'ailleurs être supprimée.

L'erreur 13 persiste, et pire, elle intervient même sur un MsgBox c.Value !

Si je fais une macro test à côté, testant sur ActiveCell, pas d'erreur. Il s'agit pourtant des mêmes cellules.

Je creuse...

Je ne saurais l'expliquer, mais la variable plage ne semble pas supportée, j'ai même réussi à avoir une erreur 94 (utilisation incorrecte de Null !) après la 13...

Cela fonctionne de cette façon :

Sub paire()
    Dim i%, k%
    With Sheets("Visuel").Range("E3:BQ58")
        For i = 2 To .Rows.Count Step 2
            For k = 1 To .Columns.Count
                If .Cells(i, k) <> "" Then .Cells(i, k) = _
                 IIf(Asc(.Cells(i, k)) = 66, .Cells(i, k) & 2, .Cells(i, k))
            Next k
        Next i
    End With
End Sub

Cependant je ne suis pas certain que Bureau 142, Bureau 72 ou Bureau 52... soit ce que tu veux obtenir.

Donc, il faudrait que tu confirmes ou précises ce qui doit être obtenu...

Re,

Si c'est exactement cela !!!

Je fais une recherche avec droite(**;1)=2, donc c'est nickel.

est ce possible de faire quelque soit le contenu de la cellule. Dans l'état actuel c'est seulement le cellule qui se terminent pas un chiffre.

On est en bonne voie.

Merci d'avance

Leakim

Ce qu'on testait à ta demande, c'est que cela commence par B. Si on supprime cette condition, on en met partout.

If .Cells(i, k) <> "" Then .Cells(i, k) = .Cells(i, k) & 2

en gardant le <>"" pour ne pas en mettre dans les cellules qui ne contiennent rien.

Re,

Super c'est nickel. Cela marche tellement bien que cela m'a ajouter un 2 sur les cellules que j'avais déjà modifiées.

C'est peut-être là ta question sur ce que je voulais obtenir de tout à l'heure.

Tu as raison il serait souhaitable d'avoir en fin de cellule *****"-2" et que lorsque l'événement se mets à jour il mette à jour les cellules qui sont sur les lignes paires, que le contenu soit non vide et que la fin du contenu ne soit pas "-2"

Je suis désolé de pas y avoir pensé avant

Est ce que tu peut y remédier ?

Leakim

Peut-être ceci alors :

Sub paire()
    Dim i%, k%
    With Sheets("Visuel").Range("E3:BQ58")
        For i = 2 To .Rows.Count Step 2
            For k = 1 To .Columns.Count
                If .Cells(i, k) <> "" Then
                    If Right(.Cells(i, k), 2) <> "-2" Then _
                     .Cells(i, k) = .Cells(i, k) & "-2"
                End If
            Next k
        Next i
    End With
End Sub

On ne le met que s'il n'y est pas.

Attention, si tu le passes après les précédents, tu vas seulement ajouter "-2" partout !

Bonjour Mferrand et le forum,

C'est fois c'est bon.

Merci pour cet accompagnement.

Leakim

De rien. A la prochaine...

Bonne journée.

Rechercher des sujets similaires à "inserer caractere fin chaine vba"