Modification du Caption de plusieurs controls (CommandButton) dans une boucle en [Résolu]

Signaler
Messages postés
3
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
25 août 2008
-
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
-
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

7 réponses

Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
1
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++
Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
3
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 !
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
1
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++
Messages postés
3
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
25 août 2008

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
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
1
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+

 
Messages postés
3
Date d'inscription
vendredi 14 avril 2006
Statut
Membre
Dernière intervention
25 août 2008

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
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Statut
Membre
Dernière intervention
22 juillet 2013
1
SALUT,
T'en mieux !
A++