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 :

Mid$ et Instr [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Mid$ et Instr
    Bonjour à tous,

    J'ai actuellement un fichier avec un certains nombres de ligne à traiter. Je dois récupérer une information dans ces lignes et les mettre sur une feuille de mon tableur Excel. J'utilise le VBA pour extraire ces informations vu qu'ils proviennent de fichiers plats. Enfin bref, voici une ligne type :

    00:00:00,000 INFO [xxxx] (xxxxx-xxxxx-xxxx-000) [2020-01-01 00:00:00,000] [http-/0.0.0.0:0000-00] [INFO ] xxxxxxxxxxxx: xxxx-000000: xxxxxxxxxx.

    Mon objectif est de récupérer le code "http". J'utilise donc ce bout de code VBA pour choper le dit code http

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    debut_http = InStr(ContenuLigne(i), "http-")
    fin_http = InStr(ContenuLigne(i), "] ")
    HTTP = Mid$(ContenuLigne(i), debut_http, fin_http - debut_http - 1)
    Or, cela ne fonctionne pas puisque debut_http prend la valeur 94 (94eme caractère de ma ligne) et fin_http prend la valeur 27 (puisque le premier crochet fermant est le 27eme caractère de ma ligne).
    Je ne peux pas prendre une autre information que ce crochet fermant pour avoir mon HTTP puisque ce qui suit le HTTP change selon mes fichiers (pas possibilité de prendre "[INFO ]" par exemple.
    Est-il possible de sélectionner le premier "]" APRÈS "http-" ?

    Merci beaucoup, je sèche sur ce petit problème.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 960
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 960
    Points : 28 970
    Points
    28 970
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu peux indiquer à la fonction Instr à partir de quel caractère il doit commencer la recherche

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
      Const txt = "00:00:00,000 INFO [xxxx] (xxxxx-xxxxx-xxxx-000) [2020-01-01 00:00:00,000] [http-/0.0.0.0:0000-00] [INFO ] xxxxxxxxxxxx: xxxx-000000: xxxxxxxxxx"
      Dim PosStart As Integer
      Dim PosEnd As Integer
      PosStart = InStr(txt, "http")
      PosEnd = InStr(PosStart, txt, "]")
      MsgBox Mid(txt, PosStart, PosEnd - PosStart)
    End Sub
    Extrait de l'aide en ligne

    Syntaxe
    InStr([start, ]string1, string2[, compare])
    La syntaxe de la fonction InStr comprend les arguments suivants :

    start Facultatif. Expression numérique qui définit la position de départ de chaque recherche. Si cet argument est omis, la recherche commence au premier caractère. Si l'argument start contient une valeur de type Null, une erreur se produit. L'argument start est obligatoire si l'argument compare est indiqué.
    string1 Expression de chaîne dans laquelle la recherche est effectuée.
    string2 Expression de chaîne recherchée.
    compare Facultatif. Indique le type de comparaison de chaînes. Si l'argument compare est de type Null, une erreur se produit. Si l'argument compare est omis, la valeur de l'instruction Option Compare détermine le type de comparaison. Indiquez un LCID (LocaleID) correct pour respecter les règles locales spécifiques à la comparaison.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, je connaissais pas cette petite astuce !

  4. #4
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour Mat, Bonjour au Forum,

    Hé, salut Philippe,

    Une autre méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t2()
      Const txt As String = "00:00:00,000 INFO [xxxx] (xxxxx-xxxxx-xxxx-000) [2020-01-01 00:00:00,000] [http-/0.0.0.0:0000-00] [INFO ] xxxxxxxxxxxx: xxxx-000000: xxxxxxxxxx"
      Dim s1 As Variant
      Dim s2 As Variant
      s1 = Split(txt, "http")
      s2 = Split(s1(1), "]")
      Debug.Print "http" & s2(0)
    End Sub
    Dans mes applicatifs, je crée une fonction avec les 2 séparateurs comme paramètres.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/01/2023, 10h56
  2. Réponses: 3
    Dernier message: 27/11/2013, 09h17
  3. #Erreur avec Left Join et Mid/InStr
    Par Bobble dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 28/03/2012, 15h29
  4. Equivalence fonctions mid() left() instr()
    Par waste dans le forum Débuter
    Réponses: 3
    Dernier message: 01/08/2010, 21h30
  5. Equivalent SAS des fonctions instr() et mid()
    Par floflo164 dans le forum Débutez
    Réponses: 2
    Dernier message: 27/10/2008, 15h47

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