extraire la partie texte d'une cellule en vba

WILFRIED

XLDnaute Impliqué
bonjour,

Voila mon problème :

Je désire récupérer la partie texte d'une cellule donnée en vba.

J'ai fait une recherche dans l'aide et dans le forum, j'ai trouvé la fonction stxt mais elle nécessite de connaitre l'emplacement exact de la partie du texte.

J'ai pensé à la lourde méthode de INSTR en recherchant la partie numérique, puis en utilisant la méthode mid... Mais cela risque d'alourdir fortement la macro. Je me demandai s'il n'y avait pas une méthode plus simple car au final une fois la partie texte extraite, je la compare à une BD, et si elle est trouvé j'execute une autre macro. Le tous pour de nombreuse céllule donc même en désactivent le rafraichissement d'écran cela risque d'être lourd à gérer.

Merci d'avance pour vos lumière.

A+

PS: voici la méthode que j'ai trouvé :

Sub test()
Dim test As String
Dim car As String
Dim y As Integer
Range("B14").Select
y = 1
car = Mid(ActiveCell.Value, y, 1)
test = ""
Do Until y > Len(ActiveCell.Value)
If IsNumeric(car) = False Then
If car <> "-" And car <> "/" Then
test = test & car
End If
End If
y = y + 1
car = Mid(ActiveCell.Value, y, 1)
Loop
If Left(test, 1) = " " Then
test = Right(test, Len(test) - 1)
End If
end sub
 
Dernière édition:
G

Guest

Guest
Re : extraire la partie texte d'une cellule en vba

Bonjour Wielfried,

Voici deux solution parmi d'autres.

La première en cochant la référence Microsoft VBScript Regular Expression 5.5 dans outils Référence de l'éditeur de macro VBE (plus difficile à adapter si tu ne connais pas les expréssions régulières)

Code:
Sub Test()
Dim Texte as string
Dim oReg As New RegExp
oReg.Global = True
oReg.IgnoreCase = True
oReg.Pattern = "\d"
  Texte= oReg.Replace(Range("A1").Text, "")
   msgbox Texte
End Sub
La deuxième sans référence

Code:
Sub Test2()
    Dim texte As String, Num As String
    Dim i As Integer
    Num = "0123456789"
    texte = Range("A1")
 
    For i = 1 To 10
        texte = Replace(texte, Mid(Num, i, 1), "")
    Next i
    MsgBox texte
 
End Sub

A+
 

vbacrumble

XLDnaute Accro
Re : extraire la partie texte d'une cellule en vba

Bonjour à tous


La macro d'Hasco mais sans avoir à cocher de Référence. ;)

Code:
Sub Test()
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

A+
 

WILFRIED

XLDnaute Impliqué
Re : extraire la partie texte d'une cellule en vba

SAlut hasco, vbacrumble

D'abord merci à tous les deux. Grâce à vous je viens d'apprendre deux méthode qui m'étaient inconnue.

Je préfère ne pas utilisé les références car j'ai déjà eu des problèmes lors de l'utilisation sur une machine qui n'as pas cette référence. c'est pourquoi je suis partie du code d'hasco :

Code:
Sub Test2()
    Dim texte As String, Num As String
    Dim i As Integer
    Num = "0123456789"
    texte = Range("A1")
 
    For i = 1 To 10
        texte = Replace(texte, Mid(Num, i, 1), "")
    Next i
    MsgBox texte
 
End Sub

que j'ai transformé en fonction avec une touche personnel :

Code:
Public Function recup_txt(cell As Range)
Dim texte As String, Num As String
Dim car As Integer
    Num = "-0123456789"
    texte = cell.Value
    For car = 1 To 11
        texte = Replace(texte, Mid(Num, i, 1), "")
    Next car
    If Left(texte, 1) = "" Then
      texte = Right(texte, Len(texte) - 1)
    End If
    recup_txt = texte
End Function

car c'est pour mettre dans des macros pour : travaux dans paris afin de récupérer que l'a rue sans les chiffres.

A+
 

vbacrumble

XLDnaute Accro
Re : extraire la partie texte d'une cellule en vba

Re


Avec le code d'Hasco modifié( voir mon précédent message)

Il n'est pas besoin de cocher de références.

Et RegExp offre beaucoup d'autres possibilités... :)
Exemple
Code:
Sub Test_Chiffres()
'extrait chiffres
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
Code:
Sub Test_Lettres()
'extrait 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

Mais Comme on dit : "les goûts et les couleurs ne se discutent pas"

A+
 
Dernière édition:

Messo

XLDnaute Nouveau
Bonjour à tous,

Je me permets de participer à vos échanges nourris.

Je suis débutant utilisateur de vba.

comme vous, je souhaite extraire des caractères spécifiques dans des données que je reçois régulièrement comme ci-dessous.

VIREMENT SEPA RECU YCI6 1063 FERME SOLAIRE -FA4017 FORFAIT MAINTENANCE 2022 FA4017

L'idée est de mettre en place une formule afin d'extraire " FERME SOLAIRE " nom de l'entité dans la chaine et le concaténer avec FA4017.

Quelqu'un s'aurait m'aider?

Merci
 

Messo

XLDnaute Nouveau
Bonjour @Messo
plutôt que de déterrer un sujet de 2009
... tu devrais créer ta propre question en mettant un fichier exemple.
A+
loin de moi l'idée de faire du plagiat.
Les données sont sensibles et ne peuvent être divulguées.

Mais en voici un partie modifiée.

L'idée est de créer une fonction afin d'extraire de le nom de la société et le numéro de facture quand cela existe sinon mettre nul.

Je rappelle je suis débutant et non informaticien.

Merci.
 

Pièces jointes

  • TEST.xlsx
    9.4 KB · Affichages: 9

Deadpool_CC

XLDnaute Accro
re ...
Avec le peu d'exemple en colonne H de ton fichier, de mon coté je ne sais pas déterminer de manière certaine ce qui est ou n'est pas le nom de la société.

par contre tes N° de facture son tous de la même forme ? FA____ (FA + 4 caractères) ?
déjà pour trouver la facture tu peux essayer de mettre en colonne 'O' la formule suivante :
VB:
=SI(TROUVE("FA";H1);STXT(H1;TROUVE("FA";H1);6);"-")
 

Discussions similaires

Statistiques des forums

Discussions
314 489
Messages
2 110 133
Membres
110 682
dernier inscrit
mgaudi