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

Lfigureau 3 Messages postés vendredi 14 avril 2006Date d'inscription 25 août 2008 Dernière intervention - 21 août 2008 à 11:33 - Dernière réponse : dedenet2 372 Messages postés vendredi 27 juillet 2007Date d'inscription 22 juillet 2013 Dernière intervention
- 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
Afficher la suite 

7 réponses

Répondre au sujet
dedenet2 372 Messages postés vendredi 27 juillet 2007Date d'inscription 22 juillet 2013 Dernière intervention - 22 août 2008 à 14:41
+3
Utile
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++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de dedenet2
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 21 août 2008 à 12:04
0
Utile
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 !
Commenter la réponse de gillardg
dedenet2 372 Messages postés vendredi 27 juillet 2007Date d'inscription 22 juillet 2013 Dernière intervention - 21 août 2008 à 14:03
0
Utile
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++
Commenter la réponse de dedenet2
Lfigureau 3 Messages postés vendredi 14 avril 2006Date d'inscription 25 août 2008 Dernière intervention - 22 août 2008 à 08:06
0
Utile
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
Commenter la réponse de Lfigureau
dedenet2 372 Messages postés vendredi 27 juillet 2007Date d'inscription 22 juillet 2013 Dernière intervention - 22 août 2008 à 10:05
0
Utile
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+

 
Commenter la réponse de dedenet2
Lfigureau 3 Messages postés vendredi 14 avril 2006Date d'inscription 25 août 2008 Dernière intervention - 25 août 2008 à 09:18
0
Utile
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
Commenter la réponse de Lfigureau
dedenet2 372 Messages postés vendredi 27 juillet 2007Date d'inscription 22 juillet 2013 Dernière intervention - 25 août 2008 à 12:45
0
Utile
SALUT,
T'en mieux !
A++
Commenter la réponse de dedenet2

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.