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

Votre réponse

7 réponses

Meilleure réponse
dedenet2
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Dernière intervention
22 juillet 2013
- 22 août 2008 à 14:41
3
Merci
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++

Merci dedenet2 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de dedenet2
gillardg
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
- 21 août 2008 à 12:04
0
Merci
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
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Dernière intervention
22 juillet 2013
- 21 août 2008 à 14:03
0
Merci
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
Messages postés
3
Date d'inscription
vendredi 14 avril 2006
Dernière intervention
25 août 2008
- 22 août 2008 à 08:06
0
Merci
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
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Dernière intervention
22 juillet 2013
- 22 août 2008 à 10:05
0
Merci
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
Messages postés
3
Date d'inscription
vendredi 14 avril 2006
Dernière intervention
25 août 2008
- 25 août 2008 à 09:18
0
Merci
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
Messages postés
372
Date d'inscription
vendredi 27 juillet 2007
Dernière intervention
22 juillet 2013
- 25 août 2008 à 12:45
0
Merci
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.