Rechercher et extraire des nombres dans différent texte

Tableur_7399 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je tente de trouver une façon d'extraire le nombre qui se trouve devant les caractères "pi", "pi ASL" ou "pi AGL". Mon mon problème est que les textes ont été rédigés de différente façon et que le nombre peu varier en nombre de caractères (entre 100 et 20 000) et en format, ex; 1 000 ou 1000.

Exemple 1:
2020-08-25 - Le pilote d'un Bell 225B de 123 Helicopters Inc. (C-ABC) de l'héliport "Quelque part"(ABC), AB (CAXY), en vol local, a signalé avoir vu un drone décoller sur sa gauche et plus bas 2500 pi. La Gendarmerie royale du Canada (GRC) a été informée. Le gestionnaire de quart a été avisé.

Exemple 2:
2023-10-40 - Un Cessna 172S exploité par ABC inc (C-ABCD) dans le circuit vers la piste XY de l?aéroport d?ARLONGTON, BC (CABC), a signalé avoir aperçu un avion modèle rouge à environ 0,5 mille au sud du seuil de la piste 25, à une altitude d?environ 700 pi ASL.

J'aimerais extraire en 2 cellules a) le nombre et b) le type (pi, ASL ou AGL)

Merci!

Configuration: Windows / Chrome 78.0.3904.108
A voir également:

3 réponses

yclik Messages postés 3876 Date d'inscription   Statut Membre Dernière intervention   1 563
 
Bonsoir
A tester
si les nombres finissent tous par 0 alors recherche position "0 pi" dans le texte de la cellule
1
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   338
 
Bonjour,

Autre proposition avec des fonctions personnalisées

le fichier en exemple:
https://mon-partage.fr/f/xvXjF8LO/

Pour les nombres en B2, et à tirer vers le bas
=Extract_Nb(A2)


Pour les types en C2 et à tirer vers le bas
=Extract_Type(A2)


Le code utilisé (dans un module standard):
Dim Pos As Long
Dim Cell As String, n As String, x As String

Function Extract_Type(Texte As String) As String
    Types = "PI."
    Pos = InStr(1, Texte, Types, 1)
    If Pos <> 0 Then
        Extract_Type = "PI"
    ElseIf Pos = 0 Then
        Types = "PI ASL"
        Pos = InStr(1, Texte, Types, 1)
        Extract_Type = Types
    ElseIf Pos = 0 Then
        Types = "PI AGL"
        Pos = InStr(1, Texte, Types, 1)
        Extract_Type = Types
    Else
        Extract_Type = ""
    End If
End Function

Function Extract_Nb(Texte As String) As String
    Cell = Texte
    Types = "PI."
    Pos = InStr(1, Texte, Types, 1)
    If Pos <> 0 Then
        recup_Nombre
        Extract_Nb = n
    ElseIf Pos = 0 Then
        Types = "PI ASL"
        Pos = InStr(1, Texte, Types, 1)
        recup_Nombre
        Extract_Nb = n
    ElseIf Pos = 0 Then
        Types = "PI AGL"
        Pos = InStr(1, Texte, Types, 1)
        recup_Nombre
        Extract_Nb = n
    Else
        Extract_Nb = ""
    End If
End Function

Sub recup_Nombre()
    n = ""
    For i = Pos - 2 To 1 Step -1
        x = Mid(Cell, i, 1)
        If x <> " " Then
            n = x & n
        Else: Exit Sub
        End If
    Next i
End Sub


Cdlt
1
via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
Bonjour à tous

Frenchie ta fonction personnalisée ne traite pas le cas de nombres écrit sous la forme 2 500 comme il peut y en avoir d'après le demandeur

Pour pallier cela on peut remplacer la Sub recup_Nombre par celle-ci :
Sub recup_Nombre()
    n = ""
    For i = Pos - 2 To 1 Step -1
        x = Mid(Cell, i, 1)
        If x = " " Or Asc(x) > 47 And Asc(x) < 58 Then
            n = x & n
        Else: Exit Sub
        End If
    Next i
End Sub


Cdlmnt
Via
1
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   338
 
Bonjour Via55

J'y ai pensé, mais comme dans le 1er exemple proposé, le séparateur de milliers n'apparaissait pas, j'en ai pas tenu compte, à tord sûrement.
Merci d'avoir corrigé.

Cdlt
0