Lfigureau
Messages postés3Date d'inscriptionvendredi 14 avril 2006StatutMembreDernière intervention25 août 2008
-
21 août 2008 à 11:33
dedenet2
Messages postés372Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention22 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).
dedenet2
Messages postés372Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention22 juillet 20132 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
dedenet2
Messages postés372Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention22 juillet 20132 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++
Lfigureau
Messages postés3Date d'inscriptionvendredi 14 avril 2006StatutMembreDernière intervention25 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
dedenet2
Messages postés372Date d'inscriptionvendredi 27 juillet 2007StatutMembreDernière intervention22 juillet 20132 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+
Lfigureau
Messages postés3Date d'inscriptionvendredi 14 avril 2006StatutMembreDernière intervention25 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.