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 :

Remplacement du caractère "-" par "_" en fonction des caractères suivants


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Octobre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Remplacement du caractère "-" par "_" en fonction des caractères suivants
    Bonjour à tous,
    je suis débutant en VBA et je bloque sur une condition dans mon Code.
    J'écrit une fonction qui permet de transformer une chaîne de caractère en majuscule et si dans cette chaîne de caractère, des caractères spéciaux sont présent, ils sont automatiquement remplacés par "_" et jusque la tout va bien.
    le code écrit jusque la :
    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 Function GetValueId(Chaine As String) As String
        Dim ChaineTmp As String
        Dim Cpt As Integer
        'Dim Position As Integer
     
        ChaineTmp = UCase(Stg)
        For Cpt = 0 To 255
            If (Cpt < 43) Or (Cpt = 44) Or (Cpt = 47) Or ((Cpt > 57) And (Cpt < 60)) Or ((Cpt > 62) And (Cpt < 65)) Or (Cpt > 90) Then 
                ChaineTmp = Replace(ChaineTmp, Chr(Cpt), "_")
            End If
        Next Cpt
    GetValueId = ChaineTmp
    End Function
    c'est la suite que tout se complique.
    J'ai une exception concernant 2 caractères spéciaux: le "+" et le "-".
    je souhaiterai que ces 2 caractères ne soit pas remplacé par "_" si ils sont utilisé devant un nombre. Par contre le remplacement doit être effectué si il s'agit d'un trait d'union entre 2 mots c'est à dire quand il n'y a pas de valeurs numériques derrière.
    J'ai commencé par ceci pour le "-" mais s'il existe des occurrences dans la chaine, il ne prend en compte que la 1ère occurrence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For Cpt = 0 To 255  'on parcours la chaîne ASCII
            If (Cpt = 45) Then 'on reconnait le caractère '-'
                Position = InStr(1, ChaineTmp, "-", vbTextCompare) 'relève l'indice de position du "-" dans la chaine
                'Je n'arrive pas à prendre en compte les occurences si elles existent.
                'A DEFINIR
                ChaineTmp = Replace(ChaineTmp, Chr(Cpt), "_") 'doit remplacer "-" par "_" s'il ne concerne pas une valeur numérique
            End If
        Next Cpt
    Mon problème je n'arrive pas à naviguer dans la chaîne de caractère en fonction de la position.

    Quelques exemples :
    +/- 0.27 % full scale => +_-_0.27___FULL_SCALE
    clip-in => CLIP_IN
    2-channel => 2_CHANNEL

    Merci pour votre aide, je galère sur le parcours de chaine

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une fonction personnelle utilisant les expressions régulières

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function Remplace(ByVal Str As String) As String
    Dim Rg As Object
     
    Set Rg = CreateObject("VbScript.RegExp")
    With Rg
        .Pattern = "((?!\w|\-\s?\d|\+\s?\d|\+\s?\/?\-?\s?\d|\<|\=|\>|\.).)"
        .Global = True
        .IgnoreCase = True
        Remplace = .Replace(UCase(Str), "_")
    End With
    Set Rg = Nothing
    End Function

Discussions similaires

  1. [DW 8 & antérieurs] Encodage des caractères en utf8 par défaut (sans utf8_encode)
    Par haltabush dans le forum Dreamweaver
    Réponses: 7
    Dernier message: 11/02/2009, 10h56
  2. Filtrer une recherche en fonction des caractères saisies
    Par FreeAccess dans le forum Contribuez
    Réponses: 0
    Dernier message: 15/07/2008, 13h59
  3. Requête en fonction des caractères de mes champs
    Par ginkas31 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/07/2007, 19h17
  4. [RegEx] Remplacer partie d'une chaîne par le résultat d'une fonction
    Par SCalc dans le forum Langage
    Réponses: 5
    Dernier message: 15/02/2007, 09h41
  5. Réponses: 1
    Dernier message: 07/06/2006, 18h18

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