Séparé le contenu d'une cellule a partir d'un terme spécifique

winnie

XLDnaute Nouveau
Bonjour,

Je souhaiterais séparer le contenu d'une cellule en 2.

Je m'explique :

J'ai par exemple SARL Winnie en A1,

Je voulais savoir s'il était possible de diviser le contenu de la cellule,
=>c-a-d garder "winnie" en "A1 et avoir en A2 "SARL.

Je pense qu'une macro serait d'actualité.

Merci de me dire la faisabilité du projet.
 

kjin

XLDnaute Barbatruc
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
 

winnie

XLDnaute Nouveau
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique

en fait c'est pas aussi simple que ca.

Je vais mieux m'expliquer.

J'ai un fichier avec 40 000 entreprises.

Dans la cellule A1 figure leur nom et la forme de leur société (SARL, SAS, SASU, EURL,...)

Détail pour kjin :


Le nom de l'entreprise peut contenir un ou plusieurs mots (séparés)
exemple : SARL TRANSPORT RAPIDE DE VILLE.

Ce que je veux donc, c'est isolé la forme juridique du nom de l'entreprise.

Je pensais donc à une macro qui dirait :
- dans la colonne A => je recherche tous les "SARL"
- Je les copie dans B
- je les supprime de A

et je ferais ca pour toutes les formes de sociétés.

Je suis plus clair?
 

tototiti2008

XLDnaute Barbatruc
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique

Bonjour à tous,

en B1 :

Code:
=Gauche(A1;Cherche(" ";A1)-1)

en C1

Code:
=droite(A1;NBCAR(A1)-cherche(" ";A1))

Recopie vers le bas des formules
Copie des colonnes B et C
Collage spécial - Valeurs en A1
 

kjin

XLDnaute Barbatruc
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
 

Staple1600

XLDnaute Barbatruc
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique

Bonsoir à tous

Cela sent le RegExp par ici, n'est-ce pas JNP ;)


Histoire de rebondir sur le sieur Kjin (que je salue) : une liste des formes juridiques-> ici

PS: ca va compliqué l'extraction ;)
 
Dernière édition:

winnie

XLDnaute Nouveau
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

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à.

voila...merci pour la réponse
 

Tibo

XLDnaute Barbatruc
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique

Bonjour,

Faute de fichier exemple joint, une tentative avec une formule matricielle :

En colonne A, la liste des entreprises.

Ailleurs, une liste des abréviations (ici : $H$1:$H$5)

En B1, cette formule matricielle :

Code:
=SI(SOMMEPROD((ESTNUM(TROUVE(" "&$H$1:$H$5&" ";" "&A1&" ")))*1);SUPPRESPACE(
SUBSTITUE(" "&A1&" ";" "&INDEX($H$1:$H$5;EQUIV(VRAI;ESTNUM(TROUVE(" "&$H$1:$H$5
&" ";" "&A1&" "));0))&" ";""));A1)

Formule matricielle à valider par CTRL + MAJ + ENTREE

à recopier vers le bas

Voir le petit bout de fichier exemple joint.

@+
 

Pièces jointes

  • Winnie.zip
    4 KB · Affichages: 81

winnie

XLDnaute Nouveau
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique

Bonjour,

Faute de fichier exemple joint, une tentative avec une formule matricielle :

En colonne A, la liste des entreprises.

Ailleurs, une liste des abréviations (ici : $H$1:$H$5)

En B1, cette formule matricielle :

Code:
=SI(SOMMEPROD((ESTNUM(TROUVE(" "&$H$1:$H$5&" ";" "&A1&" ")))*1);SUPPRESPACE(
SUBSTITUE(" "&A1&" ";" "&INDEX($H$1:$H$5;EQUIV(VRAI;ESTNUM(TROUVE(" "&$H$1:$H$5
&" ";" "&A1&" "));0))&" ";""));A1)

Formule matricielle à valider par CTRL + MAJ + ENTREE

à recopier vers le bas

Voir le petit bout de fichier exemple joint.

@+

je joint un fichier exemple, j'espere que c'est suffisant.
 

Pièces jointes

  • exemple1.xls
    24.5 KB · Affichages: 153
  • exemple1.xls
    24.5 KB · Affichages: 169
  • exemple1.xls
    24.5 KB · Affichages: 163

Tibo

XLDnaute Barbatruc
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique

re,

La formule que je t'ai proposée me semble correspondre à ta demande.

Voir ton fichier joint

@+

Edit : ne pas oublier de corriger une faute de frappe dans la liste : SAS et non pas SSA

@+
 

Pièces jointes

  • Winnie_2.zip
    5.1 KB · Affichages: 89

Staple1600

XLDnaute Barbatruc
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
 

winnie

XLDnaute Nouveau
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

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.

Merci
 
Dernière édition:

JNP

XLDnaute Barbatruc
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 :eek:.
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 :p.
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 :D...
Ç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 :p).
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
et lui donner les arguments suivants :
Code:
=SansTitre(Cellule_à_traiter;Pattern_à_utiliser;En_option_remplacer_par;En_option_l_inverse)
Je vous mets le comparatif en PJ.
Bonne journée :cool:
 

Pièces jointes

  • Winnie_2.xls
    49.5 KB · Affichages: 273
Dernière édition:

winnie

XLDnaute Nouveau
Re : Séparé le contenu d'une cellule a partir d'un terme spécifique

Bonjour,

Faute de fichier exemple joint, une tentative avec une formule matricielle :

En colonne A, la liste des entreprises.

Ailleurs, une liste des abréviations (ici : $H$1:$H$5)

En B1, cette formule matricielle :

Code:
=SI(SOMMEPROD((ESTNUM(TROUVE(" "&$H$1:$H$5&" ";" "&A1&" ")))*1);SUPPRESPACE(
SUBSTITUE(" "&A1&" ";" "&INDEX($H$1:$H$5;EQUIV(VRAI;ESTNUM(TROUVE(" "&$H$1:$H$5
&" ";" "&A1&" "));0))&" ";""));A1)

Formule matricielle à valider par CTRL + MAJ + ENTREE


à recopier vers le bas

Voir le petit bout de fichier exemple joint.

@+


Merci pour ta réponse, celle ci fonctionne également très bien
 

Discussions similaires

Statistiques des forums

Discussions
312 191
Messages
2 086 051
Membres
103 108
dernier inscrit
Captain NRJ