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 :

Choix de variable dynamique [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Par défaut Choix de variable dynamique
    Bonjour le forum

    Je suis actuellement confronté à un problème sur le choix des variables que je souhaite utiliser.

    Je m’explique :
    Sur un fichier excel, j’ai un texte qui ressemble à ceci : "il était une fois [NOMPERSO] qui vivait à [NOMVILLE]"

    A côté de ça, j’ai un programme VBA qui ressemble à ça :
    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
    Sub test()
        Dim NOMPERSO As String, NOMVILLE As String
        Dim a As String, b As String, phrase As String
        Dim nbvarb As Integer
     
        NOMPERSO = "Perso1"
        NOMVILLE = "Ville1"
     
     
        phrase = Range("A1").Value
        nbvarb = CompterMot(phrase, "[")
     
        For i = 1 To nbvarb
            a = InStr(phrase, "[")
            b = InStr(phrase, "]")
     
            If Mid(phrase, a + 1, b - a - 1) = "NOMPERSO" Then
                phrase = Left(phrase, a - 1) & NOMPERSO & Right(phrase, Len(phrase) - b)
            ElseIf Mid(phrase, a + 1, b - a - 1) = "NOMVILLE" Then
                phrase = Left(phrase, a - 1) & NOMVILLE & Right(phrase, Len(phrase) - b)
            End If
     
        Next i
     
    End Sub
     
     
    Public Function CompterMot(strPhrase As String, strMot As String) As Integer
        Dim strTab() As String
        strTab = Split(strPhrase, strMot)
        CompterMot = UBound(strTab())
    End Function
    et qui me renvoie la phrase : ""Il était une fois Perso1 qui vivait à Ville1""

    Comme vous le voyez, mon code VBA parcourt la chaine de caractère de la cellule excel et remplace les mots entre crochets par la variable dont le nom est le même que le mot entre crochets.
    Le problème est que sur mon VRAI programme (le petit bout de code ici présent étant un exemple simplifié), je risque d'avoir pas loin d'une centaine de variables, et je n'ai pas vraiment envie de mettre un énorme pavé de code avec à chaque fois un elseif.

    Je suis donc à la recherche d'un petit bout de code qui récupère la variables en fonction du mot contenu entre crochets.

    J'ai bien trouvé la fonction callbyname, mais je n'ai pas vraiment compris comment celle-ci fonctionnait.

    Est-ce que quelqu'un aurait une solution?

  2. #2
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    bonjour,
    il faudrait que NOMPERSO et NOMVILLE prennent une valeur dynamique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       NOMPERSO = NOM_ValeurDynamique_de_Perso1
       NOMVILLE = NOM_ValeurDynamique_de_Ville1
    Mais pour cela il faudrait savoir de quels sont les critères qui fait que les noms changent selon tel cas ou tel autre cas
    Plus de précisions serait bien
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #3
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Au lieu d'utiliser une centaine de variables différentes, utiliser des tableaux serait plus simple non? Il suffirait ensuite de boucler.

  4. #4
    Invité
    Invité(e)
    Par défaut
    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
    Public Dico As Object
     Property Let MesVariables(TextVar As String, Value As Variant)
        If TypeName(Dico) = "Nothing" Then Set Dico = CreateObject("Scripting.Dictionary")
         Dico(TextVar) = Value
    End Property
    Property Get MesVariables(TextVar As String) As Variant
        If TypeName(Dico) = "Nothing" Then Set Dico = CreateObject("Scripting.Dictionary")
     MesVariables = Dico(TextVar)
    End Property
    Sub test()
       Dim phrase As String
        MesVariables("[NOMPERSO]") = "Perso1"
        MesVariables("[NOMVILLE]") = "Ville1"
     phrase = "[NOMPERSO] [NOMVILLE]"
     k = Dico.Keys
     For i = 0 To Dico.Count -1
        phrase = Replace(phrase, k(i), Dico(k(i)))
     Next
     End Sub

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 62
    Par défaut
    Merci beaucoup pour vos réponse

    la proposition de rdurupt est vraiment parfaite et me permet de faire exactement ce que je souhaite

    encore merci

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

Discussions similaires

  1. variable dynamique dans une fonction javascript
    Par Shivaneth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2005, 15h58
  2. Variables dynamiques
    Par CriPpLe dans le forum C++
    Réponses: 5
    Dernier message: 23/02/2005, 11h56
  3. [SQL SERVER 2000] Noms de variables dynamiques
    Par cassoulet dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/09/2004, 11h44
  4. Récupération de variables dynamiques complexes
    Par ludoboy dans le forum ASP
    Réponses: 7
    Dernier message: 24/05/2004, 17h51
  5. [LG]Problême Variable dynamique de types différents
    Par pierrOPSG dans le forum Langage
    Réponses: 2
    Dernier message: 29/04/2004, 16h01

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