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. #41
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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
    Par défaut
    je viens de rajouter mon fichier.
    Fichiers attachés Fichiers attachés

  2. #42
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Ok. Avec ton fichier, je comprends...

    La table des chaines brutes ne peut pas contenir des lignes vides. Il ne s'agit pas de vider les lignes, mais de les supprimer. Sinon, le code essaie d'extraire des caractères d'une chaine vide et fatalement, ça plante...

    Si tu supprimes bien tes lignes et que tu mets la date, ça passera...
    "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...
    ---------------

  3. #43
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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
    Par défaut
    Pourrais-tu s'il te plaît me joindre le fichier avec les lignes supprimées et la date rajoutée stp, visiblement ça plante toujours chez moi

    Merci

  4. #44
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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
    Par défaut
    En effet je viens de tester à nouveau avec les lignes supprimées et cela fonctionne parfaitement.

    Merci infiniment Pierre je t'ai bien usé aujourd'hui

    Je regarderai plus tard pour d'autres modifications mais pour le moment je vais pouvoir me débrouiller.

    Merci encore et excellente soirée.
    MU

  5. #45
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Pas de quoi...

    Il est certain qu'une fois que cela fonctionne, il faut "débusquer" les pièges et mettre des tests de cohérences. Dans la boucle qui traite les chaines brutes, on devrait normalement tester que la chaine n'est pas vide. On devrait aussi mettre des sécurités dans chaque procédure Set... du group pour vérifier que l'on peut effectivement traiter la donnée. Ici, je suis parti du principe que c'est un processus informatique qui crée les chaines et donc que les segments sont cohérents. Mais cela n'empêche pas qu'il faille mettre des sécurités pour ne pas buguer...
    "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...
    ---------------

  6. #46
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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
    Par défaut
    Merci Pierre,

    Depuis hier je me régale, ça marche tellement bien que je vais faire mon "rloud" je cherche le moyen de virer tous les PROB30 TEMPO et PROB40 TEMPO dans le tableau, ces derniers sont inutiles et me polluent le tableau

    et cerise sur le gâteau après réflexion ce serait mieux d'avoir le code lettre 4 lettres comme dans l'exemple ci-dessous:

    Nom : EXEMPLE.png
Affichages : 135
Taille : 13,0 Ko

    Ci-après un exemple d'extraction avec le code 4 lettre qui change à chaque fois:

    TLPL 111700Z 1118/1224 05015KT 9999 SCT014 TEMPO 1122/1208 8000=

    Promis je ne t'embête plus après

    Merci et bonne soirée
    MU

  7. #47
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Voici un fichier modifié. Comme tu avais parlé dès le début de devoir exclure les segments contenant certains mots-clé, c'était déjà prévu dans le tableau (colonne Utilisé). Il suffit de mettre ceux que tu ne veux pas à FAUX.

    Pour déterminer si un segment doit être repris ou pas, on utilise une fonction perso qui récupère la valeur de Utilisé pour un mot-clé donné. Cette fonction perso utilise EVALUATE avec INDEX/MATCH.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function KeyWordIsUsed(Keyword As String) As Boolean
      Dim Result
      Dim Formula As String
     
      Formula = "iferror(index(t_bornes[Utilisé],match(""" & Keyword & """,t_bornes[Borne],0))*-1,0)"
      Result = Evaluate(Formula)
      KeyWordIsUsed = Result
    End Function
    Pour l'ajout des quatre premières lettres comme nom, c'est réalisé avant de traiter les groupes puisque c'est le même nom pour tous les segments d'une chaine donnée. Par contre, comme cela a amené à ajouter une colonne en deuxième position dans le tableau final, il aurait fallu décaler tous les index de 1 dans la fonction qui renvoie les données dans la table. J'ai donc adapté cette fonction pour qu'elle retrouve la position de la colonne grâce à son nom. Cela implique que si on modifie l'ordre des colonnes, on ne doit pas modifier la fonction. Par contre, cela "fige" les noms de colonne dans la table des segments.
    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
    Sub PutGroupInTable(Group As Group)
      Dim NewRow As ListRow
      If Group.Position > 0 Then
        Set NewRow = Range("t_Groupes").ListObject.ListRows.Add()
        With Group
          NewRow.Range(NewRow.Parent.ListColumns("Position").Index).Value = .Position
          NewRow.Range(NewRow.Parent.ListColumns("Nom").Index).Value = .Name
          NewRow.Range(NewRow.Parent.ListColumns("Mot-Clé").Index).Value = .Keyword
          NewRow.Range(NewRow.Parent.ListColumns("Date").Index).Value = .Date_Issued
          NewRow.Range(NewRow.Parent.ListColumns("Heure").Index).Value = .Time_Issued
          NewRow.Range(NewRow.Parent.ListColumns("Date Début Validité").Index).Value = .ValidityBeginDate
          NewRow.Range(NewRow.Parent.ListColumns("Heure Début Validité").Index).Value = .ValidityBeginTime
          NewRow.Range(NewRow.Parent.ListColumns("Date Fin Validité").Index).Value = .ValidityEndDate
          NewRow.Range(NewRow.Parent.ListColumns("Heure Fin Validité").Index).Value = .ValidityEndTime
          NewRow.Range(NewRow.Parent.ListColumns("Secteur vent").Index).Value = .Wind
          NewRow.Range(NewRow.Parent.ListColumns("Force vent").Index).Value = .Force
          NewRow.Range(NewRow.Parent.ListColumns("Visibilité").Index).Value = .Visibility
          NewRow.Range(NewRow.Parent.ListColumns("Ciel").Index).Value = .Ceiling
          NewRow.Range(NewRow.Parent.ListColumns("Plafond").Index).Value = .Overcast
        End With
      End If
    End Sub
    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...
    ---------------

  8. #48
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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
    Par défaut
    Bonjour Pierre,
    C'est impeccable, le fichier marche très très bien avec tes dernières modifications.
    Merci infiniment pour ta disponibilité et surtout ton goût du partage.
    Bonne journée
    MU

  9. #49
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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
    Par défaut
    Bonsoir Pierre mon sauveur

    CYQX 141138Z 1412/1512 34010KT 5SM -DZ BR BKN004 OVC008
    TEMPO 1412/1415 P6SM NSW SCT008 OVC012 FM141500 06005KT P6SM BKN030
    TEMPO 1415/1418 BKN020 BECMG 1416/1418 11012KT FM141800 11012KT P6SM
    SCT120 FM150200 13010KT P6SM FEW008 SCT180
    PROB40 1502/1512 2SM BR OVC003 RMK NXT FCST BY 141800Z=

    J'ai testé toutes les possibilités et tout fonctionne sauf un cas celui ci-dessus

    1) le jour et l'heure après le FM est écrit différemment c'est à dire:

    FM141500 = 14JUIN 15H00

    2)Autre chose l'exemple ci-dessus la visibilité est exprimée en "SM" ex: "P6SM" et je voudrais juste extraire le chiffre "6" entre le "P" et le "SM", dès que j'ai la visibilité en "SM" j'aimerais extraire le chiffre entre le "P" et le "SM" pour info c'est toujours écrit de cette manière.
    j'aime l'extraire dans la colonne visibilité.

    3)Cerise sur le gâteau j'aimerais pouvoir faire un tri dans le tableau d'extraction c'est à dire si je mets deux plages horaires exemple 12H17 - 14H55 j'aimerais qu'il m'affiche uniquement les infos entre 12H17 ET 14H55

    Par avance merci et bon début de week-end.
    MU

  10. #50
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je pense qu'à un moment il faut raison garder.

    Ce n'est pas normal de devoir patcher constamment un code informatique pour y faire entrer toutes les exceptions. On n'en sort plus et le code final n'est plus ni lisible ni compréhensible. N'est-il vraiment pas possible de faire en sorte que FM soit suivi d'un espace? Ca n'a pas de sens que certains mots-clés soient suivis d'un espace et pas d'autres. Il deviendrait judicieux de voir d'abord s'il n'y a pas moyen de corriger à la source.

    Pour ce qui est de la visibilité, mon code est normalement suffisamment lisible et clair pour que tu vois où il faut modifier et ce qu'il faut adapter. Je me doute, vu la tournure de la discussion, que le vba n'est pas ta tasse de thé, mais il faut pouvoir tendre vers une relative autonomie, à un moment donné. J'ai, je crois, suffisamment expliquer chaque étape de la démarche et de la mise en place du code pour que tu puisses au moins tenter quelque chose par toi-même. Ici, on dépasse l'assistance pour faire du développement (je me fais payer par mes clients pour cela).

    Pour ce qui est de l'extraction par plage horaire, je suis très dubitatif, comme je l'étais déjà pour l'exclusion de certains mots-clé. Sauf à avoir des dizaines de milliers de chaines qui produiraient des centaines de milliers de segments, je pense qu'il est plus intéressant de laisser extraire tous les segments par le process actuel, puis d'utiliser Excel et ses outils (filtres, notamment) pour décider de ce que tu prends ou pas. Sinon, ça sert à quoi d'utiliser Excel?
    "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. #51
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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
    Par défaut
    Bonjour Pierre

    Je te remercie beaucoup pour ton retour et ton aide depuis le début.

    En effet ton code est largement exploitable à l’ heure actuelle sauf le cas 1 et 2 sur mon précédent message qui n’était pas prévu.

    En ce qui concerne le FM malheureusement je ne peux pas rajouter un espace.

    Je comprends tout à fait ta position.

    Merci beaucoup
    MU

  12. #52
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je ne comprends pas comment on peut en arriver à avoir des extractions aussi pourries. Après, on s'étonne d'avoir du code fragile, que la maintenance coûte cher et on râle sur... le dernier qui a travaillé sur l'outil, alors qu'on devrait pendre la personne qui a produit des extractions aussi pourries...

    Pour le problème de FM, on peut, si on est certain que FM ne se trouve nulle part ailleurs dans un segment avec une autre signification, traiter le problème en remplaçant dans le segment à traiter "FM" par "FM "...

    J'ai placé cela dans la procédure Extract, juste avant d'envoyer le segment pour traitement... DataItem = Replace(DataItem, "FM", "FM ").

    Pour la visibilité, vu l'architecture du code, il suffit d'aller dans la proc SetVisibility et de traiter ce nouveau cas. Pour ma part, au vu des exceptions, ça commence à devenir du code poubelle...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub SetVisibility(ByRef G As Group, ByVal Values)
     
      Dim Counter As Long
     
      Do While Counter <= UBound(Values) And G.Visibility = 0
        If Len(Values(Counter)) = 4 And IsNumeric(Values(Counter)) Then
          G.Visibility = Values(Counter) * 1
        ElseIf Values(Counter) Like "P?SM" Then G.Visibility = Mid(Values(Counter), 2, 1)
        End If
        Counter = Counter + 1
      Loop
    End Sub
    Au passage, dans le premier segment de la chaine que tu as fournie, je vois 5SM mais pas de P devant. Encore une nouvelle exception pondue par le génie qui a généré les chaines? On ne peut pas lui interdire à vie de toucher à un programme informatique? On gagnerait du temps, je pense... (et je suis sérieux, là).

    Pour ce qui est des extractions en fonction de l'heure ou de tout autre considération, je reste sur ma position qu'il faut faire cela après traitement des segments, grâce aux filtres et autres outils d'Excel. Ca n'a pas de sens de réinventer la roue alors qu'Excel dispose de tous les outils nécessaires à l'analyse des données. Ou alors, il ne faut pas utiliser Excel...
    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...
    ---------------

  13. #53
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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
    Par défaut
    Pierre,

    Tu as tout à fait raison, et encore une fois je te dis merci.
    Je viens de tester le dernier il fonctionne parfaitement.
    Avec tous tes codes j'ai largement de quoi faire maintenant, reste plus qu'à...

    Tu es the Boss!!!

    Je te souhaite un excellent week-end.
    MU

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