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

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 !

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
 
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
 
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+
 
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:
- 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
Retour