Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Fractionner (dé-concatener) une adresse en plusieurs colonnes

mikrent

XLDnaute Nouveau
Bonjour à tous,

Mon problème peut paraître proche de sujets déjà traités mais je n'ai malheureusement pas trouvé d'équivalent dans ce forum. Je m'explique.

J'ai un export brut contenant des adresses que je souhaite utiliser pour un mailing. Celles-ci sont rentrées à l'origine sur plusieurs lignes mais lors de l'export xls elles sont toutes concaténées dans une cellule unique.

exemple: Centre Commercial du NordService administratifRue de la Gare 8

que je souhaite séparer en 3 (colonnes):
- Centre Commercial du Nord
- Service administratif
- Rue de la Gare 8

Avez-vous une idée comment "dé-concaténer" le contenu de cette cellule en 3 colonnes pour retrouver le contenu des lignes initiales? Je pensais utiliser le fait que le "séparateur" pouvant être utilisé serait la majuscule précédée et suivie d'une minuscule mais je m'y perds....

Si vous avez une piste je suis preneur merci
 

sousou

XLDnaute Barbatruc
bonjour
Ensuivant ton idée et en admettant que les résultats seront toujours sous cette forme
c'est à dire: majuscule précédée d'une minuscule sans espace
une procédure à appeler active sur la celluleactive

Public nbmot

Sub deconca()
nbmot = 1
Set c = ActiveCell
n = Len(c)
debmot = 1
For n1 = 1 To n + 1
lettre = Mid(c, n1, 1)
If StrComp(UCase(lettre), lettre, 0) Then flag = "min" Else flag = "maj"
If (mem = "min" And flag = "maj" And lettre <> " ") Or n1 = n + 1 Then
mot = Mid(c, debmot, n1 - debmot)
c.Offset(0, nbmot) = mot
debmot = n1
nbmot = nbmot + 1
End If
mem = flag
Next
End Sub
Si plus d'explications...
 
Dernière édition:

mikrent

XLDnaute Nouveau
Bonjour,

Merci beaucoup pour votre retour. J'ai enfin eu l'occasion de tester la macro et voici mes remarques:
- la macro ne s'applique qu'à la cellule sélectionnée, je n'arrive donc pas à lancer la macro d'un coup pour la colonne complète (je m'y prends mal sûrement)
- le découpage se passe bien. En revanche, la règle que j'avais proposée ne marche pas toujours et devrait tenir compte de certaines exceptions, exemples :
- les adresses avec "-" et majuscule ("Rue Grand-Soleil 12" devient "Rue Grand" et "-Soleil 12") ne devraient pas être découpées
- les adresses avec " ' " et majuscule ("Rue d'Orient 72" devient "Rue d" et "Orient 72") ne devraient pas être découpées (+l'apostrophe est supprimée au passage de la macro?)
- la macro découpe aussi les adresses où une majsucule est précédée d'un espace : "Av. Beauséjour" devient "Av" et ".Beauséjour"

Je mets le fichier avec les exemples en annexe.

A disposition
 

Pièces jointes

  • exemple.xls
    46.5 KB · Affichages: 6

sousou

XLDnaute Barbatruc
re
Je pensais bien qu'il y aurait des cas spéciaux, il faut trouver un critères commun à toutes ces concaténations (voir ma remarque en gras)
J'ai donc ajouter ici le traitement des cas de figures relevées. (il pourrait y en avoir d'autres)
Pour le traitement de la colonne, j'ai ici arbitrairement choisi l'ensemble d'une selection.
C'est à dire que chaque éléments de la sélection sera traité, mais il y a d'autres choix en fonction des réels besoins
Sub deconca()

For Each c In Selection
nbmot = 1
n = Len(c)
debmot = 1
For n1 = 1 To n + 1
lettre = Mid(c, n1, 1)
If StrComp(UCase(lettre), lettre, 0) Then flag = "min" Else flag = "maj"
If (mem = "min" _
And flag = "maj" And lettre <> " " _
And lettre <> "'" _
And lettre <> "." _
And lettre <> "-" _
) Or n1 = n + 1 Then
mot = Mid(c, debmot, n1 - debmot)
c.Offset(0, nbmot) = mot
debmot = n1
nbmot = nbmot + 1
End If
mem = flag
Next
Next
End Sub
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…