Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/12/2011, 16h23   #1
Nom
Membre habitué
 
Inscription : octobre 2005
Messages : 528
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 528
Points : 143
Points : 143
Par défaut Recherche Chaine caractère complexe

Bonjour à tous
Je vous sollicite pour résoudre un problème qui peut paraître simple mais qui me résiste :
J'ai une chaine de caractère constituée ainsi :
Prenom NOM Ville Autres

j'aimerai récupérer uniquement le prénom et le nom dans 2 variables
Mais j'ai 3 obstacles :
1) les prénoms composés
La chaîne devient alors Prenom1 Prenom2 NOM Ville Autres
2) les noms composés
La chaîne devient alors Prenom1 NOM1 NOM2 Ville Autres

J'en ai pas encore mais on pourrait imaginé prénom + nom composé
Prenom1 Prenom2 NOM1 NOM2 Ville Autre

3) Les villes avec des noms composées :
Saint Etienne

Vous l'aurez compris, je peux pas vraiment me fier aux espaces
La bonne nouvelle est que l'information (ou plutôt les informations) "Autres" commence toujours par la même phrase "a été vendu " donc je peux déjà me débarrasser de cette partie; en revanche le reste ...

L'autre bonne nouvelle est que je peux avoir une liste des villes que je suis susceptible de rencontrer dans la chaîne

je me suis orienté vers Split,Instr, Join, Array mais je commence à bloquer un peu
Merci pour votre aide
__________________
Le savoir est une arme alors soyons armés
Nom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 16h31   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Tu n'as pas encore une faveur par exemple les noms sont en majuscules?
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/12/2011, 16h39   #3
Nom
Membre habitué
 
Inscription : octobre 2005
Messages : 528
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 528
Points : 143
Points : 143
Oui c'est le cas, par contre les villes aussi
J'aurai donc du écrire SAINT ETIENNE dans mon message précédent
__________________
Le savoir est une arme alors soyons armés
Nom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 18h48   #4
Membre chevronné
 
Avatar de Montor
 
Inscription : avril 2008
Messages : 762
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 762
Points : 643
Points : 643
regarde coté VBS expression régulière
Montor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 21h16   #5
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Ci-joint une gymnastique avec:
En Feuil1 de A1 à A20 la liste de toutes les villes dont le nom est composé (SAINT ETIENNE, LE HAVRE...)

les données brutes sont de cette forme aaaa bbbbb XXX YYY UUUU VVVV a été vendu TTTT
avec:
aaaa bbbbb: prénom (peut être en plusieurs mots. Pas en majuscule)
XXX YYY: Nom (peut être en plusieurs mots, toutes les lettres en majuscule)
UUUU VVVV: Ville (peut être en plusieurs mots, toutes les lettres en majuscule)
a été vendu TTTT: le texte non nécessaire en fin.

Fonctions à mettre dans un module standard (fNom-> Nom, fPrenom-> Prénoms et fVille-> la ville)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Private Function IsUcase(ByVal Str As String) As Boolean
 
IsUcase = InStr(1, UCase(Str), Str, vbBinaryCompare) > 0
End Function
 
'------------------------------------------------------
Private Function DebStr(ByVal Str As String) As String
Dim n As Integer
 
n = InStr(Str, "a été vendu")
If n > 0 Then
    DebStr = Trim(Left(Str, n - 1))
Else
    DebStr = Trim(Str)
End If
End Function
 
'------------------------------------------------------
Private Function Villes()
Dim S As String
Dim i As Integer
Dim Tb
 
Tb = Worksheets("Feuil1").Range("A1:A20")
For i = 1 To UBound(Tb, 1)
    S = S & "|" & Tb(i, 1)
Next i
Villes = UCase(S)
End Function
 
'------------------------------------------------------
Function fPrenom(ByVal Str As String) As String
Dim i As Integer
Dim S As String
Dim Tb
 
Tb = Split(DebStr(Str))
For i = LBound(Tb) To UBound(Tb)
    If Not IsUcase(Tb(i)) Then
        S = S & " " & Tb(i)
    Else
        Exit For
    End If
Next i
fPrenom = Trim(S)
End Function
 
'------------------------------------------------------
Function fVille(ByVal Str As String) As String
Dim T As String, S As String
Dim i As Integer
Dim Tb
 
T = DebStr(Str)
T = Trim(Mid(T, Len(fPrenom(T)) + 1))
Tb = Split(T)
i = UBound(Tb)
Do
    S = Trim(Tb(i) & " " & S)
    i = i - 1
Loop While InStr(Villes, S) > 0
fVille = Mid(S, InStr(S, " ") + 1)
End Function
 
'------------------------------------------------------
Function fNom(ByVal Str As String) As String
Dim T As String
 
T = DebStr(Str)
T = Trim(Mid(T, Len(fPrenom(T)) + 1))
T = Trim(Left(T, InStr(T, fVille(T)) - 1))
fNom = T
End Function
fNom("aaaa bbbbb XXX YYY UUUU VVVV a été vendu TTTT") = "XXX YYY"

fPrenom("aaaa bbbbb XXX YYY UUUU VVVV a été vendu TTTT") = "aaaa bbbbb"

fVille("aaaa bbbbb XXX YYY UUUU VVVV a été vendu TTTT") = "UUUU VVVV"
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 13/12/2011, 11h22   #6
Nom
Membre habitué
 
Inscription : octobre 2005
Messages : 528
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 528
Points : 143
Points : 143
J'ai essayé avec une quarantaine de cas et à priori ça fonctionne bien (beaucoup des cas ont un format "simple")
J'ai pas encore testé fVille puisque j'en ai pas l'utilité mais je suppose qu'elle fonctionne bien puisqu'elle est utilisée dans fNom
Merci beaucoup
__________________
Le savoir est une arme alors soyons armés
Nom est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h10.


 
 
 
 
Partenaires

Hébergement Web