Isoler chaine de charactère dans des cellules
Bonjour à tous,
Je cherche une solution pour me permettre d'isoler dans un champs adresse les numéros d'escalier/ de batiment/ l'étage et numéro de logement ou laisser vide si ces derniers n'existent pas.
A titre d'exemple, j'ai comme adresse dans ma cellule A1:
"HLM XXX Batiment B Escalier 10 Etage RDC Logement L001"
Mais histoire de faire simple je peux également avoir dans ma cellule A2:
"10 PLACE XXX Escalier 5 Batiment AQ Etage 3 Logement L032"
Mais aussi, dans ma cellule A3 des:
"6 RUE XXX Batiment B Etage 2 Logement L022"
J'arrive en ayant utiliser votre forum et le peu de connaissances que j'ai à faire dans ma cellule B1 (Adresse) des :
SIERREUR(GAUCHE(A1;TROUVE("Batiment";A1)-1);A1)
Puis dans la cellule C1:
SUBSTITUE(A1;B1;"")
Dans la cellule D1 (Escalier):
SIERREUR(GAUCHE(B1;TROUVE("Batiment";B1)-1);B1)
Puis cellule E1:
=SUBSTITUE(C1;D1;"")
Etc...
Cela marche dans mon cas A1 mais pas dans mon cas A2 ni A3, sachant que j'ai plus de 48000 lignes, je ne sais pas quelle est la meilleur façon de faire pour gagner du temps.
Faut-il trier 1 à 1 ou y'a t'il une super fonction SI / code VBA qui me permettrait de gagner du temps?
J'espère avoir été clair.
Merci d'avance pour votre retour.
Bonjour,
une solution via une macro
Sub aargh()
i = 1
With Sheets("sheet1") '<- à adapter
While .Cells(i, "A") <> 0 'chaine à examiner est en colonne A
a = Split(.Cells(i, 1), " ")
For j = 0 To UBound(a)
Select Case a(j)
Case "Batiment" '
col = "B" ' colonne dans laquelle mettre le batiment
Case "Logement"
col = "C" ' colonne dans laquelle mettre le logement
Case "Etage"
col = "D" ' colonne dans laquelle mettre l'étage
Case "Escalier"
col = "E" ' colonne dans laquelle mettre l'escalier
Case Else
col = ""
End Select
If col <> "" Then .Cells(i, col) = a(j + 1)
Next j
i = i + 1
Wend
End With
End SubSuper!
Le Ubound je ne connaissait pas!
Je fais un test et je vous confirme si cela a marché.
h2so4 a écrit :Bonjour,
une solution via une macro
Sub aargh() i = 1 With Sheets("sheet1") '<- à adapter While .Cells(i, "A") <> 0 'chaine à examiner est en colonne A a = Split(.Cells(i, 1), " ") For j = 0 To UBound(a) Select Case a(j) Case "Batiment" ' col = "B" ' colonne dans laquelle mettre le batiment Case "Logement" col = "C" ' colonne dans laquelle mettre le logement Case "Etage" col = "D" ' colonne dans laquelle mettre l'étage Case "Escalier" col = "E" ' colonne dans laquelle mettre l'escalier Case Else col = "" End Select If col <> "" Then .Cells(i, col) = a(j + 1) Next j i = i + 1 Wend End With End Sub
Un grand merci! Après adaptation c'est nickel!
Je suis impressionné!