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 :

Rechercher et incrémenter un nombre dans une chaîne de caractères


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2015
    Messages : 2
    Par défaut Rechercher et incrémenter un nombre dans une chaîne de caractères
    Bonjour,
    Je reviens vers vous pour un petit soucis de VBA.

    Le problème :

    J'ai une chaine de caractères dans un label , exemple : TOTO_01_REL.txt (l'extension peut varier , txt,pdf, etc...)
    Je voudrais incrémenter le 01, donc le premier nombre en partant de la droite.
    Je ne peux pas utiliser les fonctions Left ou Right car les longueurs des noms et extensions des fichiers varient.

    Auriez-vous une idée qui me mettrais sur la bonne voie ?

    Bonne soirée,

    Thomas

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Tu peux par exemple et entre autres t('inspirer d'un mécanisme similaire à ceci (exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private titi As String
    Private Sub CommandButton1_Click()
      If titi = "" Then titi = "TOTO_00_REL.txt"
      tata = Split(titi, "_")
      tata(1) = Format(Val(tata(1) + 1), "0#")
      titi = Join(tata, "_")
      MsgBox titi
    End Sub
    regarde ce qui se passe en cliquant plusieurs fois

    et si tu n'aimes pas les amis split et join, rien ne t'empêche non plus (et toujours entre autres) de t'y prendre ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Private titi As String
    Private Sub CommandButton1_Click()
      If titi = "" Then titi = "TOTO_00_REL.txt"
      pos = InStr(titi, "_")
      nb = Format(Val(Mid(titi, pos + 1, 2) + 1), "0#")
      Mid(titi, pos + 1, 2) = nb
      MsgBox titi
    End Sub

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    re
    bonsoir
    infaillible le regex(expression régulière)
    je te propose de l'utiliser de deux façon

    tout d'abords supprimer tout ce qui n'est pas numérique du texte en une seule fois c'est beau la vie non ?
    1 seule ligne pour la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
     Dim txt As String,
        txt ="TOTO_01_REL.Txt"
        MsgBox chiffre_seulement(txt)
    End Sub
     
    Function chiffre_seulement(txt As String)
        With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "[a-z-A-Z-_?.]": chiffre_seulement = .Replace(ucase(txt), ""): End With
    End Function
    Facon n° 2!!!
    on peut tout simplement demander le nombre ou !! la suite de nombre présente dans là chaine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test2()
    Dim txt As String
        txt ="TOTO_01_REL.Txt"
        MsgBox chiffre_seulementbis(txt)
    End Sub
    Function chiffre_seulementbis(txt As String)
        With CreateObject("VBScript.RegExp"): .Global = True: .Pattern = "(\d+)": Set matches = .Execute(ucase(txt)): chiffre_seulementbis = matches(0): End With
    End Function
    dans les deux cas en ce qui te concerne elle fonctionne
    par contre si un jour tu dois dissocier plusieurs suite de nombre exemple "TOTO_01_REL_356_abcd.Txt"alors préférer la 2d en modifiant le chiffre dans la sélection du matches : ex:matches(1) devrait te donner 356

    voila
    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

Discussions similaires

  1. Incrémenter des nombres dans une chaîne
    Par shaun_the_sheep dans le forum SQL
    Réponses: 19
    Dernier message: 25/04/2012, 11h46
  2. Réponses: 16
    Dernier message: 10/01/2008, 16h12
  3. Récupérer un nombre dans une chaîne de caractères
    Par yougoudai dans le forum Général Python
    Réponses: 9
    Dernier message: 23/09/2007, 22h01
  4. [MySQL] Récupérer un nombre dans une chaîne
    Par Phenol dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/03/2007, 22h28
  5. Nombre d'occurences dans une chaîne de caractères
    Par Olivier14 dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 20h11

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