Utilisation d'une variable dans une boucle For

Résolu
Vampirelo Messages postés 10 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 13 janvier 2009 - 8 déc. 2008 à 12:41
Vampirelo Messages postés 10 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 13 janvier 2009 - 9 déc. 2008 à 09:49
Bonjour à tous,

Voici mon problème :
J'ai plusieurs boutons "Bouton1", "Bouton2", ... et je veux avoir une boucle for sur leurs propriétés.

Exemple simple :
J'ai dans un module la procédure suivante :

Sub Bouton_Module(Profil, Valeur)
Dim i As Integer



For i = 1 To 6
    Profil & i.Enabled = Valeur
    Profil & i.Value = Valeur
Next i
End Sub


Et la procédure d'appel peut être :

Call Bouton_Module(UserForm1.Bouton , True)

J'ai essayé avec les fonctions "Evaluate" (Evaluate(Profil & i).Enabled) ou "Controls" comme j'ai pu le voir sur différents forum, mais rien ne marche.

Pourtant mon problème à l'air à priori , mais je ne trouve pas.

Merci pour votre aide !
A voir également:

5 réponses

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
8 déc. 2008 à 21:22
Bonjour

1. vampirelo, le premier paramètre de l'instruction Call Bouton_Module(UserForm1.Bouton , True) est un objet. As-tu un objet nommé Bouton ? Apparemment non, puisque tu dis J'ai plusieurs boutons "Bouton1", "Bouton2".
Donc ton Call devrait te générer une erreur.

2. Si tu veux exécuter une instruction sur un groupe d'objets dont les noms sont préfixés par Bouton, fais :



prefixe = "Bouton"
Call Bouton_Module(prefixe, True)
...



Sub Bouton_Module(racine As String, valeur as Boolean)
Dim i As Integer
For i = 1 To 6
     With UserForm1.Controls(racine & i)
        .Enabled = valeur
        .Value = valeur
     End With
Next i
End Sub


3. Ci-dessus, tu as modifé les boutons 1 à 6 de ton UserForm1. Si tu voulais modifier tous les contrôles dont le nom commence par Bouton et quelque soit leur nombre, tu pourrais avantageusement utiliser le Sub suivant :

Sub Bouton_Module(racine As String, valeur as Boolean)
   Dim c
   For Each c In UserForm1.Controls
       If Left(c.Name, Len(racine)) = racine Then
            c.Enabled = valeur
            c. Value = valeur
      End If
   Next
End Sub

Je n'ai pas testé les codes. Si une erreur s'y trouve, c'est à l'insu de mon plein gré.

Amicalement
3
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Modérateur Dernière intervention 15 juillet 2011 37
8 déc. 2008 à 13:48
Salut,

Passer par les groupements de controles ou controles indexés.
En copiant collant ton controle tu arriveras à la faire.

Et tu auras un code de la forme suivante :

Profil( i).Enabled = Valeur
    Profil( i).Value = Valeur
0
Vampirelo Messages postés 10 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 13 janvier 2009
8 déc. 2008 à 16:24
Merci pour cette réponse nhervagault.
Ceci dit, je suis sur Excel 2007, et je n'arrive pas à créer de groupements de contrôles.
VB me retourne le message d'erreur suivant :
"Impossible de définir la propriété Name. Nom ambigu"

Du coup j'ai essayé un truc du style :

Sub Bouton_Module(Profil, Valeur)
Dim i As Integer
Dim Tableau() As New Control

Tableau.Add (UserForm1.Bouton1)
Tableau.Add (UserForm1.Bouton2)
Tableau.Add (UserForm1.Bouton3)



For i = 0 To 2
    Tableau(i).Enabled = Valeur
    Tableau(i).Value = Valeur
Next i
End Sub



Mais ça ne marche pas non plus...
0
pile_poil Messages postés 682 Date d'inscription vendredi 6 avril 2007 Statut Membre Dernière intervention 4 août 2012 6
8 déc. 2008 à 18:24
bonsoir
les groupes de controle n'existent pas en VBA contrairement à VB6
il te faut donc passer par la collection des controles
le lien suivant devrait t'aider
http://www.codyx.org/snippet_donner-valeur-dans-ensemble-meme-type-controle_528.aspx

[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Vampirelo Messages postés 10 Date d'inscription jeudi 3 juillet 2008 Statut Membre Dernière intervention 13 janvier 2009
9 déc. 2008 à 09:49
Merci Pile_poil et surtout Orohena !
Décidément, tu m'es d'une grande aide !
0
Rejoignez-nous