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 :

manipuler les fonctions caracteres pour récupérer une partie de variable [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 144
    Par défaut manipuler les fonctions caracteres pour récupérer une partie de variable
    bonjour tout le monde,

    Je cherche à récupérer une partie du texte contenu dans une cellule excel et coller le résultat sur une autre feuille.

    Pour cela, je place le contenu de la cellule dans une variable et applique les fonctions de caratère.

    LA cellule contient : "51420842-RACI-11178-GIRARDOT"

    et mon code est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim colc as string
    colcc = Range(colc & lign).Value
    Range("c" & debut).Value = Mid(coldc, 10, InStr(2, coldc, "-", 0))
    je cherche à récupérer le "RACI" contenu entre les 2 tirets.
    POur celà je combine 2 fonctions :
    mid qui récupère au 10 ième caractère(nombre fixe) et j'utilise la fonction instr pour s'arrêter au tiret suivant (car il peut y 4 à 6 lettres à récupérer)

    Pour cet exemple il me renvoit "RACI-1117",se qui n'est pas le résultat recherché.

    J'ai du mal à comprendre ce résultat dont la fonction instr est la cause.
    J'ai ajusté le premier argument de la fonction pour essayer de comprendre sans résultats.

    Pouvez vous m'aider ?

    merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    un peu bourrin mais ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Mid(coldc, 10, InStr(10, coldc, "-") - InStr(1, coldc, "-") - 1)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une autre solution que celle de Joe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("c" & debut) = Split(colcc, "-")(1)
    Attention dans le message, est-ce Colcc ou Coldc la valeur à récupérer ?


    Cordialement.

  4. #4
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Février 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Service public

    Informations forums :
    Inscription : Février 2008
    Messages : 144
    Par défaut resolu
    bonjour,

    merci à tous les 2 pour votre réponse rapide.

    Je viens de comprendre le fonctionnement de la fonction split, elle va m'être utile !!!!

    Je retiendrai la solution de eric beaucoup plus simple mais merci pour la réflexion Joé.
    Joé, j'ai suivi ta logique pour comprendre le défaut que j'avais et j'ai pu voir les limites de instr

    Eric a raison effectivement je colcc et coldc est la même chose, j'ai monté une sub essai pour le besoin de l'échange.

    le bon codes est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim colc as string
    colcc = Range(colc & lign).Value
    Range("c" & debut).Value = Split(colcc, "-")(1)
    Je conserve la variable colcc car je récupère son contenue pour une autre feuille

    Grand merci à tous les 2

    Par contre je ne sais pas où informer les gestionnaires du site, mais l'explication de la fonction split dans le tutoriel manipuler les caractères n'est pas claire.
    Il faudrait des exemples plus commentés que celui en place. Comme par exemple en indiquant le résultat de chaque ligne du résultat.

    Grand merci à tous les 2 pour les réponses !!!!

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par chrisaccess Voir le message

    Je viens de comprendre le fonctionnement de la fonction split, elle va m'être utile !!!!
    Bonjour,

    Pour compléter l'explication, si tu dois stocker le contenu d'une fonction Split, fais le avec une variable de type Variant, car le résultat est une matrice à une dimension. Le code ci-dessous montre ligne après ligne le résultat obtenu après découpage.

    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
    Option Explicit
     
    Sub TestSplit()
     
    Dim ValeurEntreTirets As String
    Dim MatriceEntreTirets As Variant
    Dim I As Integer
     
        With ActiveSheet
     
             MatriceEntreTirets = Split(.Range("A1"), "-")
     
             If UBound(MatriceEntreTirets, 1) > 0 Then
     
                ValeurEntreTirets = ""
                For I = LBound(MatriceEntreTirets, 1) To UBound(MatriceEntreTirets, 1)
     
                    ValeurEntreTirets = ValeurEntreTirets & "Indice : " & I & ", valeur : " & MatriceEntreTirets(I) & Chr(10)
     
                    If IsNumeric(MatriceEntreTirets(I)) Then
                       .Range("C" & I + 1) = "'" & MatriceEntreTirets(I)
                    Else
                       .Range("C" & I + 1) = MatriceEntreTirets(I)
                    End If
                    MsgBox ValeurEntreTirets, vbInformation
                Next I
     
             End If
     
       End With
     
    End Sub
    J'aurais pu mettre LBound(MatriceEntreTirets) et UBound(MatriceEntreTirets) car la matrice n'a qu'une dimension par défaut.

    Cordialement.

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, à titre documentaire : Liste des fonctions VBA

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Citation Envoyé par Eric KERGRESSE Voir le message
    si tu dois stocker le contenu d'une fonction Split, fais le avec une variable de type Variant
    Bonjour Eric,

    possible aussi avec une variable tableau de type String : Dim MatriceEntreTirets$()


    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    possible aussi avec une variable tableau de type String : Dim MatriceEntreTirets$()
    Bonjour Marc,

    Tu as raison, mais c'est la force de l'habitude de ramener des données de différents types....

    Cordialement.

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

Discussions similaires

  1. [XL-2007] La fonction RechercheV pour chercher une partie de phrase
    Par Florian.b dans le forum Excel
    Réponses: 3
    Dernier message: 29/01/2014, 17h22
  2. commande pour récupérer une partie d'un fichier
    Par olontsotra dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 11/04/2008, 07h51
  3. Réponses: 4
    Dernier message: 27/09/2007, 15h05
  4. Réponses: 5
    Dernier message: 04/07/2007, 18h31
  5. [RegEx] récupérer une partie d'un texte en précisant les bornes
    Par italiasky dans le forum Langage
    Réponses: 7
    Dernier message: 18/02/2007, 20h50

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