Rechercher et extraire des nombres dans différent texte

Tableur_7399 Messages postés 1 Statut Membre -  
Frenchie83 Messages postés 2254 Statut Membre -
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

3 réponses

  1. yclik Messages postés 3871 Date d'inscription   Statut Membre Dernière intervention   1 609
     
    Bonsoir
    A tester
    si les nombres finissent tous par 0 alors recherche position "0 pi" dans le texte de la cellule
    1
  2. Frenchie83 Messages postés 2254 Statut Membre 339
     
    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
  3. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
    1. Frenchie83 Messages postés 2254 Statut Membre 339
       
      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