Traitement dans une cellule: Supprimer un caractère précis.

  • Initiateur de la discussion Initiateur de la discussion shmider
  • 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 !

shmider

XLDnaute Occasionnel
Bonjour,
Comme le titre l'indique, je souhaite purger une gigantesque base de données, et qui contient des cellules avec des chiffres qui me bloque pour mon traitement.
En effet, mon problème se résume comme suite:

Dans des Cellules données, j'ai:
XXXX YYY ZZZZ 56
ccc aa uu 1
c ggg uu ooo 2
d dddd dd ddd 1

Alors, j'aimerai pouvoir enlever ces chiffres qui se retrouvent tous à la fin de chaque donnée de cellule.

Merci pour votre aide.
@+
 
Re : Traitement dans une cellule: Supprimer un caractère précis.

Re

Merci homepyrof
et pendant que nous y sommes

Code:
Sub supprime()
For Each cel In Selection
[COLOR=red]If cel <> "" Then
[/COLOR] x = Split(Trim(cel.Value), " ")
 If IsNumeric(x(UBound(x))) Then
   cel.Value = Trim(Replace(cel.Value, x(UBound(x)), ""))
 End If
[COLOR=red]End If
[/COLOR]Next cel
End Sub
 
Re : Traitement dans une cellule: Supprimer un caractère précis.

bonjour shmider,pierrejean,homepyrof53,david84
une autre méthode si pas d'espace entre les lettres & les chiffres a la fin de la chaine traite sur 2 colonnes a adapter!!

Code:
Sub es()
Dim x As Variant, r As Long, c As Long, z As String, i As Long
  Application.ScreenUpdating = False
  z = "0123456789"
  x = Range("a1:b" & Cells(Rows.Count, 1).End(xlUp).Row)
  For r = 1 To UBound(x, 1)
  For c = 1 To UBound(x, 2)
  For i = 1 To 10
  If x(r, c) <> "" Then x(r, c) = Replace(x(r, c), Mid(z, i, 1), "")
  Next i: Next c: Next r
  Range("a1:b" & Cells(Rows.Count, 1).End(xlUp).Row) = x
End Sub
 
Re : Traitement dans une cellule: Supprimer un caractère précis.

rebonjour homepyrof53

effectivement plus court bien vu 😉

Code:
Sub essai()
  Dim x As Variant, r As Long, c As Long, i As Long
  Application.ScreenUpdating = False
   x = Range("a1:b" & Cells(Rows.Count, 1).End(xlUp).Row)
  For r = 1 To UBound(x, 1)
  For c = 1 To UBound(x, 2)
  For i = 0 To 9
  If x(r, c) <> "" Then x(r, c) = Replace(x(r, c), CStr(i), "")
  Next i: Next c: Next r
  Range("a1:b" & Cells(Rows.Count, 1).End(xlUp).Row) = x
End Sub

ps la variable i il faut la déclarer en byte au lieu de long suffisant
 
Dernière édition:
Re : Traitement dans une cellule: Supprimer un caractère précis.

Re

J'avais pondu ceci apres l'intervention de Laetitia , me disant que quitte a utiliser des tableaux autant aller jusqu'au bout

Code:
Sub suppr()
debut = Timer
tablo = Range("A1:B" & Range("A65536").End(xlUp).Row)
chiffres = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 0)
For n = LBound(tablo, 1) To UBound(tablo, 1)
 For q = LBound(tablo, 2) To UBound(tablo, 2)
    For m = LBound(chiffres) To UBound(chiffres)
      tablo(n, q) = Replace(tablo(n, q), chiffres(m), "")
    Next m
 Next q
Next n
Application.ScreenUpdating = False
Range("A1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
MsgBox (Timer - debut)
End Sub

Ensuite il a y eu la seconde intervention de Pyrof et j'ai un petit peu testé tout ce qu'il est possible de mixer

Resultats dans le fichier ci-joint:
Mise a part ma 1ere production 3 fois plus lente ( 7 sec pour 65535 lignes), les differences sont de l'ordre que quelques centiemes de seconde sur 2 secondes environ)
 

Pièces jointes

Re : Traitement dans une cellule: Supprimer un caractère précis.

rebonjour tous

et bravo a Pierrejean pour son code 🙂

si tu as le temps de regarder
en passant par un Object

un peu comme
Code:
CreateObject("Scripting.Dictionary")

Code:
Set oReg = CreateObject("vbscript.regexp")
en terme de vitesse a voir ???

un exemple a adapter avec un tablo pas le temps de rester
Code:
Sub lettres()
Dim Texte As String
Dim oReg As Object
Set oReg = CreateObject("vbscript.regexp")
With oReg
.Global = True
.IgnoreCase = True
.Pattern = "\d"
Texte = .Replace(Range("A1").Text, "")
End With
MsgBox Texte
End Sub

te souhaitant une trés trés trés bonne journée
a+ leti
 
Re : Traitement dans une cellule: Supprimer un caractère précis.

Re

Ton voeu a été exaucé : Repas avec ma seconde fille son mari et ses 3 enfants

Si JNP et Staple passent par la ,ils vont etre ravis:

Ecart significatif de temps d'execution avec Regexp
2,5 secondes avec les tableaux et 1 seconde avec Regexp
Voir fichier ci-joint
 

Pièces jointes

Re : Traitement dans une cellule: Supprimer un caractère précis.

bonjour tous

pour l'ami Pierrejean que rajouter??? a part trop fort super travail

on peut rajouter une condition pour gagner quelques dixiemes si toutes les cellules on pas ce pb...comme cela on utilise pas toujours l'object
tester sur 2 colonnes de 60000 cellules avec 2 cells sur 3 avec le pb..
on passe de 0.55 secondes a 0.37 secondes toujours bon a prendre!!!
de plus si l'espace gêne a la fin on peut facilement l'enlever en rajoutant cette ligne qui penalise pas trop 1 dixieme de seconde en plus
Code:
If Right(x(r, c), 1) = " " Then x(r, c) = Left(x(r, c), Len(x(r, c)) - 1)

Code:
Sub lettres()
Dim x As Variant, Texte As String, oReg As Object, r As Long, c As Long, t1 As Long
   Application.ScreenUpdating = False
   t1 = Timer
   Set oReg = CreateObject("vbscript.regexp")
   With oReg
  .Global = True
  .IgnoreCase = True
  .Pattern = "\d"
  x = Range("a1:b" & Cells(Rows.Count, 1).End(xlUp).Row)
  For r = 1 To UBound(x, 1)
  For c = 1 To UBound(x, 2)
  If x(r, c) <> "" And IsNumeric(Right(x(r, c), 1)) Then 'condition
  Texte = .Replace(x(r, c), "")
  x(r, c) = Texte
  Else
  x(r, c) = x(r, c)
  End If: Next c: Next r: End With
  Range("a1:b" & Cells(Rows.Count, 1).End(xlUp).Row) = x
 Set oReg = Nothing 'vide object peu avoir son importance
 MsgBox Timer - t1
End Sub

trés bon dimanche
a+
leti
 
Re : Traitement dans une cellule: Supprimer un caractère précis.

Bonsoir le fil 🙂,
Si JNP et Staple passent par la ,ils vont etre ravis:
Ecart significatif de temps d'execution avec Regexp
2,5 secondes avec les tableaux et 1 seconde avec Regexp
Voir fichier ci-joint
C'est surtout que j'aurais envie de dire à Laetitia : Bienvenue au club RegExp 😛 !
Mais c'est vrai que c'est Jean-Marie qui m'a entrainé, et ma prédilection va dans la complexité des Pattern, là on est juste en décimal avec "\d" 😀...
Bonne soirée 😎
 
Re : Traitement dans une cellule: Supprimer un caractère précis.

rebonjour tous

pour JNP si tu pouvais me dire ou trouver des infos sur RegExp tu as l'air de bien connaitre cette object pour pouvoir progresser!!
je t'en serais reconnaissante.
Pas a la maison pendant 5 jours & pas excel sous la main oublie de l'installer sur le portable🙁 regarderais en fin de semaine
je profite de l'occasion pour faire un gros bisous a mon ami Pierrejean

merci d'avance

a+ leti
 
Re : Traitement dans une cellule: Supprimer un caractère précis.

Re 🙂,
pour JNP si tu pouvais me dire ou trouver des infos sur RegExp tu as l'air de bien connaitre cette object pour pouvoir progresser!!
Bien connaître est un grand mot 😛.
Avec Stapple, sur quelques fils : ici, ici et ici, nous nous sommes un peu éclaté 😀. Le départ était ici 🙄.
Personnellement, j'ai attaqué avec ce tuto qui est assez costeau (en plus, il est sur Acces, mais il se développe bien sous Excel).
Bon courage 😎
 
- 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