Trouver l'immat

Bonjour le forum,

Ajd, je suis confronté à un problème d'immatriculation pour une analyse des sinistres des voitures.

J'ai un gros fichier qui vient de la compta.

Ce fichier a une colonne Libellé dans laquelle le service compta saisi le type de sinistre avec l'immatriculation si cela concerne une voiture.

J'aurai souhaité extraire les immats de la colonne libellé sachant qu'il y a plusieurs formats de saisis possibles..

Auriez vous une astuce ? (vba)

Merci d'avance, fichier d'exp en PJ

14classeur1.xlsx (9.01 Ko)

J'ai fait une macro cas par cas...

Mais j'ai une erreur pour une ligne, quand j'ai une adresse dans le libellé. (en jaune sur le fichier)

je vous laisse voir le code et l'erreur

Merci encore.

11classeur1.xlsm (18.90 Ko)

Bonjour

autre solution utilisant les expressions régulières

Function immat(chaine, pattern)
  Set obj = CreateObject("vbscript.regexp")
  obj.pattern = pattern
  Set a = obj.Execute(chaine)
  If a.Count > 0 Then
    immat = Replace(Replace(a(0), " ", ""), "-", "")
    immat = Mid(immat, 1, 2) & "-" & Mid(immat, 3, 3) & "-" & Mid(immat, 6, 2)
  Else
    immat = ""
  End If
End Function
5immat.xlsm (15.17 Ko)
=immat(A3;"[A-Z]{2}[ -]{0,1}[0-9]{3}[ -]{0,1}[A-Z]{2}")

mais je ne sais pas non plus distinguer le cas que tu cites ! sauf à tester s'il y a au moins un espace ou une ponctuation juste avant ou juste après ... je vais peaufiner !

Bonjour,

Je vois pas trop ce que tu veux qu'on y fasse ? si ton service compta saisie une adresse et pas de numéro d'immatriculation.

Le plus simple serait de leur demander une saisie uniformisée des infos. ( par exemple avec l'immatriculation en dernier )

Par ailleurs je vois sur ton fichier que seul le nouveau format d'immatriculation est possible. AA-123-AA vous n'avez pas d'ancien

client avec le format précédent ? 123 AA 11 ?

Une évolution qui va tester s'il existe un espace devant ou derrière

=immat(A3;" [A-Z]{2}[ -]{0,1}[0-9]{3}[ -]{0,1}[A-Z]{2}|[A-Z]{2}[ -]{0,1}[0-9]{3}[ -]{0,1}[A-Z]{2} ")
4immat.xlsm (15.17 Ko)
[A-Z]{2} signifie 2 caractères alpha majuscules
[ -]{0,1} signifie 1 ou 0 espace ou tiret
[0-9]{3} signifie 3 chiffres

s'il y a d'anciens formats, on peut l'ajouter à l'expression régulière

Bonjour Steelson,

Tu m'apprends bcp de choses .. merci à toi.

Non il n'y a pas d'ancien format d'immatriculation.

Je vais pouvoir résoudre la problématique avec ta solution.

Merci aussi Xmenpl pour ton intérêt.

Merci aussi Xmenpl pour ton intérêt.

De rien je n'ai rien apporté pour faire avancer le shimiliblic Mais si j'avais un service compta qui saisi n'importe comment je l'ai aurais déjà étranglés lol

Je te comprends mais qu'on a pas trop le pouvoir eh ben on fait avec..

Une question @Steelson

quand on a des nouveaux cas, "AD-242.PH" par exp

Je n'ai pas compris quel endroit du code à modifier ..

Edit : C'est bon, il fallait ajouter un autre Replace dans la fonction

    immat = Replace(Replace(Replace(immat, " ", ""), "-", ""), ".", "")

Une évolution qui va tester s'il existe un espace devant ou derrière

=immat(A3;" [A-Z]{2}[ -]{0,1}[0-9]{3}[ -]{0,1}[A-Z]{2}|[A-Z]{2}[ -]{0,1}[0-9]{3}[ -]{0,1}[A-Z]{2} ")

y a t il une possibilité de mettre " [A-Z]{2}[ -]{0,1}[0-9]{3}[ -]{0,1}[A-Z]{2}|[A-Z]{2}[ -]{0,1}[0-9]{3}[ -]{0,1}[A-Z]{2} " cela en VBA et d'avoir seulement =immat(a2) ?

Je te comprends mais qu'on a pas trop le pouvoir eh ben on fait avec..

Bonjour,

Il ne s'agit pas d'avoir du pouvoir ou pas, mais de faire en sorte que tous les maillons de la chaîne puissent travailler efficacement.

Et quand un maillon déconne, c'est tout le monde derrière qui en est impacté.

Pouvoir ou pas, ce sont des choses à essayer de rectifier le plus tôt possible.

y a t il une possibilité de mettre " [A-Z]{2}[ -]{0,1}[0-9]{3}[ -]{0,1}[A-Z]{2}|[A-Z]{2}[ -]{0,1}[0-9]{3}[ -]{0,1}[A-Z]{2} " cela en VBA et d'avoir seulement =immat(a2) ?

Absolument

Function immat(chaine)
  Set obj = CreateObject("vbscript.regexp")
  obj.pattern = " [A-Z]{2}[ -]{0,1}[0-9]{3}[ -.]{0,1}[A-Z]{2}|[A-Z]{2}[ -.]{0,1}[0-9]{3}[ -]{0,1}[A-Z]{2} "
  Set a = obj.Execute(chaine)
  If a.Count > 0 Then
    immat = a(0)
    immat = Replace(Replace(Replace(immat, " ", ""), "-", ""), ".", "")
    immat = Mid(immat, 1, 2) & "-" & Mid(immat, 3, 3) & "-" & Mid(immat, 6, 2)
  Else
    immat = ""
  End If
End Function
5immat.xlsm (15.29 Ko)

Bonjour,

Oui je suis d'accord avec vous.

Si j'avais cette possibilité j'aurais pas écris ce poste et j'aurais fait autrement.

Les gens ne changent pas les habitudes du jour au lendemain. En attendant d'avoir quelques choses d'uniforme il faut quand même traiter le sujet.

C'est pourquoi je fais recours à une macro.

Mais je comprends tout à fait l'idée et je suis pour ! ;)

@Mus54 ... j'ai posté la solution juste avant ta dernière réponse, au cas où tu ne l'aurais pas vue.

Merci Steelson.

Excellente journée.

Rechercher des sujets similaires à "trouver immat"