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 :

Initialiser beaucoup de paramètres en meme temps


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 103
    Points : 49
    Points
    49
    Par défaut Initialiser beaucoup de paramètres en meme temps
    Bonjour

    [je débute sur VBA]

    J'ai un classeur avec différentes feuilles (dingues, n'est ce pas ?), qui contiennent beaucoup de paramètres.

    Nom du param valeur
    Nom du param 2 valeur 2

    Je vais devoir créer une macro qui va utiliser tous ces paramètres et faire des opérations assez simple.
    Ma question est : y a t il un moyen rapide et efficace pour créer plein de variables qui ont le nom du paramètre (obtenue d'une cellule) et la valeur de ce paramètre (obtenue d'une autre cellule) ?

    merci !

  2. #2
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Créer des variables à la volée ? Je ne pense pas.
    Je te suggère d'utiliser un dictionnaire.

    C'est assez pratique, tu ajoute un couple Key:Value dans ton dico, avec pour Clef le nom de ta variable, et pour Valeur la valeur de ta variable.
    Et ensuite tu utilise la méthode Dico(key) pour obtenir la valeur.

    Cordialement,
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Pas à ma connaissance... Tu pourrais utiliser des noms, mais c'est moins souple qu'une variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Names.Add Cells(x, y).Value, RefersTo:=Cells(m, n)
    Tu fais une boucle sur cette ligne.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  4. #4
    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
    Il n'y a pas en VBA la possibilité de traiter des macro-variables comme en C ou en Clipper. On ne peut donc pas intervenir sur les noms de variables eux-mêmes.
    La seule méthode (à ma connaissance) qui s'en rapproche un peu (très peu), est de créer des doubles variables, l'une String contenant une désignation, l'autre contenant la valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim NParam(10) as String
    Dim VParam(10) as Variant
    Dim VI as Integer
     
    For VI = 1 to 10
       NParam(VI) = Cells(VI,1).Value
       VParam(VI) = Cells(VI,2).Value
    Next VI
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Ok, merci pour vos réponses !

    Autre question liée :

    si je choisi l'option facile mais longue de déclarer l'une après l'autre mes variables avec Dim et Set, est ce qu'il y a un moyen de gérer les changements de coordonnées ?

    Par exemple, si j'ai mes cellules G4 et H4 qui valent Param et Value, je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim Param as integer
    set Param = range("G5").value
    Mais si après je veux ajouter un autre paramètre, au dessus de Param, ses coordonnées deviendront G5 et H5. Peut on prévoir un code qui s'adapte à ces changements ? ... comme dans les formules classique de excel qui s'adaptent seules à ces changements

    Merci encore

  6. #6
    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
    Tel que tu le demandes, non, ce n'est pas possible. Il n'y a pas de lien direct entre une feuille de calcul et du code comme il peut y avoir entre deux feuilles de calcul.

    Mais, là encore, il m'arrive d'utiliser une méthode qui fait à peu près ça.
    Il faut lancer une recherche avec un Find sur le nom de ton paramètre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVariable = Range(MaZoneParam).Find("NomParam").Offset(0,1).Value
    pour revenir à mon message précédent, je précise que lorsque j'utilise cette méthode, je crée une fonction qui me permet d'utiliser mes nom de param presque comme des variables.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Function MonParam(FParam As String) As Variant
       Dim FI
       For FI = 1 To 10
          If NParam(FI) = FParam Then
             MonParam = VParam(FI)
             Exit Function
          End If
       Next FI
    End Function
    Ensuite, dans mon code, je peux obtenir mes valeurs par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaVar = 1 + MonParam("NomParam1")
    C'est plus lourd à coder qu'une variable classique mais ça reste assez pratique, surtout lorsque le nombre de paramètres est important et variable.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  7. #7
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 103
    Points : 49
    Points
    49
    Par défaut
    Hum, compliqué tout ça ... je pense que je vais garder la bonne vieille méthode

    est ce que ce n'est pas possible de gérer le changement de coordonnée en nommant chacun de mes cellules en fonction du nom du paramètre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set param as XXXX
    dim param = Range("Param").value

  8. #8
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    pour s'affranchir des coordonnées, soit définir un tableau dans la feuille de calculs (objet ListObject en VBA),
    soit nommer au moins la première cellule dans la colonne H.
    Affecter à une variable tableau les valeurs à partir de cette cellule nommée ou nommer chaque cellule valeur de paramètre …

    Exemple si H4 est nommée "PARAM1", au lieu de récupérer la valeur par [H4].Value utiliser [PARAM1].Value


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/12/2004, 10h58
  2. Modifier 2 (ou plus) de tables en meme temps
    Par nebule dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/10/2004, 15h18
  3. Réponses: 8
    Dernier message: 06/07/2004, 14h17
  4. [C#] Presser 2 touches en meme temps
    Par JBernn dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/05/2004, 18h11
  5. Plusieurs commandes en meme temps
    Par caribou_belle dans le forum Linux
    Réponses: 7
    Dernier message: 18/09/2003, 17h07

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