macro supprimer des caractères indésirables dans les codes

PrinceCorwin

XLDnaute Occasionnel
Bonjour,

Comme le titre le suggère, je souhaite préparer ne liste de code article en vue d'une migration dans un nouvel ERP.
Les codes des articles devront respecter un format de Code à Barre C39.
Ne connaissant pas trop les expressions régulières, je vous demande de l'aide.

Les caractères autorisés sont :
- A-Z,
- 0-9,
- - (moins), . (point), / (divisé).

Donc si on rencontre un de ces caractères c'est OK on copie, sinon on le change par '-' (moins)

J'ai une liste de 19k+ de codes articles à modifier.

Merci pour votre aide
JCB
 

john

XLDnaute Impliqué
Re : macro supprimer des caractères indésirables dans les codes

Bonjour,
Les codes, tu les as d'où ? d'un fichier ou tu les encodes manuellement ??
Si ça vient d'un fichier, tu peux joindre un exemple ici comme ça ce sera plus facile pour pouvoir faire l'importation.
Et dans quel format est la sortie ? fichier excel ou texte ou ???
Merci d'avance.
John
 

job75

XLDnaute Barbatruc
Re : macro supprimer des caractères indésirables dans les codes

Bonsoir PrinceCorwin, john,

Ce code traite toutes les valeurs du UsedRange :

Code:
Option Compare Text 'ignore la casse, facultatif

Sub Nettoyage()
Dim F As Worksheet, liste, t, ncol%, i&, j%, x$, k%
Set F = Feuil1 'CodeName, à adapter
liste = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-./"
t = F.Range(F.UsedRange, F.UsedRange.Offset(1)) 'au moins 2 éléments
ncol = UBound(t, 2)
For i = 1 To UBound(t)
  For j = 1 To ncol
    x = t(i, j)
    For k = 1 To Len(x)
      If InStr(liste, Mid(x, k, 1)) = 0 Then _
        x = Application.Replace(x, k, 1, "-")
    Next
    t(i, j) = x
  Next
Next
F.UsedRange = t
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : macro supprimer des caractères indésirables dans les codes

Re,

Si l'on ne veut pas qu'il y ait des conversions de nombres mettre toute la feuille au format texte :

Code:
Option Compare Text 'ignore la casse, facultatif

Sub Nettoyage()
Dim F As Worksheet, liste, t, ncol%, i&, j%, x$, k%
Set F = Feuil1 'CodeName, à adapter
liste = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-./"
t = F.Range(F.UsedRange, F.UsedRange.Offset(1)) 'au moins 2 éléments
ncol = UBound(t, 2)
For i = 1 To UBound(t)
  For j = 1 To ncol
    x = t(i, j)
    For k = 1 To Len(x)
      If InStr(liste, Mid(x, k, 1)) = 0 Then _
        x = Application.Replace(x, k, 1, "-")
    Next
    t(i, j) = x
  Next
Next
F.Cells.NumberFormat = "@" 'format texte
F.UsedRange = t
End Sub
Edit : ou mieux, pour éviter la conversion en dates :

Code:
Option Compare Text 'ignore la casse, facultatif

Sub Nettoyage()
Dim F As Worksheet, liste, t, ncol%, i&, j%, x$, k%
Set F = Feuil1 'CodeName, à adapter
liste = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-./"
t = F.Range(F.UsedRange, F.UsedRange.Offset(1)) 'au moins 2 éléments
ncol = UBound(t, 2)
For i = 1 To UBound(t)
  For j = 1 To ncol
    x = t(i, j)
    For k = 1 To Len(x)
      If InStr(liste, Mid(x, k, 1)) = 0 Then _
        x = Application.Replace(x, k, 1, "-")
    Next
    t(i, j) = IIf(IsDate(x), "'", "") & x
  Next
Next
F.UsedRange = t
End Sub
A+
 
Dernière édition:

Statistiques des forums

Discussions
311 729
Messages
2 081 966
Membres
101 852
dernier inscrit
dthi16088