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 :

Set variable=objet. comment faire pour que objet soit remplacé par une variable contenant le nom de l'objet? [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2013
    Messages : 46
    Points : 19
    Points
    19
    Par défaut Set variable=objet. comment faire pour que objet soit remplacé par une variable contenant le nom de l'objet?
    Bonjour,

    je souhaite utiliser la fonction "Set variable = objet" en paramètrant le mot "objet". Je m'explique: je souhaite que l'objet soit variable en fonction de certains paramètres...

    Apparemment, on ne peut mettre derrière le "=" que un nom d'objet existant et non une variable où se trouve le nom de l'objet...

    Cette possibilité de remplacer le nom de l'objet par une variable contenant son nom ou une autre méthode me serait bien utile...

    Quelqu'un peut il m'aider?

    merci d'avance

  2. #2
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Bonsoir Bernard

    Citation Envoyé par bernard_metz Voir le message
    Apparemment, on ne peut mettre derrière le "=" que un nom d'objet existant et non une variable où se trouve le nom de l'objet...
    Cette limitation n'existe pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub tt()
    Dim a As Object
    Dim b As Object
     
    Set a = Range("A1:B2")
     
    Set b = a
     
    Debug.Print b.Address
     
    End Sub

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2013
    Messages : 46
    Points : 19
    Points
    19
    Par défaut
    Merci de la réponse!

    Voilà le code que j'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim A As objet
    Dim B As objet
     
     
    Private Sub essai()
        Set A = Sheets("essai").Range("H10")
        Set B = A
        B.Caption = "ok"
    End Sub
    J'obtien le message : Erreur de compilation: Type défini par l'utilisateur non défini.

    L'objectif étant ici de pouvoir utiliser une procédure unique pour un ensemble de contrôles bien sure...

  4. #4
    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 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour,

    message tout à fait normal !

    Quelle ligne donc déclenche l'erreur ? Quelle propriété est en cause ?
    As-tu au moins vérifié qu'elle existait sur l'objet rattaché ? (Évidemment non …)
    L'objet est-il un contrôle ? (Ben non c'est une cellule ‼)
    Sans compter la mauvaise orthographe du type objet …

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Citation Envoyé par bernard_metz Voir le message
    J'obtien le message : Erreur de compilation: Type défini par l'utilisateur non défini.
    Tu as écrit Objet au lieu de Object

    Du coup tu essaies de déclarer un type inconnu de VBA.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2013
    Messages : 46
    Points : 19
    Points
    19
    Par défaut
    re bonjour,

    merci pour les réponses!... ca progresse mais apparemment il doit me manquer encore quelque chose...

    j'ai corrigé objet par object oups...

    j'ai vérifier le code ci-dessous dans un nouveau classeur pour enlever tous problème pouvant venir du code actuel et j'ai créé le bouton "B" sur un formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Userform_activate()
     
        Dim a As Object
        Dim B As Object
     
        Set a = Sheets("essai").Range("A1")  ' la cellule comporte le nom du formulaire + le nom du bonton "formulaire.B"
        Set B = a
     
        Debug.Print B.Address
     
        B.Caption = "ok"
     
    End Sub
    Cette fois-ci j'ai le message d'erreur: erreur d'exécution '438' - propriété ou méthode non gérée par cet objet

    ... et le surlignement jaune est sur --> B.Caption = "ok"

  7. #7
    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 674
    Points
    18 674
    Par défaut

    Comme déjà indiqué, c'est normal car l'objet est une cellule et non pas un contrôle ‼

    En activant l'Enregistreur de macros, sélectionner le contrôle puis modifier ses propriétés, code livré sur un plateau !
    Suffit ensuite de remplacer dans le code généré le nom du contrôle par la référence de la cellule …

  8. #8
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Salut
    tu dis
    ... et le surlignement jaune est sur --> B.Caption = "ok" .
    et comme les autres je dis c'est normal
    Marc-L dis
    ... l'objet est une cellule et non pas un contrôle ‼
    ton ".Caption" est une méthode de l'objet Contrôle comme un bouton par exemple.
    Il faut une méthode propre à lobjet cellule du genre ".value" (qui devrait faire l'affaire mais j'ai pas le temps de tester)

    à bientôt

  9. #9
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Pour avoir une introduction de base à la programmation VBA pour Excel

    http://www.agroparistech.fr/IMG/pdf/...A2012-2013.pdf


    Pour aller plus loin:

    http://silkyroad.developpez.com/VBA/DebuterMacros/

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2013
    Messages : 46
    Points : 19
    Points
    19
    Par défaut
    re bonjour,

    merci pour tout cela.

    Peut être me suis-je mal exprimé... --> voir les explications complémentaires en remarques sur 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
    Private Sub Userform_activate()
     
        Dim a As Object
        Dim B As Object
     
        '********************
        ' PLUS D'EXPLICATIONS
        '********************
        ' j'ai mis le nom de mon contrôle qui est un "bouton" dans la cellule Sheets("essai").Range("A1")
        ' mais je l'obtiens aussi par du code et cela dans une variable comme par exemple nombouton = "B"
        ' je connais le nom du formulaire : "formulaire"
        ' dans la fonction "B.Caption" je souhaite que B corresponde au résultat: formulaire.B
        ' et que cette fonction agisse comme : formulaire.B.Caption = "ok"
        ' c'est cela que je n'arrive pas à réaliser
        ' je pourrais remplacer Set a = Sheets("essai").Range("A1") par Set a = "formulaire." + "B"
        ' mais c'est cela qui ne marche pas
     
        Set a = Sheets("essai").Range("A1") ' la cellule comporte le nom du formulaire + le nom du bonton "formulaire.B"
     
        Set B = a
     
        Debug.Print B.Address
     
        B.Caption = "ok"
     
        ' en conclusion, c'est ce "B" qui est la variable qui me permettrait d'utiliser la même "sub"
        ' pour plusieurs noms de bouton
     
    End Sub
    En d'autres termes encore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Userform_activate()
     
        Dim a As Object
        Dim B As Object
     
        Set a = "formulaire." + "B"            ' ceci ne marche pas... coment faire pour écrire         formulaire.B          à cet endroit? Ou quel autre méthode permettrait d'obtenir ce résultat?
     
        Set B = a
     
        Debug.Print B.Address
     
        B.Caption = "ok"
     
    End Sub

  11. #11
    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 674
    Points
    18 674
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    En activant l'Enregistreur de macros, sélectionner le contrôle puis modifier ses propriétés, code livré sur un plateau !
    Suffit ensuite de remplacer dans le code généré le nom du contrôle par la référence de la cellule …

    Cela donne quoi le code généré par l'Enregistreur de macros ?

  12. #12
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2013
    Messages : 46
    Points : 19
    Points
    19
    Par défaut
    re bonjour,

    Mon souci n'est pas de modifier le nom d'un contrôle car cela je sais le faire dans le code; où alors je n'ai pas compris la raison de votre conseil...

    Ce que je cherche à faire c'est appeler des propriétés d'un contrôle en utilisant une variable au lieu d'un texte fixe.

    Le texte habituel serait formulaire.B.Caption = "ok" et dans mon cas "B" est un contrôle que je souhaite faire fonctionner comme une variable...

    Je vais essayer d'être encore plus précis dans l'explication de mon problème et veuillez m'excuser si je me suis mal exprimé avant cela:


    Je dois exécuter les fonctions ci-dessous dans une "sub" générale (ceci fonctionne à partir du moment où les contrôles "RRRR", "SSSS", "TTTT", "UUUU" et "VVVV" sont présents sur le formulaire":

    formulaire.RRRR.Caption = "ok"
    formulaire.SSSS.Caption = "ok"
    formulaire.TTTT.Caption = "ok"
    formulaire.UUUU.Caption = "ok"
    formulaire.VVVV.Caption = "ok"

    Afin d'éviter de reproduire cette "sub" plusieurs fois, je souhaiterais pouvoir écrire : formulaire.B.Caption = "ok" où B serait tantôt = à "RRRR", "SSSS", "TTTT", "UUUU" et "VVVV"... et donc dans ce cas il ferait appel à un contrôle en fonction de la valeur "B".

    Je cherche simplement à savoir comment paramètrer ce "B" ou alors si une autre méthode permet d'arriver à ce résultat...

    merci encore à vous tous

  13. #13
    Invité
    Invité(e)
    Par défaut
    Salut,

    En utilisant simplement le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("XXXX").Caption = "OK"
    avec 'XXXX' le nom du controle.

  14. #14
    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 674
    Points
    18 674
    Par défaut

    Salut Vincent !

    Cela faisait un bail !

    Il aurait pu le trouver par lui-même via le Générateur de macros car a-t-il capté la notion d'objet ? …
    J'avais pourtant fourni toutes les billes dès mon premier message …

  15. #15
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2013
    Messages : 46
    Points : 19
    Points
    19
    Par défaut
    Re bonjour,

    Merci!!! ca y est et en plus ca fonctionnne... simple et efficace... un grand merci ça va me simplifier les choses pour la suite...

    Désolé pour Marc si je n'ai pas tout saisi.... mais avec le générateur de macro il ne m'affiche rien lorsque je travaille sur des "boutons".... : exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Macro3()
    '
    ' Macro3 Macro
    '
     
    '
        Range("F16").Select
        ActiveSheet.Shapes("CommandButton1").Select
    End Sub
    Voilà tout ce que j'ai après avoir arrêté l'enregistreur de macro; bien que j'ai fait l'ensemble de la démarche normalement...

    Il y a là aussi peut être quelque chose qui m'échape parceque cet outil est super pour des bricoleurs comme moi ;-) ?...

    Encore un grand merci!

  16. #16
    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 674
    Points
    18 674
    Par défaut

    Oui en fait ce n'est pas un "bouton" mais un "bouton de commande" !
    Et avec le code généré, cela ne peut donc pas être un objet Range

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 16/08/2013, 21h03
  2. [XL-2007] comment faire pour que ce soit une division.
    Par Danaxia dans le forum Excel
    Réponses: 4
    Dernier message: 08/05/2011, 18h27
  3. Réponses: 1
    Dernier message: 06/09/2006, 18h11
  4. comment faire pour que plusieurs user utilise mem macro?
    Par megapacman dans le forum Access
    Réponses: 4
    Dernier message: 27/03/2006, 16h55
  5. CSS: comment faire pour que mes coins soit arrondi
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 16/02/2006, 12h08

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