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.
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
re,🙂🙂🙂🙂🙂
peut être que le pb.. viens que l'ami jpb passe les colonnes en, L1C1 & non en a b c,ect... de plus passer par un array column bien plus simple cela evite de chaque fois rappel macro
Option Base 1
Sub Decompose()
Dim T As Variant
fin = Range("c65536").End(xlUp).Row
Range(Cells(3, 5), Cells(fin, 6)).Clear
T = Range(Cells(3, 3), Cells(fin, 3)).Value
ReDim Preserve T(1 To 6, 1 To 3)
For i = LBound(T) To UBound(T)
x = Split(T(i, 1), "(")
T(i, 3) = Left(x(1), Len(x(1)) - 1)
T(i, 2) = Left((T(i, 1)), Len((T(i, 1))) - Len(x(1)) - 2)
Next i
For i = 2 To 3
Cells(3, i + 3).Resize(UBound(T, 1)) = Application.Index(T, , i)
Next i
End Sub
Bonjour,
suite à mon 1er message, pour la commune :
Code:
Function Commune(c As String) As String
Dim s
If c Like "*(*" Then
s = Split(c, "(")
Commune = Trim(s(0))
End If
End Function
Pour le code postal :
Code:
Function Code_postal(c As String) As String
Dim s
If c Like "*(*" Then
s = Split(c, "(")
Code_postal = Replace(Trim(s(1)), ")", "")
End If
End Function
Saches que tu obtiens facilement les mêmes résultats sans passer par du VBA mais puisque tu sembles y tenir...
A+
Re 🙂,
Mais si tu aimes le VBA, une solution en RegExp + Tableaux qui remets tout dans les colonnes A et B
Code:
Sub Test()Dim Tablo1(), Tablo2(), I As Integer, J As Integer, K As Integer, DerLigne As Integer, DerColonne As Integer
DerColonne = Cells(2, Columns.Count).End(xlToLeft).Column
With CreateObject("vbscript.regexp")
For K = 1 To DerColonne
If Application.WorksheetFunction.CountBlank(Columns(K)) <> Rows.Count Then
DerLigne = Cells(Rows.Count, K).End(xlUp).Row
ReDim Preserve Tablo1(DerLigne + J)
ReDim Preserve Tablo2(DerLigne + J)
For I = 1 To DerLigne
.Global = False
.Pattern = "\d+?[0-9AB]\d{3}"
If .Test(Cells(I, K)) Then
Tablo1(J) = .Execute(Cells(I, K))(0)
.Pattern = "[^(]*"
Tablo2(J) = Trim(.Execute(Cells(I, K))(0))
J = J + 1
End If
Next I
End If
Next K
End With
Cells.Clear
Range("A1:A" & J).Value = Application.Transpose(Tablo1)
Range("B1:B" & J).Value = Application.Transpose(Tablo2)
Range("A:B").Columns.AutoFit
End Sub
Bonjour Jean-Noël🙂,
content de te croiser !
Pourquoi passer par 2 motifs et 2 execute ?
A moins d'avoir loupé quelque chose (ce qui est possible), si je reprends ton idée, on peut en économiser un :
Code:
Sub Test()
Dim Tablo1(), Tablo2(), I As Integer, J As Integer, K As Integer, DerLigne As Integer, DerColonne As Integer
DerColonne = Cells(2, Columns.Count).End(xlToLeft).Column
With CreateObject("vbscript.regexp")
For K = 1 To DerColonne
If Application.WorksheetFunction.CountBlank(Columns(K)) <> Rows.Count Then
DerLigne = Cells(Rows.Count, K).End(xlUp).Row
ReDim Preserve Tablo1(DerLigne + J)
ReDim Preserve Tablo2(DerLigne + J)
For I = 1 To DerLigne
.Pattern = "(.+)\s\((\d{5})\)"
Set Matches = .Execute(Cells(I, K))
If .Test(Cells(I, K)) Then
Tablo1(J) = Matches.Item(0).submatches(0)
Tablo2(J) = Matches.Item(0).submatches(1)
J = J + 1
End If
Next I
End If
Next K
End With
Cells.Clear
Range("A1:A" & J).Value = Application.Transpose(Tablo1)
Range("B1:B" & J).Value = Application.Transpose(Tablo2)
Range("A:B").Columns.AutoFit
End Sub
En fait, c'était surtout pour le plaisir de te croiser !
Concernant le 2A et 2B, cela est à prendre en compte au sujet des départements et des plaques d'immatriculation mais pas au niveau des codes postaux à ma connaissance...
regarde ici.
A+
Excuser moi de ne pas avoir répondu avant mais j’étais absent
J'ai regardé avec attention super...! si je peut me permettre de vous demandez juste une petite modif, est-il possible au lieu d'avoir tous la liste sur deux colonnes "A et B" de l'avoir sur 4 colonnes
Sub Test()
Dim Tablo1(), Tablo2(), I As Integer, J As Integer, K As Integer, DerLigne As Integer, DerColonne As Integer
DerColonne = Cells(2, Columns.Count).End(xlToLeft).Column
With CreateObject("vbscript.regexp")
For K = 1 To DerColonne
If Application.WorksheetFunction.CountBlank(Columns(K)) <> Rows.Count Then
DerLigne = Cells(Rows.Count, K).End(xlUp).Row
ReDim Preserve Tablo1(DerLigne + J)
ReDim Preserve Tablo2(DerLigne + J)
For I = 1 To DerLigne
.Pattern = "(.+)\s\((\d{5})\)"
If .Test(Cells(I, K)) Then
Set Matches = .Execute(Cells(I, K))
Tablo1(J) = Matches.Item(0).submatches(0)
Tablo2(J) = Matches.Item(0).submatches(1)
J = J + 1
End If
Next I
End If
Next K
End With
Cells.Clear
Range("A1:A" & J).Value = Application.Transpose(Tablo1)
Range("B1:B" & J).Value = Application.Transpose(Tablo2)
Range("A" & J \ 2 + 1 & ":B" & J).Copy Destination:=Range("C1")
Range("A" & J \ 2 + 1 & ":B" & J).Clear
Range("A:D").Columns.AutoFit
End Sub
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD