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 :

Insérer variables dans Boucle For [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2020
    Messages : 3
    Par défaut Insérer variables dans Boucle For
    Bonjour à tous,

    J'ai une problématique toute simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Name_1 = "xxx"
    Name_2 = "yyy"
    Name_3 = "zzz"
     
    For I = 1 To Nb_Gest
        Range("A1").Value = Name_ & I
    Next
     
    End Sub
    J'aimerai que, quand I = 1 la value de la cellule A1 soit "xxx", puis quand I = 2 value = yyy etc..
    La valeur en A1 est égale à 1 quand I = 1, 2 quand I = 2 et 3 quand I = 3..

    Le code ne reconnait pas les variables définit précédemment à la boucle FOR..

    Auriez-vous une idée ?

    Merci d'avance.

  2. #2
    Expert éminent 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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Nom(3) As String
    Nom(1) = "xxx"
    Nom(2) = "yyy"
    Nom(3) = "zzz"
     
    For I = 1 To UBound(Nom)
        Range("A1").Value = Nom(I)
    Next I

  3. #3
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Hello,

    Je ne vois nulle part la valeur de nb_gest (3)
    De plus il est toujours préférable de nommer le range avec comme préfixe la feuille ou le code doit s exécuter.

    Feuille. Range. Value

    As tu un quelconque message d erreur ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2020
    Messages : 3
    Par défaut
    Merci beaucoup pour vos réponses. Cependant pardon, je me suis mal exprimé, la solution de Menhir fonctionne parfaitement mais en voulant simplifier mon problème pour le post, la réponse ne m'apporte finalement pas la solution.

    Je recommence donc en m’efforçant d'être plus clair :

    Avec le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim Gest_(3) As String
    Gest_(1) = "aaa"
    Gest_(2) = "xxx"
    Gest_(3) = "yyy"
    For I = 1 To UBound(Gest_)
        Sheets("Liste").Range("A1").Value = Gest_(I)
    Next I
    End Sub
    Le problème c'est que je ne classe pas mes "Gest_(x)" dans la macro mais sur un autre module (le module 1) via des "public Const" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Const Gest_1 As String = "aaa"
    Public Const Gest_2 As String = "xxx"
    Public Const Gest_3 As String = "yyy"
    Je dois laisser ce module avec ces "public const" qui permette à des personne ne connaissant pas VBA de modifier facilement les noms des "Gest_x".

    Il faut donc que je puisse faire le programme ci dessous, ou quand I = 1, Range("A1") = "aaa" car la "public const" de "Gest_1" est "aaa".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim Gest_(3) As String
    For I = 1 To UBound(Gest_)
        Sheets("Liste").Range("A1").Value = Gest_(I)
    Next I
    End Sub
    Pour le moment aucune valeur n'est prise en A1.

    Merci encore pour votre aide.

    Paul.

  5. #5
    Expert éminent 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
    Par défaut
    Citation Envoyé par Weer77400 Voir le message
    Le problème c'est que je ne classe pas mes "Gest_(x)" dans la macro mais sur un autre module (le module 1) via des "public Const" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Const Gest_1 As String = "aaa"
    Public Const Gest_2 As String = "xxx"
    Public Const Gest_3 As String = "yyy"
    A ma connaissance, les constantes ne peuvent pas être indicées et les variables ne peuvent pas être renseignées dans leur déclaration.

    Donc, il faudrait mettre hors module Public Gest_(3) As String pour les déclarer en tant que variable.
    Et dans le début de ta procédure (Sub) racine, l'initialisation des valeurs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Gest_(1) = "aaa"
    Gest_(2) = "xxx"
    Gest_(3) = "yyy"
    Il faut donc que je puisse faire le programme ci dessous, ou quand I = 1, Range("A1") = "aaa" car la "public const" de "Gest_1" est "aaa".
    VBA ne gère pas les macro-variables (variable dont le nom est construit dans le code) comme peut le faire certains C ou autres langages spécifiques comme Clipper Nantucket.
    Donc il faudra soit passer par une solution avec des constantes indicées comme je le préconise, soit changer de langage.

    Cela dit, si des utilisateurs lambda sont susceptibles de modifier ces valeur, perso j'utiliserai une autre solution.
    Au lieu d'écrire ça en dur dans le code, je créerais une feuille de paramètres dans Excel et en début de code, je transfèrerais les valeurs des cellules dans des variables indicées.
    Ce serait plus propre et plus ergonomique.
    Sans compter que dans une feuille Excel, on peut mettre des éléments plus explicatifs que "Gest_1" pour que l'utilisateur comprenne de quoi il s'agit exactement.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2020
    Messages : 3
    Par défaut Bien noté
    Bonjour Menhir,

    Merci pour toutes ces informations, je vais effectivement trouver un autre moyen d'arriver a mes fins.

    Je mets le poste en résolu.

  7. #7
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    J'arrive peut-être trop tard...

    Une solution de contournement serait de passer par une Property :

    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
    ' Dans le module "public" :
    Public Property Get Gest_(Index As Long) As String
        Select Case Index
            Case 1: Gest_ = "aaa"
            Case 2: Gest_ = "bbb"
            Case 3: Gest_ = "ccc"
        End Select
    End Property
     
    'ailleurs dans le code d'un autre module :
    Sub Essai()
    Dim G As String
        G = Gest_(2)
        Debug.Print G
    End Sub

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

Discussions similaires

  1. [Batch] Découper une variable dans boucle for
    Par sharox dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 14/06/2017, 16h27
  2. Optimisation boucles - mise en cache variable dans un for?
    Par erox44 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/05/2010, 14h09
  3. affecter variable dans boucle FOR batch
    Par efferalgan dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 25/10/2007, 14h25
  4. [SHELL] Variable dans boucle for
    Par magicwill dans le forum Linux
    Réponses: 6
    Dernier message: 11/08/2007, 11h31

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