Rechercher et extraire des nombres dans différent texte

Fermé
Tableur_7399 Messages postés 1 Date d'inscription vendredi 13 décembre 2019 Statut Membre Dernière intervention 13 décembre 2019 - 13 déc. 2019 à 17:05
Frenchie83 Messages postés 2240 Date d'inscription lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 - 13 déc. 2019 à 19:19
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 3593 Date d'inscription vendredi 25 juillet 2014 Statut Membre Dernière intervention 22 avril 2024 1 480
13 déc. 2019 à 17:56
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 lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
Modifié le 13 déc. 2019 à 18:47
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 14402 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 avril 2024 2 702
13 déc. 2019 à 19:04
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 lundi 6 mai 2013 Statut Membre Dernière intervention 11 août 2023 337
13 déc. 2019 à 19:19
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