IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Décoder messages sous VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut Décoder messages sous VBA
    Bonjour le forum
    Ayant toujours trouvé de l’aide sur ce forum, je reviens cette fois-ci avec un nouveau sujet, en effet je cherche via une macro VBA à décoder le message ci-dessous:

    081544Z 0818/0824 23015KT 9999 SCT020 TN18/2608Z TX26/2617Z BECMG 0822/0824 29007KT 5000 BECMG 0906/0908 35005KT 7000 BKN020 PROB30 TEMPO 0912/0914 19010KT 9999 OVC010 TEMPO 0922/0924 12005KT =
    La façon dont je souhaiterais le décoder par VBA:

    081544Z 0818/0924 23015KT 9999 SCT020 TN18/2608Z TX26/2617Z =
    Groupe1
    Date issued= 08JUIN
    Time issued = 15h44
    Date de début de validité = 08JUIN
    Heure de début de validité = 18h00
    Date de fin de validité = 09JUIN
    Heure de fin de validité = 24h00
    wind=230
    Force=15
    Visibility=9999

    BECMG 0822/0824 29007KT 5000=
    Groupe2
    BECMG
    08Juin
    22h00
    08Juin
    24h00
    wind=290
    Force=07
    Visibility=5000

    BECMG 0906/0908 35005KT 7000 BKN020 =
    Groupe3
    BECMG
    09Juin
    06h00
    09Juin
    08h00
    wind=350
    Force=05
    Visibility= 7000
    Ceiling= 2000 (BKN020 = 20x100=2000)

    PROB30 TEMPO 0912/0914 19010KT 9999 OVC010 =
    Groupe4
    PROB30 TEMPO 0912/0914 19010KT 9999 OVC010 (message non décodé car le groupe commence par PROB30 TEMPO)

    TEMPO 0922/0924 12005KT =
    Groupe5
    TEMPO
    09Juin
    22h00
    09Juin
    24h00
    wind=120
    Force=05
    Le groupe 1 commence toujours de la même manière « Date, Time of issue, heure etc... » le groupe 1 s’arrête dès qu’il y a un mot clé (voir ci-dessous)

    Les mots-clés suivants annoncent à chaque fois un changement de groupe « BECMG ou PROB40 ou PROB30 ou PROB30 TEMPO ou PROB40 TEMPO ou TEMPO ou FM »

    Dans les groupes ci-dessus, deux doivent être ignorés « PROB30 TEMPO et PROB40 TEMPO », donc inutile de les décoder.

    Voir plus haut: dans l’exemple ci-dessus le Groupe4 n’a pas été décodé.

    Par avance merci beaucoup.

    Bien cordialement
    MU

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    en fait si tu regarde bien la structure de ta chaine et le résultat que tu souhaite obtenir tu donne toi même la réponse

    commence par splitter ta chaine par les chaines alpha que tu désigne
    et re split les segments par les espace
    le reste te sera facile
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Bonjour Patrick
    Je te remercie pour ton retour.
    Je suis complètement à l’arrêt j’ai essayé plusieurs solutions en vain, aurais-tu un code à me proposer stp?
    Par avance merci
    Mu

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Salut.

    Il faudrait déjà trouver ce qui permet de créer les groupes. Apparemment, ils ne sont pas de longueurs identiques. Dès lors, quelle est la logique pour découper les groupes?

    A partir de là, il sera possible de couper l'info complète en segments et, comme le dit Patrick, de récupérer les infos séparées par les espaces puis les traiter.

    Peux-tu donner la "syntaxe" de tes informations?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Bonjour Patrick,

    Merci pour ton retour.

    En effet comme mentionné plus haut les groupes ne dépendent pas de la longueur des syntaxes mais des mots clés :

    Les mots-clés suivants annoncent à chaque fois un changement de groupe « BECMG ou PROB40 ou PROB30 ou PROB30 TEMPO ou PROB40 TEMPO ou TEMPO ou FM »

    Par avance merci.
    Mu

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Moi, c'est Pierre... Ca me ferait plaisir qu'on ne confonde pas.

    Oups, je n'avais pas lu ton message en entier. Désolé. C'est qui l'inventeur génial de cette extraction ? Il faudrait un caractère spécifique pour séparer les blocs. C'est encore un stagiaire qui a pondu n'importe quoi?

    Ton premier groupe ne commence pas par un des sigles que tu renseignes. Est-ce normal?

    @Patrick

    Citation Envoyé par patricktoulon Voir le message
    [...]

    commence par splitter ta chaine par les chaines alpha que tu désigne[...]
    Vachement curieux de voir comment tu vas splitter les segments alors que les mots-clé sont différents et que leur ordre d'apparition n'est pas défini. Mais bien sûr yaka faire comme tu dis. Dingue
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Pierre,

    Désolé de t’avoir confondu en effet j’avais bien identifié ton prénom 😉.

    Le premier groupe commence toujours par la date et l’heure: 081544Z (ex: 08juin 15h44) c’est par la suite qu’il faudra intégrer les séparateurs de groupe pour le 2, 3, 4 etc... (BECMG, PROB30 TEMPO, PROB40 TEMPO, TEMPO etc...)

    Par avance merci.
    Mu

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    C'est d'abord une histoire de réflexion et de mise en place d'outils. Je facilite le travail en plaçant les mots-clé dans une table de données et en les triant. Le tri a ici toute son importance! Il faut commencer par les mots-clé qui en incluent d'autres. Pour faciliter la démarche, j'ai également mis la chaine complète dans un tableau. Je donne le code pour une chaine, mais il suffira de boucler sur les chaines présentes dans le tableau pour réaliser le travail sur un groupe de chaines.

    Nom : 2019-06-10_075609.png
Affichages : 292
Taille : 6,7 Ko


    Extraire les séquences

    On n'a pas de séparateur facile pour le split? On en crée un en complétant les mots-clé par un séparateur défini. Comme certains mots-clé en contiennent d'autres, il faut les remplacer dans un ordre spécifique (par exemple, Prob30 Tempo avant Prob30 et Tempo).

    On a besoin d'une fonction qui renvoie un array concernant les séquences. Elle reçoit la chaîne à découper, un tableau (array) avec les mots-clé dans le bon ordre et un séparateur unique). La difficulté ici réside dans le fait que certains mots-clé en composent d'autres (Tempo => PROB30 TEMPO). L'astuce consiste donc à remplacer chaque mot-clé par un générique incrémenté. On va le faire précéder du séparateur choisi (ici, le ; ) ET on va remplacer l'espace des mots-clé composés par un _. Puis on remplace les mots-clé génériques incrémentés par leur valeur de début (avec le _ à la place de l'espace pour les mots-clé composés). Attention qu'à ce stade les mots-clé composés conservent le underscore. C'est important pour la suite afin de retrouver plus facilement le mot-clé en début de séquence. C'était la partie la plus complexe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function getDatas(ByVal Value As String, ByVal Separators, ByVal separator As String)
      Dim Cell As Range
      Dim Counter As Long
     
      For Counter = 1 To Range("t_Bornes[borne]").Count
        Value = Replace(Value, Range("t_Bornes[borne]")(Counter).Value, separator & "Group" & Counter)
      Next
      For Counter = 1 To Range("t_Bornes[borne]").Count
        Value = Replace(Value, "Group" & Counter, Replace(Range("t_Bornes[borne]")(Counter).Value, " ", "_"))
      Next
      getDatas = Split(Value, separator)
    End Function
    Extraire les données d'un segment

    On va d'abord créer un type personnalisé pour récupérer les données de chaque segment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Type Group
      Ceiling As Long
      Date_Issued As String
      Force As Long
      KeyWord As String
      Position As Long
      Time_Issued As Date
      ValidityBeginDate As String
      ValidityBeginTime As Date
      ValidityEndDate As String
      ValidityEndTime As Date
      Visibility As Long
      Wind As Long
    End Type
    L'idée est de traiter chaque segment dans une boucle en créant un Group (la variable perso) puis en lui affectant les valeurs.
    Vu que les segments ne sont pas séquencés de la même manière, on va créer une procédure pour chaque partie à extraire. Chaque procédure recevra un Group en ByRef et lui affectera les données qui le concernent.

    Par exemple, pour le vent, on crée la procédure suivante, qui reçoit une variable Group et son segment pour valoriser Wind et Force. On effectuera la même démarche pour les autres données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub SetWindForce(G As Group, ByVal Data As String)
      Dim Pos As Long
      Dim Value As String
     
      Pos = InStr(Data, "KT")
      If Pos > 0 Then
        G.Wind = Mid(Data, Pos - 5, 3)
        G.Force = Mid(Data, Pos - 2, 2)
      End If
    End Sub
    Pour les mots-clé et les validités, il a fallu tenir compte de la position du segment dans le tableau, puisque le segment 1 n'a pas de mot-clé. On n'extrait donc pas le mot-clé pour ce segment, et la position des validités est différente dans le segment 1 par rapport aux autres segments. On voit ici qu'il est important de d'abord définir la position du groupe dans la chaine de départ car on se sert de cela pour extraire ces données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub SetKeyWord(ByRef G As Group, ByVal Data As String)
      If G.Position > 1 Then G.KeyWord = Replace(Left(Data, InStr(1, Data, " ") - 1), "_", " ")
    End Sub
     
    Sub setValidities(ByRef G As Group, ByVal Data As String)
      Dim Pos As Long
     
      If G.Position = 1 Then
        Pos = 1
      Else
        Pos = InStr(1, Data, " ") + 1
      End If
      With G
        .ValidityBeginDate = Mid(Data, Pos, 2)
        .ValidityBeginTime = Mid(Data, Pos + 2, 2) / 24
        .ValidityEndDate = Mid(Data, Pos + 5, 2)
        .ValidityEndTime = IIf(Mid(Data, Pos + 7, 2) = "24", TimeSerial(23, 59, 59), Mid(Data, Pos + 7, 2) / 24)
      End With
    End Sub
    Dès lors, valoriser la variable de type Groupe revient à appeler les différentes procédures permettant d'extraire une donnée spécifique du segment. Ce que fait la fonction qui reçoit un segment et sa position et qui retourne une variable Group valorisée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function getGroup(ByRef Data, ByVal IssuedDate As String, IssuedTime As Date, ByVal Position) As Group
      Dim G As Group
     
      G.Position = Position
      G.Date_Issued = IssuedDate
      G.Time_Issued = IssuedTime
      SetCeiling G, Data
      SetKeyWord G, Data
      setValidities G, Data
      SetVisibility G, Data
      SetWindForce G, Data
      getGroup = G
    End Function


    A la fin, on a un tableau de Group et on en fait ce qu'on veut. Ici, je les ai poussés dans une table de données. Pour ce transfert, je n'ai pas fait dans la dentelle, il y a plus pro. Ici, c'est juste à titre exemplatif que j'ai réalisé cette partie du code, pour visualiser les extractions et les vérifier.

    Nom : 2019-06-10_105428.png
Affichages : 308
Taille : 11,7 Ko


    Il reste quelques questions:
    • Est-ce normal que le premier groupe n'ait pas de mot-clé?
    • Les OVC et SCT ne doivent pas être extraits? S'ils doivent l'être, il faudra procéder comme pour l'extraction des autres données;
    • Pour les dates, comment détermines-tu le mois de juin et l'année?


    Tu devras adapter le traitement en fonction des réponses que tu fourniras.

    Attention!! Ce code est donné à des fins pédagogiques. A toi à le compléter et surtout à le tester avec des jeux de donnés réelles pour débusquer les éventuels soucis, cas non présents dans l'unique chaine donnée ici, etc, etc...




    Voici le code actuel du traitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    Option Explicit
     
    Public Type Group
      Ceiling As Long
      Date_Issued As String
      Force As Long
      KeyWord As String
      Position As Long
      Time_Issued As Date
      ValidityBeginDate As String
      ValidityBeginTime As Date
      ValidityEndDate As String
      ValidityEndTime As Date
      Visibility As Long
      Wind As Long
    End Type
     
    Function getArrayFromCells(Cells As Range)
      Dim Counter As Long
      Dim t()
     
      ReDim t(1 To Cells.Count)
      For Counter = 1 To UBound(t)
        t(Counter) = Cells(Counter).Value
      Next
      getArrayFromCells = t
    End Function
     
    Sub Extract()
      Dim Separators
      Dim Data As String
      Dim Datas
      Dim IssuedDate As String
      Dim IssuedTime As Date
      Dim Counter As Long
      Dim NewGroup As Group
      Dim Groups() As Group
     
      Data = Feuil2.Range("a2").Value
      IssuedDate = Left(Data, 2)
      IssuedTime = Mid(Data, 3, 2) / 24 + Mid(Data, 5, 2) / 1440
      Data = Replace(Data, Left(Data, 8), "")
      Separators = getArrayFromCells(Range("t_Bornes[Borne]"))
      Datas = getDatas(Data, Separators, ";")
      ReDim Groups(UBound(Datas))
      For Counter = 0 To UBound(Datas)
        Groups(Counter) = getGroup(Trim(Datas(Counter)), IssuedDate, IssuedTime, Counter + 1)
      Next
      PutGroupsInTable Groups
    End Sub
     
    Sub PutGroupsInTable(ByRef Groups() As Group)
      Dim Counter As Long
     
      For Counter = LBound(Groups) To UBound(Groups)
        PutGroupInTable Groups(Counter)
      Next
    End Sub
     
    Sub PutGroupInTable(Group As Group)
      Dim NewRow As ListRow
     
      Set NewRow = Range("t_Groupes").ListObject.ListRows.Add()
      With Group
        NewRow.Range(1).Value = .Position
        NewRow.Range(2).Value = .KeyWord
        NewRow.Range(3).Value = .Date_Issued
        NewRow.Range(4).Value = .Time_Issued
        NewRow.Range(5).Value = .ValidityBeginDate
        NewRow.Range(6).Value = .ValidityBeginTime
        NewRow.Range(7).Value = .ValidityEndDate
        NewRow.Range(8).Value = .ValidityEndTime
        NewRow.Range(9).Value = .Wind
        NewRow.Range(10).Value = .Force
        NewRow.Range(11).Value = .Visibility
        NewRow.Range(12).Value = .Ceiling
      End With
     
    End Sub
     
    Function getDatas(ByVal Value As String, ByVal Separators, ByVal separator As String)
      Dim Cell As Range
      Dim Counter As Long
     
      For Counter = 1 To Range("t_Bornes[borne]").Count
        Value = Replace(Value, Range("t_Bornes[borne]")(Counter).Value, separator & "Group" & Counter)
      Next
      For Counter = 1 To Range("t_Bornes[borne]").Count
        Value = Replace(Value, "Group" & Counter, Replace(Range("t_Bornes[borne]")(Counter).Value, " ", "_"))
      Next
      getDatas = Split(Value, separator)
    End Function
     
    Function getGroup(ByRef Data, ByVal IssuedDate As String, IssuedTime As Date, ByVal Position) As Group
      Dim G As Group
     
      G.Position = Position
      G.Date_Issued = IssuedDate
      G.Time_Issued = IssuedTime
      SetCeiling G, Data
      SetKeyWord G, Data
      setValidities G, Data
      SetVisibility G, Data
      SetWindForce G, Data
      getGroup = G
    End Function
     
    Sub SetCeiling(ByRef G As Group, ByVal Data As String)
      Dim Pos As Long
     
      Pos = InStr(1, Data, "BKN")
      If Pos > 0 Then G.Ceiling = Mid(Data, Pos + 4, 2) * 100
    End Sub
     
    Sub SetKeyWord(ByRef G As Group, ByVal Data As String)
      If G.Position > 1 Then G.KeyWord = Replace(Left(Data, InStr(1, Data, " ") - 1), "_", " ")
    End Sub
     
    Sub setValidities(ByRef G As Group, ByVal Data As String)
      Dim Pos As Long
     
      If G.Position = 1 Then
        Pos = 1
      Else
        Pos = InStr(1, Data, " ") + 1
      End If
      With G
        .ValidityBeginDate = Mid(Data, Pos, 2)
        .ValidityBeginTime = Mid(Data, Pos + 2, 2) / 24
        .ValidityEndDate = Mid(Data, Pos + 5, 2)
        .ValidityEndTime = IIf(Mid(Data, Pos + 7, 2) = "24", TimeSerial(23, 59, 59), Mid(Data, Pos + 7, 2) / 24)
      End With
    End Sub
     
    Sub SetVisibility(ByRef G As Group, ByVal Data As String)
      Dim Pos As Long
     
      Pos = InStr(1, Data, "KT")
      If Pos > 0 And Pos < Len(Data) - 6 Then G.Visibility = Mid(Data, Pos + 3, 4)
    End Sub
     
    Sub SetWindForce(ByRef G As Group, ByVal Data As String)
      Dim Pos As Long
     
      Pos = InStr(1, Data, "KT")
      If Pos > 0 Then
        G.Wind = Mid(Data, Pos - 5, 3)
        G.Force = Mid(Data, Pos - 2, 2)
      End If
    End Sub

    Reste à déterminer comment on fixe le mois et l'année pour récupérer des dates intéressantes et exploitables.
    Fichiers attachés Fichiers attachés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Bonjour Pierre,

    Je te remercie pour ton retour et ta proposition très intéressante.

    Tu trouveras ci-après les réponses à tes questions:

    Est-ce normal que le premier groupe n'ait pas de mot-clé?
    Oui tout à fait le premier groupe n'a jamais de mot-clé on le reconnaît par le début de la syntaxe (date+heure)

    Les OVC et SCT ne doivent pas être extraits? S'ils doivent l'être, il faudra procéder comme pour l'extraction des autres données;
    Les OVC doivent être extraits seulement s'ils sont précédés de "PROB30, PROB40, BECMG, TEMPO, FM) uniquement et doivent être ignorés s'ils sont précédés de "PROB30 TEMPO et PROB40 TEMPO"

    Les SCT ne sont jamais extraits.


    Pour les dates, comment détermines-tu le mois de juin et l'année?

    Etant donné que c'est un message reçu tous les jours, nous devons considérer la date, le mois et l'année en cours au moment de la réception.
    Exemple Groupe1:
    081544Z 0818/0824 23015KT 9999 SCT020 TN18/2608Z TX26/2617Z ( time of issue 08juin 15H44)


    J'espère avoir répondu à tes question et reste à ta dispo pour toute info complémentaire.

    Je teste ta proposition de suite et reviens vers toi rapidement.

    Merci encore,
    Mu

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Ok.

    A mon avis, il faudra mettre les chaines quotidiennes dans un tableau avec la date devant et on pourra alors traiter la chaine complète. A toi de préciser ce que sont les OVC et les SCT comme types de données... Pour savoir quand il faut les gérer, on peut le faire après, et les extraire comme les autres l'ont été. De toute façons, c'est peanuts de devoir tenir compte de cela car cela se fera dans le tableau Excel final.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour pierre
    Vachement curieux de voir comment tu vas découper tes segments à coup de Split.
    en premier lieu déterminer les séparateurs
    pour cela nous avons déjà un problèmes avec les expressions simples et composées du genre (pro30 /pro30 tempo/tempo)
    il nous faut donc redéfinir ses séparateurs
    ensuite a ses séparateurs il faut ajouter un caractère unique qui servira de point de repère pour le split global de la chaine en un coup !!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub TEST()
     'la chaine
    chaine = "081544Z 0818/0824 23015KT 9999 SCT020 TN18/2608Z TX26/2617Z BECMG 0822/0824 29007KT 5000 BECMG 0906/0908 35005KT 7000 BKN020 PROB30 TEMPO 0912/0914 19010KT 9999 OVC010 TEMPO 0922/0924 12005KT = "
    '
    'l'array tel quel
    sep = Array("PROB30 TEMPO", "PROB40 TEMPO", "BECMG", "PROB40", "PROB30", "TEMPO", "FM")
    '
    'la redéfinition des separateurs et remplacement dans la chaine par les new séparateurs
    For i = LBound(sep) To UBound(sep)
    chaine = Replace(chaine, " " & sep(i), "*" & Replace(sep(i), " ", "_"))
    sep(i) = " " & Replace(sep(i), " ", "_") & " "
    Next
    'résultat
    Debug.Print "Array transformé : "
    Debug.Print Join(sep, "|")
    Debug.Print "-------------------"
    Debug.Print "les lignes"
    Debug.Print Join(Split(chaine, "*"), vbCrLf)
    End Sub
    Nom : Capture.JPG
Affichages : 313
Taille : 121,8 Ko

    REMARQUE importante : tout les expressions composées sont en premier dans l'array

    en version simplifiée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub TEST()
    'la chaine
    chaine = "081544Z 0818/0824 23015KT 9999 SCT020 TN18/2608Z TX26/2617Z BECMG 0822/0824 29007KT 5000 BECMG 0906/0908 35005KT 7000 BKN020 PROB30 TEMPO 0912/0914 19010KT 9999 OVC010 TEMPO 0922/0924 12005KT = "
    'l'array tel quel
    sep = Array("PROB30 TEMPO", "PROB40 TEMPO", "BECMG", "PROB40", "PROB30", "TEMPO", "FM")
    'la redéfinition des separateurs et remplacement dans la chaine par les new separateurs
    For i = LBound(sep) To UBound(sep)
    chaine = Replace(chaine, " " & sep(i), "*" & Replace(sep(i), " ", "_"))
    Next
    'résultat
    Debug.Print "les lignes"
    Debug.Print Join(Split(chaine, "*"), vbCrLf)
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  12. #12
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Pierre,

    En effet j'ai oublié de préciser, les OVC sont de la même famille que les BKN, de ce fait nous pouvons les extraire dans la colonne "CIEL".

    Concernant le Groupe1 je viens de voir qu'il y aurait une possibilité de mettre un code quatre lettres devant pour faciliter l'identification ex: LFPO 081544Z 0818/0824 23015KT 9999 SCT020 TN18/2608Z TX26/2617Z
    Cependant le code quatre lettres ne sera jamais identique et variera en fonction des messages reçus.

    qu'en penses-tu?

    Merci
    Mu

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    [...]
    Tout cela a déjà été dit, c'est la solution que j'ai proposée ce matin... C'est assez facile de venir après pour dire la même chose... Tu vas faire le perroquet?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    c'est comme ca que je l'entendais depuis le début
    je n'ai pas regardé tes propositions j'ai juste vu des captures de TS (j'ai pas voulu te suivre sur ce chemin)
    tu m'a dis je suis curieux ben voila
    je fait sans TS
    sans vouloir t'offenser je n'ai pas eu besoins de toi sur ce coup la instr,instrrev,mid,split,etc... je pense savoir les utiliser et en exploiter les capacités
    et ca n'est pas le premier exercice du même genre (avec une chaine complètement désordonné et ou aucun repère)que l'on voit

    edit:

    bon je viens de lire ta proposition et effectivement on a le même raisonnement sur les expression composées qui doivent être en premier replacées
    c'est la tout le principe en fait

    et même si on voulais pas trier les expressions sachant qu'il y a les 2 simples pour une composée on remplace les doubles caractères déterminant les repères du split par un seul
    dans cet exemple je vais jusqu'à 3 mots pour une expression pouvant déterminer un groupe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub TEST()
    'la chaine
    chaine = "081544Z 0818/0824 23015KT 9999 SCT020 TN18/2608Z TX26/2617Z BECMG 0822/0824 29007KT 5000 BECMG 0906/0908 35005KT 7000 BKN020 PROB30 TEMPO 0912/0914 19010KT 9999 OVC010 TEMPO 0922/0924 12005KT = "
    'l'array tel quel
    sep = Array("BECMG", "PROB40", "PROB30", "TEMPO", "FM", "PROB30 TEMPO", "PROB40 TEMPO")
    'remplacement ses expressions par une Etoile et remplacement des multiples Etoiles obtenues par une seule (expression jusqu'à 3 mots )
    For i = LBound(sep) To UBound(sep)
    chaine = Replace(Replace(Replace(chaine, sep(i), "*"), "* *", "*"), "* * *", "*")
    Next
    'résultat
    Debug.Print Join(Split(chaine, "*"), vbCrLf)
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Merci beaucoup à tous les deux pour vos propositions.


    Cependant nouvelle extraction ce matin avec un deuxième cas de figure que j'ai complètement omis de prendre en compte:

    100500Z 1006/1112 25007KT CAVOK PROB30 TEMPO 1006/1008
    VRB03KT BKN008 PROB40 TEMPO 1008/1011 4000 RA BKN020 BKN060TCU BECMG
    1011/1014 SCT025 TEMPO 1014/1018 24012G22KT -SHRA SCT030CB
    BECMG 1018/1021 VRB03KT CAVOK BECMG 1104/1106 BKN006 PROB40
    TEMPO 1106/1108 BKN012 BECMG 1108/1111 17007KT SCT025=



    Splitter en plusieurs groupes:

    Groupe1
    100500Z 1006/1112 25007KT CAVOK ("CAVOK"= 9999 représente la visibilité parfois il est codé de cette manière)

    Groupe2
    PROB30 TEMPO 1006/1008 VRB03KT BKN008 (VRB=000 représente "secteur vent" parfois il est codé de cette manière)


    Groupe3
    PROB40 TEMPO 1008/1011 4000 RA BKN020 BKN060TCU (ici j'ai deux BKN contrairement au premier cas de figure je dois tout de même effecter le calcul pour le "ciel" (BKN020 = 20 X 100 =2000) (BKN060TCU=60X100=6000)

    Groupe4
    BECMG 1011/1014 SCT025 (ce cas de figure je n'ai pas de "vent ni de visibilité" ni de "ciel" donc doit être ignoré car l'info n'est pas intéressante à traiter, il faut savoir que dans chaque groupe je cherche à extraire et traiter l'info vent, force, visibilité et ciel c'est principalement ce que je recherche dans chaque groupe.

    Groupe5
    TEMPO 1014/1018 24012G22KT -SHRA SCT030CB (ici j'ai uniquement l'info vent "24012G22KT" cela m'intéresse je le splitte comme suit: secteur vent = 240, force vent=22 étant donné qu'il y a un "G" je dois le splitter de cette manière

    Groupe6
    BECMG 1018/1021 VRB03KT CAVOK (VRB03KT = secteur vent =000 force=3; visibilité "CAVOK"=9999

    Groupe7
    BECMG 1104/1106 BKN006 (Pas d'info vent ni visibilité mais j'ai une info "CIEL" que je dois traiter (BKN006 = 6X100= 600)

    Groupe8
    PROB40TEMPO 1106/1108 BKN012 (doit être ignoré car commençant par PROB40 TEMPO)

    Groupe9
    BECMG 1108/1111 17007KT SCT025= (Je traite uniquement l'info vent =secteur vent=170, force vent=7


    Pierre,

    y aurait-il possibilité d'adapter ton code pour prendre en compte le cas de figure ci-dessus s'il te plaît?
    Est ce possible de faire un code sans tenir compte des positions dans les groupes qui sont amenées à changer selon les extractions?

    Les seules positions qui ne changeront pas sont les mots-clés "PROB30, PROB40 TEMPO, BECMG etc... qui seront toujours suivis par la date et l'heure (ex:BECMG 1108/1111 ; PROB40 TEMPO 1106/1108 ...)

    J'ai essayé de faire marcher ton code avec cette nouvelle extraction mais cela ne fonctionne pas étant donné que certaines positions dans les groupes ont changé et nous n'avions pas pris en compte ce nouveau cas de figure.

    Par avance merci beaucoup.
    Mu

  16. #16
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    L'avantage de la programmation par modules comme je l'ai proposée, c'est que tu as peu de choses à modifier pour adapter chaque situation

    Par contre, il faudrait définir quand tu as une donnée "Visibility". Parfois c'est CADOK et parfois c'est une suite de 4 chiffres? initialement, je positionnais la visibilité après KT mais apparemment, au vu du deuxième groupe que tu as mentionné, ce n'est pas le cas. Il serait intéressant que tu détailles comment chaque propriété est définie. Une suite de quatre chiffres encadrés par des espaces ou en fin de chaine représente-t-elle toujours la visibilité?

    Pour le vent, il "suffit" de modifier setWindForce mais comme on a plusieurs cas de figure et que tu dévoiles de nouveaux cas au fur et à mesure, il sera peut-être intéressant de travailler en créant un array des blocs et en passant l'array plutôt que le segment. Je l'ai fait pour le vent, il faudra voir si c'est payant de généraliser.(pas testé car en attente de la suite). Quoi qu'il en soit, c'est toujours dans les petites procédures qui traitent une propriété que cela se joue, quelle que soit la manière d'extraire les données à l'intérieur de chaque procédure.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Sub SetWindForce(ByRef G As Group, ByVal Values)
      Dim Pos As Long
      Dim Value As String
      Dim Counter As Long
     
      Do While Counter <= UBound(Values) And Value = ""
        If InStr(1, Values(Counter), "KT") > 0 Then Value = Values(Counter)
        Counter = Counter + 1
      Loop
      If Value <> "" Then
        Pos = InStr(1, Value, "VRB")
        If Pos > 0 Then
          G.Wind = "000"
          G.Force = Mid(Value, Pos + 3, 2)
        ElseIf InStr(1, Value, "G") Then
          G.Wind = Left(Value, 3)
          G.Force = Mid(Value, InStr(1, Value, "G") + 1, 2)
        Else
          Pos = InStr(1, Value, "KT")
          If Pos > 0 Then
            G.Wind = Mid(Value, Pos - 5, 3)
            G.Force = Mid(Value, Pos - 2, 2)
          End If
        End If
    End Sub
    Dans le groupe 3, tu as donc 2BKN. Tu peux en avoir plus que deux? Le premier n'est pas suffixé, le second l'est avec CTU... Ca a une importance?

    Groupe 4 , on ne traite pas à ce stade, on verra après

    Groupe5, il faut juste adapter la procédure setWindForce (ok, voir groupe 2, je suppose)


    Groupes suivants: Ok, à mon avis, pas traités à ce stade

    Pour ce qui est des OVC à extraire dans certains cas, pour moi, on les extrait dans tous les cas et on voit en Excel après... Peux-tu me dire à quoi ça correspond (terminologie)? => Plafond? Autre chose? Quoi qu'il en soit, ce sera un SetOvc(...) qui règlera l'affaire... Il faut ajouter la variable dans le type personnalisé, et il faut ajouter le transfert dans Excel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub SetOvc(ByRef G As Group, ByVal Data As String)
      Dim Pos As Long
     
      Pos = InStr(1, Data, "OVC")
      If Pos > 0 Then G.OVC = Mid(Data, Pos + 3, 3)
    End Sub



    Peux-tu donner les réponses à ces questions?


    Il faudrait aussi essayer de donner un segment avec les données complètes que l'on peut avoir. As-tu d'autres infos à communiquer?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  17. #17
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Pierre,

    tu trouveras ci-après les réponses à tes questions, en te remerciant:

    Par contre, il faudrait définir quand tu as une donnée "Visibility". Parfois c'est CAVOK et parfois c'est une suite de 4 chiffres? initialement, je positionnais la visibilité après KT mais apparemment, au vu du deuxième groupe que tu as mentionné, ce n'est pas le cas. Il serait intéressant que tu détailles comment chaque propriété est définie. Une suite de quatre chiffres encadrés par des espaces ou en fin de chaine représente-t-elle toujours la visibilité?

    Oui concernant la visibilité, c'est à chaque fois une suite de quatre chiffres ou du "CAVOK" qui est égal à "9999"


    Dans le groupe 3, tu as donc 2BKN. Tu peux en avoir plus que deux? Le premier n'est pas suffixé, le second l'est avec CTU... Ca a une importance?
    oui je peux en avoir plus que deux et le suffixe n'a aucune importance (CTU doit être ignoré).

    Pour ce qui est des OVC à extraire dans certains cas, pour moi, on les extrait dans tous les cas et on voit en Excel après... Peux-tu me dire à quoi ça correspond (terminologie)? => Plafond? Autre chose? Quoi qu'il en soit, ce sera un SetOvc(...) qui règlera l'affaire... Il faut ajouter la variable dans le type personnalisé, et il faut ajouter le transfert dans Excel.

    OVC "overcast" c'est du plafond
    BKN "broken" c'est du plafond
    NSC "non significant cloud" c'est du plafond
    SCT "scatered"= doit être ignoré
    FEW = doit être ignoré


    Ci-après quelques exemples d'extraction de ce matin:

    101100Z 1012/1112 32012KT 9999 FEW030 BECMG 1019/1021
    33007KT TEMPO 1021/1106 BKN030 BECMG 1106/1109 35017KT TEMPO
    1109/1112 34020G30KT=

    101105Z 1012/1112 VRB05KT 9999 FEW030 TEMPO 1012/1020
    17010KT FEW020 BKN035=

    101100Z 1012/1112 VRB06KT 9999 FEW035 TX18/1014Z
    TN08/1106Z PROB40 TEMPO 1012/1019 32010KT SCT030TCU TEMPO
    1102/1108 3000 -RA BR BKN010 BECMG 1107/1109 01010KT=


    101100Z 1012/1112 35007KT 9999 FEW025 TEMPO 1015/1019
    VRB03KT -SHRA SCT020CB PROB40 TEMPO 1016/1019 5000 SHRA=


    Cordialement,
    MU

  18. #18
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Peux-tu avoir en même temps un (des) BKN et d'autres plafonds? Je suppose que non pour un même segment... As-tu besoin du type de plafond (BKN, OVC, ...)?
    Comment comptes-tu analyser les résultats lorsque tu as plusieurs bkn? Les mettre dans différentes colonnes du tableau reprenant les données de chaque "groupe" ne me semble guère productif pour les analyser? Faut-il aussi multiplier les autres plafonds par 100? Je suppose que oui.

    Tu sembles avoir la main sur certaines possibilités d'extraction...Sais-tu par exemple modifier les données pour que ce qui les identifie arrive en tête? Parfois, tu as la donnée après son identifiant (BKN, ...) parfois après (190.07KT)... Ce serait évidemment plus pratique s'il y avait une certaine norme...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  19. #19
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2016
    Messages : 54
    Points : 21
    Points
    21
    Par défaut
    Peux-tu avoir en même temps un (des) BKN et d'autres plafonds?
    Comment comptes-tu analyser les résultats lorsque tu as plusieurs bkn? Les mettre dans différentes colonnes du tableau reprenant les données de chaque "groupe" ne me semble guère productif pour les analyser? Faut-il aussi multiplier les autres plafonds par 100? Je suppose que oui.

    Je dois prendre en compte le plus restrictif des plafonds "BKN ou OVC", il se peut dès fois que je n'en ai pas du tout voire marqué "NSC" , si pas de plafond on peut mettre une valeur nulle "0".

    Pour répondre plus précisément à ta question si j'ai deux "BKN" dans un même groupe je dois considérer la plus petite valeur (ex=BKN020 (20 X100=2000) et BKN060TCU (60X100=6000) = plus petite des deux 2000



    Tu sembles avoir la main sur certaines possibilités d'extraction...Sais-tu par exemple modifier les données pour que ce qui les identifie arrive en tête? Parfois, tu as la donnée après son identifiant (BKN, ...) parfois après (190.07KT)... Ce serait évidemment plus pratique s'il y avait une certaine norme...


    Cependant je n'ai pas la main pour faire une modif telle que décrite ci-dessus.

    Merci pour tout
    MU

  20. #20
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Muret31 Voir le message
    [...]

    Je dois prendre en compte le plus restrictif des plafonds "BKN ou OVC", il se peut dès fois que je n'en ai pas du tout voire marqué "NSC" , si pas de plafond on peut mettre une valeur nulle "0".

    Pour répondre plus précisément à ta question si j'ai deux "BKN" dans un même groupe je dois considérer la plus petite valeur (ex=BKN020 (20 X100=2000) et BKN060TCU (60X100=6000) = plus petite des deux 2000[...]
    Ok. C'est déjà plus raisonnable. Donc, la règle est de prendre le plus restrictif de tous les plafonds (BKN, OVC, NSC, ...) que l'on trouve dans un segment, c'est bien ça?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/06/2009, 14h05
  2. Réponses: 8
    Dernier message: 07/10/2004, 11h08
  3. (VBA-A] Requete access sous VBA
    Par vanima dans le forum VBA Access
    Réponses: 12
    Dernier message: 20/07/2004, 16h07
  4. Syntaxe PARAMETERS pour requête sous VBA
    Par GAGNON dans le forum VBA Access
    Réponses: 3
    Dernier message: 28/11/2003, 11h39
  5. Réponses: 7
    Dernier message: 29/10/2002, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo