Utilisation d'une variable dans une boucle For [Résolu]

Signaler
Messages postés
10
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
13 janvier 2009
-
Messages postés
10
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
13 janvier 2009
-
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 !

5 réponses

Messages postés
577
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
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
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
28
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
Messages postés
10
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
13 janvier 2009

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...
Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
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
Messages postés
10
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
13 janvier 2009

Merci Pile_poil et surtout Orohena !
Décidément, tu m'es d'une grande aide !