Rechercher et extraire des nombres dans différent texte

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. Bonsoir
    A tester
    si les nombres finissent tous par 0 alors recherche position "0 pi" dans le texte de la cellule
    1
    1. 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
      1. 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. 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