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 :

appliquer une formule dans un champ multivalué


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2019
    Messages : 16
    Points : 10
    Points
    10
    Par défaut appliquer une formule dans un champ multivalué
    Bonjour,
    J'ai récupéré une macro "extrairechainedelimitee" que j'ai adapté à mes besoins (fichier en pj - macro créer Lien_doclie) et qui fonctionne très bien. Mais j'ai maintenant besoin qu'elle s'applique plusieurs fois dans un champ multivalué avec "£"comme séparateur. J'ai besoin que les résultats des champs multivalués s'affichent séparés par des points-virgules.
    Je suis nulle en VB. Une âme charitable pourrait-elle m'aider?
    Merci d'avance
    Alice
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Bonjour,

    Je n'ai pas regardé votre code, mais sur le principe, la fonction Split permet de transformer une chaîne de caractères en un tableau de chaînes, en utilisant un séparateur. Il suffit ensuite de traiter chaque chaîne du tableau obtenu puis de concaténer le tout.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function ChnDlmtMltv(Str As String) As String
        Dim Tabl As Variant, i As Long
        Tabl = Split(Str, "£")
        For i = 0 to Ubound(Tabl)
            ChnDlmtMltv = ChnDlmtMltv & extrairechainedelimitee(Tabl(i)) & ";"
        Next i
        ChnDlmtMltv = Left(ChnDlmtMltv, Len(ChnDlmtMltv) - 1)
    End Function
    Ce sera bien évidemment à adapter à vos besoins.

    Cdt

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    On peut faire la même chose de façon beaucoup plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function ChnDlmtMltv(Source As String) As String
        ChnDlmtMltv = Replace(Source, "£", ";")
    End Function
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Membre éprouvé
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Points : 1 141
    Points
    1 141
    Par défaut
    Citation Envoyé par Menhir Voir le message
    On peut faire la même chose de façon beaucoup plus simple [..]
    Bonjour Menhir,

    La solution que vous proposée est effectivement bien plus simple, mais :
    Citation Envoyé par alicemv Voir le message
    j'ai maintenant besoin qu'elle s'applique plusieurs fois dans un champ multivalué
    elle ne permet pas d'appliquer la macro extrairechainedelimitee aux différents sous-champs.
    Sans avoir vu le code initial, difficile de dire si cela a une importance ou pas...

  5. #5
    Membre à l'essai
    Femme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2019
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2019
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Bonjour,
    Merci bien pour vos réponses.
    Il me faut en effet traiter les données séparées par "£" comme des chaines différentes.
    Désolée pour le fichier joint, voici le code :
    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
    33
    34
    35
    36
     
    Public Function ExtraireChaineDelimitee(ChaineSource As String, Optional LimiteAvant As String = "", Optional LimiteApres As String = "")
    'par: Excel-Malin.com ( <a href="https://excel-malin.com" target="_blank">https://excel-malin.com</a> )
     
    On Error GoTo FunctionErreur
    If InStr(1, ChaineSource, LimiteAvant) = 0 Then
        ExtraireChaineDelimitee = CVErr(xlErrNA)
        Exit Function
    Else
        ExtraitPositionDebut = InStr(1, ChaineSource, LimiteAvant) + Len(LimiteAvant)
    End If
     
    If LimiteApres = "" Then
        ExtraitPositionFin = Len(ChaineSource)
    Else
        ExtraitPositionFin = InStr(1, ChaineSource, LimiteApres) - 1
    End If
    ExtraireChaineDelimitee = Mid(ChaineSource, ExtraitPositionDebut, ExtraitPositionFin - ExtraitPositionDebut + 1)
    Exit Function
     
    FunctionErreur:
        ExtraireChaineDelimitee = CVErr(xlErrNA)
        'ExtraireChaineDelimitee = ""
    End Function
    #
    #
    Sub crée_LIEN_DOCLIE()
    '
    ' crée_LIEN_DOCLIE Macro
    ' crée lien_doclie
    '
        ActiveCell.FormulaR1C1 = "=ExtraireChaineDelimitee(RC[-1],,""<titre>"")"
        ActiveCell.FormulaR1C1 = _
            "=""https://gertrude-diffusion.laregion.fr/dossinventaire""&ExtraireChaineDelimitee(RC[-1],,""<titre>"")"
        Range("C3").Select
    End Sub

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/12/2019, 17h41
  2. Réponses: 1
    Dernier message: 15/09/2016, 09h38
  3. [WD-2007] Introduire une formule dans un champ
    Par andre0757 dans le forum Word
    Réponses: 1
    Dernier message: 30/07/2013, 11h14
  4. [CR XI] export excel : mettre une formule dans un champ ?
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 27/09/2012, 11h21
  5. [RegEx] tester une valeur dans un champ multivalué
    Par omarlet dans le forum Langage
    Réponses: 1
    Dernier message: 25/06/2010, 15h08

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