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 :

Intégrer des variables dans un nom d'objet [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 26
    Points : 7
    Points
    7
    Par défaut Intégrer des variables dans un nom d'objet
    Bonjour à tous.

    Je suis actuellement en train de travailler sur une feuille de recensement de factures (en gros pour tenir une checklist des factures reçues par établissement).

    Pour 2011 cette feuille concernerait 6 factures par établissement, avec un total de 138 établissements.

    Je me retrouve donc avec 828 (6*138) CheckBox à gérer.

    Je cherche à associer certains effet au fait de cocher ou décocher une checkbox.

    Par exemple pour la première CheckBox j'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub CheckBox1_Click()
    If Feuil1.CheckBox1.Value = True Then Feuil1.CheckBox1.BackColor = RGB(0, 255, 0) Else Feuil1.CheckBox1.BackColor = RGB(255, 0, 0)
    If Feuil1.CheckBox1.Value = True Then Feuil1.Cells(4, 8).Interior.Color = RGB(0, 255, 0) Else: Feuil1.Cells(4, 8).Interior.Color = RGB(255, 0, 0)
    If Feuil1.CheckBox1.Value = True And Feuil1.CheckBox2.Value = True And Feuil1.CheckBox3.Value = True And Feuil1.CheckBox4.Value = True And Feuil1.CheckBox5.Value = True And Feuil1.CheckBox6.Value = True Then Feuil1.Cells(4, 14).Value = "Ok" Else Feuil1.Cells(4, 14).Value = "Il manque des factures"
    If Feuil1.CheckBox1.Value = True And Feuil1.CheckBox2.Value = True And Feuil1.CheckBox3.Value = True And Feuil1.CheckBox4.Value = True And Feuil1.CheckBox5.Value = True And Feuil1.CheckBox6.Value = True Then Feuil1.Cells(4, 14).Interior.Color = RGB(0, 255, 0) Else: Feuil1.Cells(4, 14).Interior.Color = RGB(255, 0, 0)
    End Sub
    Ce qui me permet, par exemple de passer el fond de la cellule associée à la CheckBox en vert si elle est cochée ou en rouge dans le cas contraire et de faire un bilan en fin de ligne.

    Je souhaiterais utiliser ce code mais en intégrant 2 boucles imbriquées pour intégrer le numéro de facture et de l'établissement dans le nom de la CheckBox ce qui me permettrait de ne pas avoir à faire 827 fois le code précédent en changeant juste le nom des variables (et le numéro de la ligne).

    Si on prends comme variable :

    a = numéro de facture
    b = numéro de lycée

    j'aurais une écriture de ce type :

    For b = 0 to 137
    For a = 0 to 5
    Checkbox(6b+a+1).Value etc......
    Next a
    Next b

    Vous l'aurez compris je cherche à intégrer 2 variables dans les noms de mes objets utilisés dans le code.

    Merci d'avance pour toutes vos suggestions.

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Une idée serait de créer une procédure qui attendrait en paramètre le nom de l'objet à modifier ainsi que la valeur à lui transmettre (Ou la couleur si tu souhaites)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub ModifOption(optName As String, Strvalue As String)
     
    Dim obj As OLEObject
     
    For Each obj In Me.OLEObjects
     
        If TypeOf obj.Object Is msforms.OptionButton And obj.Name = optName Then
            obj.Object.Caption = Strvalue
        End If
     
    Next
     
    End Sub
    On appel la procédure et modifie le libellé (Caption) de l'optionButton => opt1 (attention, sensible à la casse)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Maproc()
     
    ModifOption "Opt1", "coucou"
     
    End Sub
    Jérôme

  3. #3
    Expert éminent
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Points : 6 696
    Points
    6 696
    Par défaut
    Bonjour,

    si tu doit écrire et maintenir 802 procédures Clic, tu gagnerais du temps à te pencher sur les modules de Classe

    Lorsque vous devez ajouter un grand nombre de contrôles qui seront utilisés de la même manière (par exemple un groupe de TextBox), il devient vite fastidieux de réécrire plusieurs fois la même procédure. Dans ce cas, vous pouvez utiliser des modules de classe. Les classes définissent le fonctionnement des objets. Un objet peut être défini par une propriété, une méthode ou un évènement. (Vous n'écrivez qu'une seule procédure qui sera appliquable à tous les contrôles que vous aurez défini dans une collection).
    in : http://silkyroad.developpez.com/VBA/...UserForm/#LI-B
    http://fauconnier.developpez.com/art...neral/classes/
    http://sinarf.developpez.com/access/vbaclass/

    et aussi une recherche sur les tutos ou FAQ de DVP

    PS : tu peux aussi préalablement t’intéresser à la collection Controls (cf aide VBA) pour jouer sur les noms selon le contexte dans un autre registre.

    cordialement,

    didier
    Didier Gonard

    Dernier tutoriel :
    Le VBA qu'est ce que c'est ?
    Tutoriels : Voir la liste de mes tutoriels Excel & VBA et mon site pro sur ma Page DVP
    Cours et tutoriels pour apprendre Excel
    N'oubliez pas de mettre : ..quand c'est le cas !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 26
    Points : 7
    Points
    7
    Par défaut
    Un gros gros merci à vous 2, effectivement les modules de classes correspondent parfaitement à ce que je cherchais.

    Encore merci !

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

Discussions similaires

  1. changer le nom des variables dans une boucle
    Par bakaratoun dans le forum MATLAB
    Réponses: 3
    Dernier message: 05/02/2010, 13h50
  2. nom des variables dans un array
    Par PhYx dans le forum Macro
    Réponses: 6
    Dernier message: 26/05/2009, 13h46
  3. Réponses: 1
    Dernier message: 02/10/2008, 22h02
  4. Utiliser des variables dans les noms d'objet
    Par Torkan dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/03/2007, 23h54
  5. Réponses: 4
    Dernier message: 30/05/2006, 17h21

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