Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 17h38   #1
Invité de passage
 
Inscription : novembre 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 26
Points : 3
Points : 3
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 :
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.
Alahsan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 18h44   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 899
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 899
Points : 7 185
Points : 7 185
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 :
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 :
1
2
3
4
5
Sub Maproc()
 
ModifOption "Opt1", "coucou"
 
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 19h00   #3
Rédacteur
 
Avatar de Ormonth
 
Homme Didier GONARD
Formateur Développeur Office - indépendant
Inscription : février 2008
Messages : 2 353
Détails du profil
Informations personnelles :
Nom : Homme Didier GONARD
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Formateur Développeur Office - indépendant

Informations forums :
Inscription : février 2008
Messages : 2 353
Points : 4 685
Points : 4 685
Bonjour,

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

Citation:
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

Ps :
Pour noter positivement ou négativement un post, vous pouvez cliquer sur les pouces en bas à droite !
Tutoriels : Voir la liste de mes tutoriels et mon site pro sur ma Page DVP
N'oubliez pas de mettre : ..quand c'est le cas !
Ormonth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 19h55   #4
Invité de passage
 
Inscription : novembre 2007
Messages : 26
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 26
Points : 3
Points : 3
Un gros gros merci à vous 2, effectivement les modules de classes correspondent parfaitement à ce que je cherchais.

Encore merci !
Alahsan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h31.


 
 
 
 
Partenaires

Hébergement Web