Modification du Caption de plusieurs controls (CommandButton) dans une boucle en

Résolu
Lfigureau Messages postés 3 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 25 août 2008 - 21 août 2008 à 11:33
dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 - 25 août 2008 à 12:45
Bonjour à tous,

J'ai inséré plusieurs boutons (que j'ai liés à différentes macros) sur une feuille Excel (Excel2003 sous Windows XP). Ces boutons ont été créés avec la "Boîte à outils contrôles".
Je souhaite modifié le "Caption" de tous ces boutons en fonction de la langue sélectionnée par l'utilisateur. Celle-ci est sélectionnée en appuyant sur une image (drapeau du pays) insérée sur la feuille Excel. L'une des 2 routines suivante est alors lancée. En fonction de la langue, je vais donc remplacer le "Caption" du bouton par le bon texte récupéré dans une autre feuille contenant les traductions.

Sub Français()
    Sheets("Traduction").[A1] = "Français"
    Sheets("Traduction").[B1] = 2
    Call ChangeLangue(Sheets("Traduction").[B1])
End Sub



Sub Anglais()
    Sheets("Traduction").[A1] = "Anglais"
    Sheets("Traduction").[B1] = 3
    Call ChangeLangue(Sheets("Traduction").[B1])
End Sub



Le paramètre "Langue" de la procédure "ChangeLangue" correspond au numéro de la colonne dans laquelle le texte doit être récupéré.

Sub ChangeLangue(Langue As Integer)
    Sheets("Infos").CommandButton1.Caption = Sheets("Traduction").Cells(38, Langue).Value
    Sheets("Infos").CommandButton2.Caption = Sheets("Traduction").Cells(39, Langue).Value
    Sheets("Infos").CommandButton3.Caption = Sheets("Traduction").Cells(40, Langue).Value
     ...
End Sub

Ca fonctionne mais je dois répéter la ligne pour chaque nom de bouton.
Je souhaite donc créer une boucle avec l'incrémentation du nom du bouton mais là, je bloque.
En fait, j'arrive à récupérér le nom de tous les contrôles de la feuilles avec une boucle :
    For Each s In Sheets("Infos").Shapes
         toto = s.Name
    Next s
...mais je n'arrive pas à changer le "Caption" (s.Caption = "Texte" ne fonctionne pas).
J'ai passé beaucoup de temps à chercher une solution dans différents forum.
J'ai adapté différentes solutions trouvées, mais sans résultat.

Merci de bien vouloir m'aider.
J'espère avoir posté ma question dans le bon thème (je n'ai pas trouvé de thème propre à VBA dan la liste).





 Lucio
A voir également:

7 réponses

dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 2
22 août 2008 à 14:41
Re..,
Teste ce programme

'Change les captions des "CommandButton" situés sur une feuille
'Excel dans l'ordre croissant.
'Le premier doit être nommé CommandButton1 , le 2ème CommandButton2..etc
 
 Dim s
 Dim NumeroCommandButton As Long



 NumeroCommandButton = 0


'Pour tous les objets de la feuille

For Each s In Sheets("Infos").Shapes
'Récupere les objects CommandButton
 If s.Name Like "CommandButton" & "*" Then
 'Compte les CommandButtons
  NumeroCommandButton = NumeroCommandButton + 1
 'Met le caption dans chaque bouton 1,2,3...jusqu'au dernier
Sheets("Infos").OLEObjects("CommandButton" & _  NumeroCommandButton).Object.Caption = "mettre votre code" & NumeroCommandButton
  End If
Next s

A adapter avec ton code
A++
3
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
21 août 2008 à 12:04
pour le bon thème c'est    vb6 / languages dérivés / vba /
pour le reste faudra attendre un spécialiste pour l'opération

Bonjour chez vous !
0
dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 2
21 août 2008 à 14:03
Bonjour ,
Par exemple , quand tu inseres le premier bouton sur une feuille nommée "feuil1" depuis la "boite à outils controles" , il va automatiquement etre nommé "commandButton1" et son
caption aussi.
Enfin pour changer le caption de ce bouton sur la feuil1 , il faut écrire:
Feuil1.CommandButton1.Caption = "Entrer"
On peut du coup acceder à toutes les propriétés de ce bouton
Ne reste plus qu'a adapter ton code.
Merci de me donner des nouvelles rassurantes
A++
0
Lfigureau Messages postés 3 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 25 août 2008
22 août 2008 à 08:06
Bonjour dedenet,
Je fait déjà ce que tu me préconise (Sheets("Infos").CommandButton1.Caption = Sheets("Traduction").Cells(38, Langue).Value)et ça marche, mais je dois répéter la ligne autant de fois que j'ai de boutons. Je souhaiterais accéder à mes boutons à l'aide d'une boucle du genre :
For I = 1 to 20
Sheets("Infos").CommandButton(I).Caption = Sheets("Traduction").Cells(38 + I, Langue).Value
Next I
C'est le "CommandButton(I)" qui me pose problème ! Comment accéder aux propriétés de mes boutons (Caption par ex) à l'aide d'un indice ?
J'ai essayé Me.Controls("commandButton" & I).Caption tel que décrit dans la réponse de keke4483 ( http://www.vbfrance.com/infomsg_BOUCLE-CONTROLS-COMMANDBUTTON_1086138.aspx ) mais sans succès !!!
Je pense que ça doit être courant de faire ce genre de chose (probablement un problème de syntaxe).
Merci pour ton aide





 Lucio
0

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

Posez votre question
dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 2
22 août 2008 à 10:05
Bonjour ,
Ok , j'ai compris
Ce genre de programmation , je le faisais en Vb6.
Je ne sais pas si on peux aussi avec VBA Excel.
Je vais regarder de plus prés.
A+

 
0
Lfigureau Messages postés 3 Date d'inscription vendredi 14 avril 2006 Statut Membre Dernière intervention 25 août 2008
25 août 2008 à 09:18
Bonjour dedenet2,

Un grand merci, car ça fonctionne à merveille !
J'avais essayé plein de truc du genre : Sheets("Info").OLEObjects("CommandButton" &  I).Caption mais ça ne marchait pas...
En fait, il me manquait le ".Object" devant ".Caption" dans ma syntaxe.




 Lucio
0
dedenet2 Messages postés 372 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 juillet 2013 2
25 août 2008 à 12:45
SALUT,
T'en mieux !
A++
0
Rejoignez-nous