Macro Remplace par(1) par(2) par(3) etc

Bonjour,

Alors voilà le titre est pas super explicite au premier abord mais mon problème est assez simple :

J'utilise des données numériques de code barre sur Excel, il se trouve que l'opérateur qui m’envoie ces codes barres s'est parfois trompé avec sa touche MAJ, résultat j’obtiens des choses incompréhensibles, vous allez mieux comprendre avec des exemples :

Il veut m'envoyer le code 1234567890

Sauf qu'il n'avait pas sa touche maj d'activée et vu qu'il tape avec un pad il m'a envoyé : &é"'(-è_çà

car sur un clavier français : (&é"'(-è_çà) avec MAJ activé = (1234567890)

é"àè&ççé = 23071992

&_"à''(- = 18304456

Vous avez compris,

Au début je me suis dit facile j'utilise une macro majuscule et c'est réglé, j'avais donc fait :

Sub majuscule()

For Each Cell In Selection

If Cell.HasFormula = False Then

Cell.Value = UCase(Cell.Value)

End If

Next

End Sub

Sauf que ça ne marche pas si j'ai un "é" ça ne me donne pas "2" mais "É"

Ainsi pour résumer je souhaiterais avoir une macro qui pour chaque cellule sélectionnée remplace :

& par 1

é par 2

" par 3

' par 4

( par 5

- par 6

è par 7

_ par 8

ç par 9

à par 0

Je suis sur que c'est très simple, en fouinant sur le forum je trouve des macros qui remplacent le contenu d'une cellule par autre chose mais j'arrive pas a trouver une macro qui remplace caractère par caractère. je suis sur que ça existe mais c'est pas évident de trouver les bons mots clefs pour définir ma recherche.

Merci d'avance,

Vico.

Bonjour,

une proposition

Sub majuscule()
For Each Cell In Selection
If Cell.HasFormula = False Then
cell.value=replace(cell.value,"&","1")
Cell.Value = replace(cell.value,"é","2")
'etc ...
End If
Next
End Sub

Bonjour,

Essaie ceci pour convertir chaîne figurant dans cellule active sélectionnée et afficher résultat en dessous :

Sub ConvertCh()
    Dim chconv$, carconv, carrés, i%
    carconv = Split("& é " & Chr(34) & " " & Chr(39) & " ( - è _ ç à")
    carrés = Split("1 2 3 4 5 6 7 8 9 0")
    chconv = ActiveCell.Value
    For i = 0 To 9
        chconv = Replace(chconv, carconv(i), carrés(i))
    Next i
    ActiveCell.Offset(1, 0).Value = carconv
End Sub

Cordialement

Ferrand

Bonjour,

Merci beaucoup pour vos réponses rapides mon problème est donc résolu,

Pour information j'utilise la macro proposée par H2SO4, la seconde macro elle ne fonctionne pas, quand je sélectionne une cellule elle me change celle d'en dessous et à l'inverse de ce que je demande, j'avais une série de chiffre dans la cellule en dessous de celle sélectionnée et ça l'a transformé en &

Merci encore !

EDIT : Voir les messages suivants, a ce jour la macro de MFerrand fonctionne et pas celle de H2SO4.

Je suis confus !!

Lapsus dans la valeur renvoyée : dernière ligne :

ActiveCell.Offset(1, 0).Value = chconv

Rétablir la bonne valeur.

Par contre j'avais signalé qu'elle inscrivait le résultat sur la cellule en-dessous.

Dans la même cellule : ActiveCell.Value = chconv

(mais là ça supprime la chaîne initiale)

Dans la cellule à côté : ActiveCell.Offset(0, 1).Value = chconv

Ailleurs...

Encore désolé !

Ferrand

Effectivement oui j'avais mal compris la phrase !

Mes valeurs de code barre sont en dessous les unes des autres il était donc important pour moi que ça remplace la cellule d'origine et pas en dessous.

J'ai donc rectifié comme énoncé soit :

Sub Majuscule()

Dim chconv$, carconv, carrés, i%

carconv = Split("& é " & Chr(34) & " " & Chr(39) & " ( - è _ ç à")

carrés = Split("1 2 3 4 5 6 7 8 9 0")

chconv = ActiveCell.Value

For i = 0 To 9

chconv = Replace(chconv, carconv(i), carrés(i))

Next i

ActiveCell.Value = chconv

End Sub

ça fonctionne parfaitement bien, les deux macros sont donc applicables merci à vous deux pour vos solutions rapides !

EDIT : Ahhh non une chose m'avait échappée, sur la première macro proposée par H2SO4 j'ai un problème en arrivant à la ligne :

cell.Value = Replace(cell.Value, """, "3")

Effectivement le """ n'est pas apprécié par VBA qui prend ça pour une erreur.

Je n'arrive donc qu'a utiliser la macro fraichement rectifiée de MFerrand. ceci dit cela me convient parfaitement c'est juste destiné à l'information d'un éventuel visiteur qui aurait le même problème que moi. (ne pensez pas que je vous met en concurrence )

Ok, merci du retour.

Si H2SO4 ne fournit pas une autre solution, remplace son guillemet entre guillemets (""") par Chr(34) , VBA acceptera mieux...

Bonne continuation.

Ferrand

MFerrand a écrit :

Ok, merci du retour.

Si H2SO4 ne fournit pas une autre solution, remplace son guillemet entre guillemets (""") par Chr(34) , VBA acceptera mieux...

Bonne continuation.

Ferrand

ou mets 4 "

cell.value= replace(cell.value,"""","3")
Rechercher des sujets similaires à "macro remplace etc"