Microsoft 365 Remplacement de l'esperluette "&" par "et"

ivan27

XLDnaute Occasionnel
Bonjour à tous,

Pour remplacer dans une liste l'esperluette par ''et'' j'utilise ceci :

VB:
Sub test()
 For Each c In Range("a1", "a" & Range("a65000").End(xlUp).Row)
  c.Value = Replace(c.Value, "&", "et")
 Next c
End Sub

Je viens de m'apercevoir que ce bout de code supprime les points ''.'' placés après des chiffres. Exemple en pièce jointe.

Auriez-vous une solution pour faire le même travail en conservant les points SVP ?

Bien cordialement et bonne journée

Ivan
 

Pièces jointes

  • ClasseurTest.xlsm
    12.5 KB · Affichages: 14

vgendron

XLDnaute Barbatruc
Bonjour

ce n'est pas ta macro qui supprime directement les points, mais Excel lorsqu'il convertit le contenu de la cellule lorsqu'il détecte qu'il s'agit d'un nombre

si tu veux garder le point après les nombres, il faut traiter tout sous forme de texte==> Donc appliquer le format texte à la zone à traiter

VB:
Sub test()
Set zone = Range("a1", "a" & Range("a65000").End(xlUp).Row)
zone.NumberFormat = "@"
 For Each c In zone
  c.Value = CStr(Replace(c, "&", "et"))
 Next c
End Sub
 

Lolote83

XLDnaute Barbatruc
Bonjour,
Le fait que le point s'enlève, cela concerne uniquement les nombres. Si tu valides à la mano la cellule A5, tu remarqueras que celle-ci supprime le point car aucune décimale
Donc pour palier à ceci, je teste si la cellule est numérique et dans ce cas je ne traite pas le &

VB:
Sub test()
    For Each c In Range("a1", "a" & Range("a65000").End(xlUp).Row)
        If IsNumeric(c.Value) = False Then
            c.Value = Replace(c.Value, "&", "et")
        End If
    Next c
End Sub

OUPS ! Hola, il y a déjà du monde. Bonjour à tous

@+ Lolote83
 

jm.andryszak

XLDnaute Occasionnel
Bonjour
A tester, je ne vois pas d'anomalie.
Option Explicit
Sub Test()
Dim Derniereligne
Dim c As Range
Derniereligne = Range("a" & Rows.Count).End(xlUp).Row

Range("b1:b" & Derniereligne).NumberFormat = "@"

For Each c In Range("a1" & ":" & "a" & Derniereligne)
If InStr(1, c.Value, "&") > 0 Then
c.Offset(, 1).Value = Replace(c.Value, "&", "et")
Else
c.Offset(, 1).Value = c.Value
End If
Next
End Sub
 

Oneida

XLDnaute Impliqué
'Boucle seulement sur les cellules concernees
Sub test()
With Worksheets("Feuil1")
Nb = Application.CountIf(.Columns(1), "*&*") 'nombre de fois
If Nb > 0 Then
lig = 1
For n = 1 To Nb
.Range(.Columns(1).Find("*&*", .Cells(lig, 1), , xlWhole).Address) = Replace(.Range(.Columns(1).Find("*&*", .Cells(lig, 1), , xlWhole).Address), "&", "et") 'remplacement
Next n
End If
End With
End Sub
 

Discussions similaires

Réponses
3
Affichages
205

Statistiques des forums

Discussions
312 215
Messages
2 086 325
Membres
103 179
dernier inscrit
BERSEB50