Extraire des informations spécifiques comme l’adresse, le code postal ou le nom de la ville d’une cellule Excel peut sembler complexe, mais il existe plusieurs méthodes pour y parvenir. Cet article détaille trois approches : l’utilisation de formules, de fonctions VBA et de macros. Voici un guide étape par étape.
1. Extraire l’adresse (n° et rue)
Avec une formule Excel
Entrez la formule suivante dans la cellule B2 (en supposant que vos données sont en A2) :
=GAUCHE(A2;NBCAR(A2)-EQUIV(VRAI;ESTNUM(--(STXT(A2;NBCAR(A2)-LIGNE($1:$255);1)));0)-5)
Appuyez sur Ctrl + Maj + Entrée pour valider la formule.
Résultat attendu : La partie contenant le numéro et le nom de la rue sera extraite.
Avec une fonction VBA
Vous pouvez utiliser la fonction personnalisée suivante pour extraire l’adresse :
Function ExtraireAdresse(cellule As Range) As String
Dim chaine As String
chaine = cellule.Value
Dim positionPremierChiffre As Integer
positionPremierChiffre = 0
Dim i As Integer
For i = 1 To Len(chaine)
If IsNumeric(Mid(chaine, i, 1)) And _
IsNumeric(Mid(chaine, i + 1, 1)) And _
IsNumeric(Mid(chaine, i + 2, 1)) And _
IsNumeric(Mid(chaine, i + 3, 1)) And _
IsNumeric(Mid(chaine, i + 4, 1)) Then
positionPremierChiffre = i
Exit For
End If
Next i
If positionPremierChiffre = 0 Then
ExtraireAdresse = chaine
Else
ExtraireAdresse = Trim(Left(chaine, positionPremierChiffre - 1))
End If
End Function
Avec une macro
Pour appliquer cette extraction à toutes les cellules d’une colonne :
Sub AppliquerExtraireAdresse()
Dim cellule As Range
Dim derniereLigne As Long
derniereLigne = Cells(Rows.Count, "A").End(xlUp).Row
For Each cellule In Range("A1:A" & derniereLigne)
cellule.Offset(0, 1).Value = ExtraireAdresse(cellule)
Next cellule
End Sub
2. Extraire le code postal
Avec une formule Excel
Dans la cellule C2, utilisez cette formule :
=STXT(A2;NBCAR(A2)-EQUIV(VRAI;ESTNUM(--(STXT(A2;NBCAR(A2)-LIGNE($1:$255);1)));0)-4;5)
Appuyez sur Ctrl + Maj + Entrée.
Résultat attendu : Les 5 chiffres du code postal seront extraits.
Avec une fonction VBA
Pour extraire uniquement le code postal :
Function ExtraireCodePostal(cellule As Range) As String
Dim chaine As String
chaine = cellule.Value
Dim positionPremierChiffre As Integer
positionPremierChiffre = 0
Dim i As Integer
For i = 1 To Len(chaine)
If IsNumeric(Mid(chaine, i, 1)) And _
IsNumeric(Mid(chaine, i + 1, 1)) And _
IsNumeric(Mid(chaine, i + 2, 1)) And _
IsNumeric(Mid(chaine, i + 3, 1)) And _
IsNumeric(Mid(chaine, i + 4, 1)) Then
positionPremierChiffre = i
Exit For
End If
Next i
If positionPremierChiffre = 0 Then
ExtraireCodePostal = ""
Else
ExtraireCodePostal = Mid(chaine, positionPremierChiffre, 5)
End If
End Function
Avec une macro
Pour appliquer cette extraction à une colonne entière :
Sub AppliquerExtraireCodePostal()
Dim cellule As Range
Dim derniereLigne As Long
derniereLigne = Cells(Rows.Count, "A").End(xlUp).Row
For Each cellule In Range("A1:A" & derniereLigne)
cellule.Offset(0, 2).Value = ExtraireCodePostal(cellule)
Next cellule
End Sub
3. Extraire le nom de la ville
Avec une formule Excel
Pour extraire le nom de la ville dans D2 :
=STXT(A2;NBCAR(A2)-EQUIV(VRAI;ESTNUM(--(STXT(A2;NBCAR(A2)-LIGNE($1:$255);1)));0)+2;99)
Appuyez sur Ctrl + Maj + Entrée.
Résultat attendu : La partie après le code postal sera extraite.
Avec une fonction VBA
Voici le code pour extraire le nom de la ville :
Function ExtraireVille(cellule As Range) As String
Dim chaine As String
chaine = cellule.Value
Dim positionPremierChiffre As Integer
positionPremierChiffre = 0
Dim i As Integer
For i = 1 To Len(chaine)
If IsNumeric(Mid(chaine, i, 1)) And _
IsNumeric(Mid(chaine, i + 1, 1)) And _
IsNumeric(Mid(chaine, i + 2, 1)) And _
IsNumeric(Mid(chaine, i + 3, 1)) And _
IsNumeric(Mid(chaine, i + 4, 1)) Then
positionPremierChiffre = i
Exit For
End If
Next i
If positionPremierChiffre = 0 Then
ExtraireVille = ""
Else
ExtraireVille = Trim(Mid(chaine, positionPremierChiffre + 6))
End If
End Function
Avec une macro
Pour extraire le nom de la ville en parcourant une colonne entière :
Sub AppliquerExtraireVille()
Dim cellule As Range
Dim derniereLigne As Long
derniereLigne = Cells(Rows.Count, "A").End(xlUp).Row
For Each cellule In Range("A1:A" & derniereLigne)
cellule.Offset(0, 3).Value = ExtraireVille(cellule)
Next cellule
End Sub
Ces solutions permettent d’extraire facilement des informations d’adresse structurées dans Excel. Que vous soyez un utilisateur occasionnel ou avancé, vous pouvez choisir entre les formules classiques et les scripts VBA pour automatiser vos tâches. Les macros sont particulièrement utiles pour traiter des grands volumes de données rapidement et efficacement.
Si vous souhaitez en savoir plus sur les scripts VBA ou d’autres astuces Excel, n’hésitez pas à explorer davantage ou à poser vos questions !