supprimer que les lettres

Olyxier

XLDnaute Occasionnel
Bonjour

j'ai un super code que l'on ma donnée ici en 2008.

comme je suis toujours aussi mauvais qu'à l'époque j'ai encore besoin d'aide.

ce code supprime les lettres ainsi que les points et autres guillemet

Dim C As Range
Dim i As Byte
Dim nombre As String

For Each C In Range("CY15:CY34")
If Not IsEmpty(C) Then
For i = 1 To Len(C)
If IsNumeric(Mid(C, i, 1)) Then
nombre = nombre & Mid(C, i, 1)
End If
Next i
If nombre <> "" Then C = CDbl(nombre)
nombre = "0"
End If
Next C

maintenant la modification que je voudrais est que dans cette ligne le code laisse les guillemets ainsi que les chiffres et les D.

exemple 5as 0ar Dat 4as 4as Das (09) 2as 1as 8rt...

ce qui doit rester: 50D44D(09)218

cela est il possible, merci a vous pour votre aide et bonne soirée:eek:
 

tototiti2008

XLDnaute Barbatruc
Re : supprimer que les lettres

Bonjour Olyxier,

à tester :

Code:
Dim C As Range
Dim i As Byte
Dim texte As String

For Each C In Range("CY15:CY34")
If Not IsEmpty(C) Then
texte = ""
For i = 1 To Len(C)
If IsNumeric(Mid(C, i, 1)) or Mid(C, i, 1)="(" or Mid(C, i, 1)=")" or Mid(C, i, 1)="D" Then
texte = texte & Mid(C, i, 1)
End If
Next i
If texte <> "" Then C = texte 
End If
Next C
 

Caillou

XLDnaute Impliqué
Re : supprimer que les lettres

Bonjour,

Essayes ceci :

Code:
  Dim C As Range
  Dim i As Byte
  Dim nombre As String
  Dim l As String
  
  For Each C In Selection 'Range("CY15:CY34")
    If Not IsEmpty(C) Then
      For i = 1 To Len(C)
        l = Mid(C, i, 1)
        If IsNumeric(l) Or l = "D" Or l = "(" Or l = ")" Then
          nombre = nombre & Mid(C, i, 1)
        End If
      Next i
      If nombre <> "" Then C = nombre
      nombre = ""
    End If
  Next C

Caillou
 

job75

XLDnaute Barbatruc
Re : supprimer que les lettres

Bonjour le fil,

C'est comme tototiti, que je salue :) et un peu pour le fun :

Code:
Dim C As Range, i As Byte, x$, txt$
For Each C In Range("CY15:CY34")
  If Not IsEmpty(C) Then
    For i = 1 To Len(C)
      x = Mid(C, i, 1)
      If IsNumeric(x) Or InStr("D()", x) Then txt = txt & x
    Next i
    C = txt
    txt = ""
  End If
Next C

Edit : salut aussi Caillou

A+
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : supprimer que les lettres

Bonsoir le fil :),
Pour le fun et pour faire plaisir à Jean-Marie :p
Code:
Dim m, mm, tmp$
Dim C As Range
For Each C In Range("CY15:CY34")
With CreateObject("vbscript.regexp")
    .Global = True: .IgnoreCase = True: .Pattern = "[\d()D]*"
    Set mm = .Execute(C.Text)
    For Each m In mm
        tmp = tmp & m.Value
    Next m
End With
C = tmp
tmp = ""
Next
Bonne soirée :cool:
 

JNP

XLDnaute Barbatruc
Re : supprimer que les lettres

Re :),
je n'avais pas vu la demande de blanc :eek:
Code:
Dim m, mm, tmp$
Dim C As Range
For Each C In Range("CY15:CY34")
With CreateObject("vbscript.regexp")
    .Global = True: .IgnoreCase = True: .Pattern = "[\d()D]*"
    Set mm = .Execute(C.Text)
    For Each m In mm
        If m <> "" Then
        tmp = tmp & m.Value & " "
        End If
    Next m
End With
C = Replace(Replace(tmp, "( ", "("), " )", ")")
tmp = ""
Next
Bonne soirée :cool:
 

job75

XLDnaute Barbatruc
Re : supprimer que les lettres

Salut Jean-Noël :)

Il me semble qu'Olyxier veut des espaces partout sauf pour un nombre entre parenthèses...

Alors à la fin il faut faire un traitement sur tout le texte pour enlever ces espaces. Un peu lourd :eek:

A+
 

tototiti2008

XLDnaute Barbatruc
Re : supprimer que les lettres

Bonjour JNP,
Re,

je reprends le code de job parce que je ne comprends rien à regExp...

Code:
Dim C As Range, i As Byte, x$, txt$, OuvrPar As Boolean
For Each C In Range("CY15:CY34")
  If Not IsEmpty(C) Then
OuvrPar = False
    For i = 1 To Len(C)
      x = Mid(C, i, 1)
      If IsNumeric(x) Or InStr("D()", x) Then txt = txt & x & " "
    If x = ")" Then OuvrPar = False
    If x = "(" Or OuvrPar Then
    txt = Left(txt, Len(txt) - 1)
    OuvrPar = True
    End If
    Next i
    C = txt
    txt = ""
  End If
Next C
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : supprimer que les lettres

Re :),
je reprends le code de job parce que je ne comprends rien à regExp...
C'est Jean-Marie qui m'a poussé :D...
Mais c'est vrai qu'il y a une notion de masque très puissante, et assez simple à utiliser ;).
C'est le Pattern qui fait tout : "[\d()D]*"
[] est tout ce qu'on accepte comme caractère
\d est équivalent à 0-9, donc tout ce qui est numérique
* sert à dire qu'on accepte autant de fois ce qui est entre crochets
L'avantage, c'est qu'il est aisément modifiable.
Par contre, à partir du moment où on mets des blancs partout, pourquoi ne pas utiliser
Code:
Replace(Replace(txt, "( ", "("), " )", ")")
A + :cool:
 

tototiti2008

XLDnaute Barbatruc
Re : supprimer que les lettres

Re,

Par contre, à partir du moment où on mets des blancs partout, pourquoi ne pas utiliser
Code:
Replace(Replace(txt, "( ", "("), " )", ")")

dis moi si je me trompe, s'il y a 5 chiffres ou D entre les parenthèses ça n'enlèvera pas les espace entre chiffres ou D, seulement ceux collés aux parenthèses ?

Pour RegExp je te remercie d'essayer de me convertir mais la littérature sur le sujet m'a semblé si indigeste, et comme je n'en ai jamais eu un besoin vital...
 

JNP

XLDnaute Barbatruc
Re : supprimer que les lettres

Encore moi :p...
D'ailleurs, si la structure est bien celle donnée au départ, et en tenant compte du titre "supprimer que les lettres, l'ajout d'un espace dans le Pattern donne aussi le bon résultat
Code:
Dim m, mm, tmp$
Dim C As Range
For Each C In Range("CY15:CY34")
With CreateObject("vbscript.regexp")
    .Global = True: .IgnoreCase = True: .Pattern = "[\d()D ]*"
    Set mm = .Execute(C.Text)
    For Each m In mm
        If m <> "" Then
        tmp = tmp & m.Value
        End If
    Next m
End With
C = tmp
tmp = ""
Next
Bonne soirée :cool:
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 199
Messages
2 086 159
Membres
103 145
dernier inscrit
lea.