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

  • Initiateur de la discussion Initiateur de la discussion ivan27
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
 
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
 
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
 
'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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
372
Réponses
5
Affichages
623
Retour