XL 2016 Comment extraire une série de lettre et chiffre qui peuvent varier (H1H1H1)

MaDaoust

XLDnaute Nouveau
Bonjour,

J'aimerais savoir s'il est possible d'extraire une série de lettre et chiffre, qui peuvent varier et ce qui vient après, dans une cellule texte. Cette série est disposée de cette façon (H0H0H0) lettre, chiffre, lettre, chiffre, lettre et chiffre. De plus, ils ne sont toujours situé au même endroit dans cette cellule et sont variable. J'ai environ 200 lignes a traiter et c'est un peu long de la faire à la main. Si vous pouviez m'aider svp.

Voici des exemples:

200 Rue de la plage Montréal J7K0L1 Mme Sable 555-555-5555 = J7K0L1 Mme Sable 555-555-5555
1890 Chemin de l'orage Ville H0H0H0 555-555-1234 = H0H0H0 555-555-1234


La solution peut être vba ou en formule

Merci de votre aide

Marc-André
 

patricktoulon

XLDnaute Barbatruc
bonsoir fanch55
oui ça j'avais compris mais si je suis la demande a la lettre
de ça
200 Rue de la plage Montréal J7K0L1 Mme Sable 555-555-5555 = J7K0L1 Mme Sable 555-555-5555
1890 Chemin de l'orage Ville H0H0H0 555-555-1234 = H0H0H0 555-555-1234

obtiens ceci
J7K0L1 Mme Sable 555-555-5555 = J7K0L1 Mme Sable 555-555-5555
1890 Chemin de l'orage Ville H0H0H0 555-555-1234 = H0H0H0 555-555-1234

il n'a pas demander une occurence en particulier
je cite
J'aimerais savoir s'il est possible d'extraire une série de lettre et chiffre, qui peuvent varier et ce qui vient après,
d'ou mon interrogation ;)
d'autant plus que si iil est question de séparer les adresses nous avons un probleme les sous chaines ne sont pas dans le meme ordre
conclusion si c'est bien l'intention c'est un cas insoluble sauf si ces code Alpha numerique ont une fonction précise dans la chaine
au quel que nous la connaissions serait un plus pour trouver une solution
 

fanch55

XLDnaute Barbatruc
Re bonjour,
Comme quoi la nuit apporte sa solution:
A tester puis à adapter :
VB:
Sub Test()
Dim Temoin  As String
Dim Lettre  As String
Dim Mot     As Variant
Dim Cell    As Range
Dim Plage  As Range
Dim I       As Integer

   ' Range de cellules à examiner :
    Set plage = [A1:A2]
 
    For Each Cell In plage
        For Each Mot In Split(Cell)
            If Len(Mot) = 6 Then
                Temoin = ""
                For I = 1 To Len(Mot)
                    Lettre = Mid(Mot, I, 1)
                    Temoin = Temoin & IIf(IsNumeric(Lettre), "0", "H")
                Next
                If Temoin = "H0H0H0" Then
                    I = InStr(Cell, Mot)
                   ' Début utile de la phrase
                    Cell.Offset(0, 1) = Trim(Left(Cell, I - 1))
                   ' Partie extraite
                    Cell.Offset(0, 2) = Mid(Cell, I)
                    Exit For
                End If
            End If
        Next
    Next

End Sub
 

Pièces jointes

  • Madaoust.xlsm
    14.9 KB · Affichages: 16
Dernière édition:

patricktoulon

XLDnaute Barbatruc
bonjour fanch55
ouaip ben 1 nuit de plus sera pas de trop 🤪
on en est jours au même point a savoir quelle est l'intéret
car de cette question la réponse devrait me semble t il modifier quelque peu le raisonnement
et donc rendre toute propositions déjà faite inadéquates

revois le résultat demandé en post 3 et dis moi que cela a un sens pour toi ;)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour tout le monde,
Un essai "just for the fun" en PJ. Pas sûr de couvrir tous les cas imaginables.
Je part du principe qu'un tel agencement ( Lettres Nombre Lettre ... ) est unique dans la phrase.

@MaDaoust, Et à quoi ça cela va vous servir ? Par pure curiosité. :)

VB:
Function Extrait(Chaine)
Dim tablo, i As Integer, j As Integer
Application.Volatile
tablo = Split(Chaine, " ")
For i = 0 To UBound(tablo)
    If Len(tablo(i)) = 6 Then   ' on traite les mots de 6 caractères
        Mot = tablo(i)
        If IsNumeric(Mid(Mot, 2, 1)) And IsNumeric(Mid(Mot, 4, 1)) And IsNumeric(Mid(Mot, 6, 1)) And _
            Not IsNumeric(Mid(Mot, 1, 1)) And Not IsNumeric(Mid(Mot, 3, 1)) And Not IsNumeric(Mid(Mot, 5, 1)) Then
            For j = i To UBound(tablo)
                Extrait = Extrait & " " & tablo(j)
            Next j
            Exit Function
        End If
    End If
Next i
End Function
 

Pièces jointes

  • extrait.xlsm
    14.5 KB · Affichages: 6

MaDaoust

XLDnaute Nouveau
Bonjour,

Merci pour votre aide, je vais vérifier le tout et vous faire part du résultat.

Pour répondre à Sylvanu, c'est que je dois prendre certaines données d'une cellule texte mais le problème c'est que chaque cellule n'ont pas le même nombre de caractère et la série de lettre, chiffre, lettre, chiffre, lettre, chiffre sont la seule donnée qui soit régulière et ce sont des code postaux canadiens. J'ai fait plusieurs essais avec des fonctions InStr, gauche, droite, regexp mais sans succès.
 

Statistiques des forums

Discussions
312 070
Messages
2 085 045
Membres
102 766
dernier inscrit
Awiix