Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Séparé le contenu d'une cellule a partir d'un terme spécifique
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique
Bonjour,
Par exemple "SARL Winnie" ne veut rien dire !
J'ai une phrase contenant 2 mots séparés par un espace me parait plus juste !
C'est ça, c'est pas ça ?
A+
kjin
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique
Re,
2 messages, 2 demandes différentes, mais on avance...
Y a t-il "SA Truc" et "Machin SA" ou S.A.R.L. et SARL ou non ?
As tu une liste des formes juridiques ?
A+
kjin
Re,
2 messages, 2 demandes différentes, mais on avance...
Y a t-il "SA Truc" et "Machin SA" ou S.A.R.L. et SARL ou non ?
As tu une liste des formes juridiques ?
A+
kjin
pour répondre à ta première question, il y a effectivement "SA Machin" et "Machin SA".
Par contre les formes juridiques sont toujours ecris de la même maniere et en majuscule. Il n'y a pas de point de séparation.
donc on aura toujours du SA, SARL, EURL, etc...toujours sous ce format là.
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique
Bonsoir à tous
Un essai avec RegExp (à peaufiner, JNP si tu passes par là )
La macro ci-dessous supprimes quelques strings
A suivre ...
Code:
Sub t_regexp()
Dim r As Range, C As Range, EXPRESSION$
EXPRESSION = _
"\b((S[ALRS]{2,4}|(\s(SA)|(M\s)|(M[ME]{2,3}))\b))"
Set r = ActiveSheet.Range("A3:A20")
With CreateObject("vbscript.regexp")
.Global = True: .Pattern = EXPRESSION
For Each C In r
C.Offset(, 1) = Trim(.Replace(C, ""))
Next
End With
Set r = Nothing
End Sub
Un essai avec RegExp (à peaufiner, JNP si tu passes par là )
La macro ci-dessous supprimes quelques strings
A suivre ...
Code:
Sub t_regexp()
Dim r As Range, C As Range, EXPRESSION$
EXPRESSION = _
"\b((S[ALRS]{2,4}|(\s(SA)|(M\s)|(M[ME]{2,3}))\b))"
Set r = ActiveSheet.Range("A3:A20")
With CreateObject("vbscript.regexp")
.Global = True: .Pattern = EXPRESSION
For Each C In r
C.Offset(, 1) = Trim(.Replace(C, ""))
Next
End With
Set r = Nothing
End Sub
Et ben dis donc c'est du bon boulot.
Je vais essayer de comprendre ce que tu as fait histoire que ca me serve mais en tout cas merci.
Par contre j'aurais juste un dernier service.
En fait ca : "\b((S[ALRS]{2,4}|(\s(SA)|(M\s)|(M[ME]{2,3}))\b))" j'ai du mal à le décrypter. Et je pense qu'il faut que je comprenne la logique si je veux ajouter de nouveaux éléments.
Ce serai sympa de m'expliquer juste un peu.
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique
Bonjour le fil ,
A la demande de JM, je passe par là, sachant que RegExp n'est pas forcément la panacé dans ce cas de figure. En effet, il serait bien plus puissant si un réel motif pouvait être décelé (que des consonnes dans le sigle ou uniquement les sigles en majuscules par exemple) ce qui n'est pas le cas ici .
J'avoue que la solution de Tibo me plait bien, les seuls défauts que j'ai trouvés, c'est la perte de l'espace pour une raison sociale au milieu, et... que je n'ai pas trouvé comment agrandir la liste des exclusions dans sa formule .
Maintenant, si on veux s'amuser avec RegExp, le Pattern de JM n'est pas tout à fait bon, puisqu'il va transformer la société : SARL SARA PORTEPASMAL en PORTEPASMAL, par exemple, ce qui est dommage pour le jeu de mot ...
Ça signifie donc qu'il va falloir travailler sur une liste exhaustive, à l'unité.
Pour récupérer la liste, j'ai été chercher le fichier de l'INSEE proposé par JM, et là, avec tout l'avantage de RegExp, j'ai extrait toutes les abréviations en me basant sur le fait que ce n'était que des ensembles de majuscules.
VB:
Function ExtractionSigles(Plage As Range) As String
Application.Volatile
Dim Match, Matches, Cellule As Range
With CreateObject("vbscript.regexp")
For Each Cellule In Plage
.Global = True: .Pattern = "{2,}"
Set Matches = .Execute(Cellule)
For Each Match In Matches
ExtractionSigles = ExtractionSigles & " " & Match
Next
End With
End Function
Il m'a suffit d'utiliser le séparateur blanc pour décomposer en cellules, copier/coller transposé et supprimer les doublons.
J'ai ensuite ajouté les civilités traditionnelles (j'ai laissé tombé Son Altesse Sérénissime, vu qu'elle existait déja dans les sociétés ).
J'ai ensuite fait une petite fonction pour fabriquer mon Pattern
VB:
Function FabricationPattern(Plage As Range) As String
Application.Volatile
Dim Cellule As Range
For Each Cellule In Plage
FabricationPattern = FabricationPattern & "|" & Cellule
Next
FabricationPattern = " ?\b(" & Right(FabricationPattern, Len(FabricationPattern) - 1) & ")\b ?(?!\.)"
End Function
Là, quelque explications pour Winnie s'imposent :
" ?" : 0 ou 1 espace
"\b" : fin de mot devant
"(CUMA|GAEC|...)" : CUMA ou GAEC ou ...
"\b ?" : idem
"(?!\.)" : mais n'ayant pas un "." après (pour ne pas ôter le M de R.M.T.I. par exemple.
Maintenant, il ne reste plus qu'une petite fonction pour traiter tout cela :
VB:
Function SansTitre(Cellule As Range, MonPattern As String, Optional Remplacement As String, Optional Inverse As Boolean) As String
Application.Volatile
Dim Match, Matches
If Cellule.Count > 1 Then Exit Function
If Inverse = False Then
With CreateObject("vbscript.regexp")
.Global = True: .Pattern = MonPattern
SansTitre = Trim(.Replace(Cellule, Remplacement))
End With
Else
With CreateObject("vbscript.regexp")
.Global = True: .Pattern = Replace(MonPattern, " ?", "")
Set Matches = .Execute(Cellule)
For Each Match In Matches
SansTitre = SansTitre & " " & Match
Next
End With
SansTitre = Trim(SansTitre)
End If
End Function
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.