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 :

utiliser le texte d'une cellule pour définir le choix d'une variable [XL-2019]


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
    Chargé d'affaire
    Inscrit en
    Juin 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2022
    Messages : 3
    Par défaut utiliser le texte d'une cellule pour définir le choix d'une variable
    Bonjour à tous,

    J'espère que vous allez pouvoir m'aider car je bloque sur le sujet suivant (je vais essayer de vous l'exposer sans pouvoir vous mettre à disposition un fichier excel) :

    J'aimerais pouvoir récupérer le texte d'une cellule excel et l'utiliser en tant que variable dans un calcul VBA. Ce qui me permettrait de changer les formules selon mes choix (enfin, selon les nécessitées).

    Le but est de pouvoir administrer un document Excel avec VBA sans re-toucher au VBA.

    Je vais essayer d'être plus claire en vous donnant un exemple :
    Sur un onglet "liste", dans la cellule A1 j'ai le texte "Variable_A1". Le texte est une variable existante et déclaré dans un module VBA.
    Sur mon module j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    dim Variable_A1, Variable_B, Variable_C as single (imaginez bien que j'ai une 50aine de variables différentes en faite)
     
    Sub selection_variable()
     
    Variable_B = 10
    Variable_A1 = 5
     
    Variable_C = Variable_B + Sheets("liste").cells(1,1)    ' évidement cela ne fonctionne pas car on ne peut pas additionner du texte au chiffre.
     
    msgbox Variable_C
     
    End sub
    Je sais que la méthode présentée ne fonctionne pas du tout. Le soucis est que je ne voie pas comment ne pas remonter le nom de la variable mais sa valeur.

    Merci par avance

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Ça n'est en effet pas possible.

    Au passage ça non plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim Variable_A1, Variable_B, Variable_C as single
    Il faut répéter le type pour chaque variable sinon, les deux premières se retrouvent déclarées en type Variant



    Pour contourner, tu as deux choix possibles

    Soit tu fais une function à laquelle tu transmets le nom de ta variable et qui te retourne sa valeur
    Ça donnerait un truc comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Function VariableToVal(NomVariable as string) as single 'le type de retour est a adapter, tu as Variant aussi si les type de tes variables sont différents
       select case NomVariable
          case "Variable_A1"
              VariableToVal = Variable_A1
          Case "Variable_B"
              VariableToVal = Variable_B
          case "Variable_C"
              VariableToVal = Variable_C
       end Select
    End function
    C'est pas super, surtout si tu as beaucoup de variable, ce qui semble le cas. D'ailleurs si certaines sont de valeur fixe, tu as Const pour déclarer des constantes (ça évite d'avoir à les initialiser).

    La seconde solution, c'est d'avoir un tableau dans une feuille Excel, contenant toutes tes variables (au moins celles que tu utiliser dans les cellules). Au lieu de transmettre le nom de ta variable, tu vas d'abord chercher sa valeur dans le tableau et tu utilises cette valeur.
    Bien sûr, si tes variables ont un contenus variable... ce qui est souvent le cas, il faut mettre à jour le tableau.... Ce qui n'est pas le cas avec la 1ère solution.
    Un exemple dans cette discussion (même si elle ne me met pas particulièrement en valeur ^^... Cette fois Philippe Tulliez, si tu passes par là, je suis resté raisonnable )

    Il existe une 3ème voie, celle d'expliquer plus largement le contexte de ton fichier pour qu'on comprenne pourquoi tu en est arrivé à ce point de blocage et éventuellement te proposer d'autres solutions en amont pour l’éviter.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    au lieu d'avoir plusieurs variables tu pourrais te créer une variable tableau.
    Et sur ta feuille tu indiques l'index à utiliser. Il peut être calculé depuis une liste de validation qui te présenterait des noms 'parlants' en texte.
    eric

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne vois pas très bien ce que vous cherchez à obtenir.
    J'aimerais pouvoir récupérer le texte d'une cellule excel et l'utiliser en tant que variable dans un calcul VBA. Ce qui me permettrait de changer les formules selon mes choix (enfin, selon les nécessitées).
    Pourriez vous illustrer ce que vous souhaitez placer comme "nom" dans une ou plusieurs cellules et le résultat attendu ?

    En attendant, je vous invite à lire cette discussion titrée Boucle sur nom long RGB assez similaire à la vôtre, initiée par une personne dont c'était également la première intervention et qui curieusement malgré les réponses apportées n'a plus donné signe de vie.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2022
    Messages : 3
    Par défaut Merci
    Bonjour Qwazerty, Eriiic et Philippe Tulliez,

    J'ai bien pris reconnaissance de vos retours et vous remercie pour ceux-ci.

    A ce jour je suis passé par la 2eme solution de Qwazerty : Un tableau sur une feuille Excel qui inscrit les valeurs des variables pour les réutiliser après. Ce que je craint sur cette méthode est un ralentissement du programme général. Pour le moment, mes tests sont concluant et je ne perçois pas de longueurs ou ralentissements : Donc parfait .

    Ta 1ere solution, Qwazerty, parait très intéressante surtout si les variables changent de valeur en cours de chemin et qu'il faut relancer un calcul de ces variables. Après réflexion j'ai justement besoin de garder la 1ere valeur de ces variables en mémoire. Par conséquent la 2eme solution est, à priori, la plus adaptée.
    Ces 2 solutions sont peut-être longue à écrire mais je le fais qu'une fois. De plus j'ai gardé un tableau Excel de toutes mes variables utilisées pour ne pas me perdre dans les différents "sub" et "function" de mon module .

    Concernant la 3eme voie : Je suis bloqué. L'aide que je demandais n'est qu'une partie de tout le programme. Les variables à retrouver sont "Globale" et utiliser dans d'autres procédures. Il y a surement d'autres solutions mais cela m'obligerais surement à revoir une partie non négligeable de l'écriture et de l'architecture du module. Ce que je souhaite éviter . J'ai déjà été obligé de le faire suite à des modifications demandées par notre client : Ca m'a pris presque autant de temps à faire les modifications qu'à réécrire le programme de 0.
    De plus, j'ai quelques difficultés à exprimer le schéma de mon programme. En faite, je suis autodidacte et je met peut de chose du programme à plat. Tout est dans ma tête. S'il faut que je mette le nez dedans après 2 ans je crois que je vais rien comprendre


    J'ai également pensé à passer par une variable tableau. Mais je rencontre 2 problèmes problèmes. Le 1er étant celui décrit dans le paragraphe ci-dessus (variable globale, éviter de refaire le programme etc). Mais le problème majeur des variable tableau est que j'ai toujours pas compris comment se servir de ces variables. J'ai bien essayé plusieurs fois. Or dès qu'il m'a fallut retrouver la valeur la plus grande ou la plus petite puis additionner des variables entre elles bin.... j'ai jamais eu le résultat attendus. J'ai donc abandonné.


    J'ai aussi regardé la discussion Boucle sur nom long RGB. Celle-ci est assez similaire à ma demande. Du coup j'ai pris note des solutions proposées pour les adapter à l'avenir.
    Je vais essayé de revenir dans la semaine et vous noter ce que j'ai programmé (le fichier est un fichier professionnel et je ne peux pas y avoir accès quand je le souhaite ^^).

  6. #6
    Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2022
    Messages : 3
    Par défaut
    Bonjour,

    Voici un exemple de ce que j'ai fais pour l'utilisation des variables pour les additionner entres-elles :

    Tout d'abord la fonction :

    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
    Function Add_Var(N_Ligne As Single, Add As Variant) As Single
    '
    Dim T_Val_1 As String
    Dim T_Val_2 As String
    Dim T_val_3 As String
    Dim R_av As Range ' cellules du tableau avec valeur des variables
    '
    Set R_av = Sheets("table").Range("A2:B5")
    '
    T_Val_1 = Sheets("table").Cells(N_Ligne, 4)
    T_Val_2 = Sheets("table").Cells(N_Ligne, 5)
    T_val_3 = Sheets("table").Cells(N_Ligne, 6)
    '
    Select Case Add
    Case "Variable Obligatoire"
        MsgBox "Vous avez demandez à additionner des variables mais n'en avez pas sélectionnez. Merci de vérifer le ligne : " _
        & Sheets("table").Cells(N_Ligne, 1) & ". N° : " & N_Ligne & "."
        Exit Function
    Case 0
        Add_Var = 0
    Case 1
        Add_Var = Application.VLookup(T_Val_1, R_av, 2, False)
    Case 2
        Add_Var = Application.VLookup(T_Val_1, R_av, 2, False) + Application.VLookup(T_Val_2, R_av, 2, False)
    Case 3
        Add_Var = Application.VLookup(T_Val_1, R_av, 2, False) + Application.VLookup(T_Val_2, R_av, 2, False) + _
        Application.VLookup(T_val_3, R_av, 2, False)
    End Select
    '
    End Function
    Cette fonction permet de déterminer s'il faut additionner 1 à 3 variables. Mais aussi de contrôler si le tableau sur le fichier Excel est correctement remplis.

    Puis la procédure qui s'enclenche sur un bouton :

    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
    Sub Calcul()
    '
     
    Dim Variable_1 As Single
    Dim Variable_2 As Single
    Dim Variable_3 As Single
    Dim Variable_4 As Single
    Dim Ligne As Byte
    Dim R_Ml As Range
     
    Set R_Ml = Sheets("table").Range("A2:A5")
    Sheets("table").Cells(8, 3) = ""
     
    Variable_1 = Sheets("table").Cells(2, 2)
    Variable_2 = Sheets("table").Cells(3, 2)
    Variable_3 = Sheets("table").Cells(4, 2)
    Variable_4 = Sheets("table").Cells(5, 2)
     
    Ligne = Application.Match(Sheets("table").Cells(8, 1), R_Ml, 0) + 1
    If Sheets("table").Cells(Ligne, 3) = "OUI" Then
        Sheets("table").Cells(8, 3) = Sheets("table").Cells(8, 2) + Add_Var("" & Ligne & "", Sheets("table").Cells(Ligne, 7))
        If Sheets("table").Cells(Ligne, 7) = "Variable Obligatoire" Then
            Sheets("table").Cells(8, 3) = ""
        End If
    Else
        MsgBox "Pas d'addition de variable"
    End If
    '
    End Sub
    Vous retrouvez tout ici :

    Addition de variables.xlsx

    Je suis certain que cela peut être grandement simplifié et amélioré.
    Toujours est-il que cette méthode fonctionne pour mon programme.
    Merci

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 09/10/2016, 09h58
  2. Réponses: 6
    Dernier message: 20/04/2016, 09h31
  3. Réponses: 3
    Dernier message: 16/02/2013, 03h18
  4. Réponses: 3
    Dernier message: 01/12/2008, 17h20
  5. Utiliser l'adresse de deux cellules pour selectionner une rangé
    Par Gaelb dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 22/08/2008, 15h26

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