Boucles ou pas

Bonjour

Dans le fichier Excel en PJ il y a 2 colonnes . La 1ere colonne est une compilation d'informations que je reçois chaque mois . Parmi ces informations je voudrais récupérer un numéro qu'on appelle le numéro de commande . Il s'écrit de la façon suivante :

SIE19BC00377, ce n'est pas tjrs le même numéro mais il est normé de cette façon avec 12 caractères .

Dans la 2eme colonne il y a des numéros de commandes qui sont déjà générés automatiquement par le système , donc pas d'action à faire pour ceux la .

En revanche pour tous les champs vides dans la 2eme colonne je voudrais faire une macro qui cherche le numéro de commande dans la 1ère colonne noyé dans le libellé, et une fois qu'il le trouve qui l'inscrit dans la 2ème colonne et cela ainsi de suite , sauf forcément tous les cas ou le numéro de commande existe déjà dans le 2ème colonne .

Petite précision pour tous les cas ou la macro ne trouve pas de numéro de commande à inscrire dans le 2ème colonne , je voudrais préciser dans la 2ème colonne la mention NBC .

j'ai pensé à faire une boucle pouvez vous m'aider à la conceptualiser.

Merci

9classeur-test.xlsx (490.50 Ko)

Bonjour, 2 solutions

En utilisant les expressions régulières

Function ref(chaine)
  Set obj = CreateObject("vbscript.regexp")
  obj.pattern = "SIE([A-Za-z0-9]{9})"
  Set a = obj.Execute(chaine)
  If a.Count > 0 Then ref = a(0) Else ref = "NBC"
End Function

ou par formule simple dans ton cas ...

=SI(ESTERREUR(CHERCHE("SIE";A2));"NPC";STXT(A2;CHERCHE("SIE";A2);12))

très long en calcul ... j'ai donc supprimé des lignes pour te donner la solution

8classeur-test.xlsm (19.45 Ko)

Bonjour

Bonjour Steelson...

moi j'ai une proposition par macro....

@Steelson la Formule simple ne marche pas a cause de certaines cellules ou il y a SIEG...

bien vue avec expression régulière.... faut que je vois cela de plus près...

Fred

6krimo1973.xlsm (498.17 Ko)

@Steelson la Formule simple ne marche pas a cause de certaines cellules ou il y a SIEG...

Bien vu

Pour moi la Rolls ce sont les expressions régulières ... c'est super performant !

merci bcp Messieurs pour votre aide . L'option Macro me paraît très bien , en ravanche je suis preneur de quelques commentaires concernant les lignes de codes . Encore merci

Sub trouve_num_BC()

Dim i As Long

Dim j As Integer

Dim tb

Dim numBC As String

For i = 2 To Range("A" & Rows.Count).End(xlUp).Row

If Cells(i, "B") = "" Then

tb = Split(Cells(i, "A"), "SIE")

numBC = ""

If UBound(tb) > 0 Then

For j = 1 To UBound(tb)

If IsNumeric(Left(tb(j), 2)) Then numBC = "SIE" & Left(tb(j), 9): Exit For

Next j

End If

If numBC <> "" Then Cells(i, "B") = numBC Else Cells(i, "B") = "NBC"

Set tb = Nothing

End If

Next

End Sub

Bonjour

je vais commenter le code et re-poster le fichier

Fred

Re bonjour

Ci joint le code commenté.. si plus de questions... demande

Fred

4krimo1973.xlsm (499.23 Ko)

merci à vous tous !

n'oublie pas...

Fred

Merci encore une fois . Oui le problème est bien résolu .

Rechercher des sujets similaires à "boucles pas"