Modifier image d'un bouton (Picture)

G

G'Claire

Guest
Salut le forum

Est il possible comme pour Caption :

Nom du bouton.Caption = "Un nom"

De pouvoir modifier l'image que l'on peu intégrer a celui-ci avec Picture

Je vous remercie par avance, G'Claire
 
@

@+Thierry

Guest
Bonsoir G'Claire, le Forum

Salut G'Claire, çà va depuis le temps ;-), j'espère que tu passes de bonnes fêtes et que tu ne nous fabriques pas une usine à gaz pour 2004 !! (lol).

Pour ta question, oui sur un UserForm c'est très facile il suffit de faire ceci :

Private Sub CommandButton3_Click()
With Me.CommandButton1
.Caption = "This Is Critical !"
.Picture = LoadPicture("C:\WINDOWS\Profiles\Thierry\Bureau\VBcritical.jpg")
.PicturePosition = fmPicturePositionLeftBottom
End With
End Sub


Bonne Soirée
@+Thierry
 
M

michel

Guest
Bonsoir G'Claire

j'espere que l'exemple ci dessous pourra t'aider

'affectation d'une image au bouton1
CommandButton1.Picture = LoadPicture("D:\dossier\general\MonImage.jpg")

bonne soirée
michel
lapin4.gif
 
G

G'Claire

Guest
@Thierry, Michel Le forum

Merci pour vos réponses.

Si j'ai bien compris je suis obligé de mettre l'image dans le dossier du fichier Exel.

Pour mon cas c'est pas par l'appuis sur un Bouton mais par le résultat d'un textBox:

Donc se sera :

If TextBox1 = "Ranger" then

With Me.CommandButton1
.Caption = "Sortir le dossier"
.Picture = LoadPicture("C:\WINDOWS\Profiles\Thierry\Bureau\VBcritical.jpg")
.PicturePosition = fmPicturePositionLeftBottom
End With

Else

If TextBox1 ="Sortie" Then

With Me.CommandButton1
.Caption = "Ranger le dossier"
.Picture = LoadPicture("C:\WINDOWS\Profiles\Thierry\Bureau\VBcritical.jpg")
.PicturePosition = fmPicturePositionLeftBottom
End With

End If
End If

Et pour les mettre en oeuvre je fait un appel avec le cation du bouton?



Pour @Thierry, je suis bien content de te revoir parmis nous, depuis le temps, j'ai appris pas mal de chose entre toi et tout les participants de forum et j'essaye a mon tout de proposer a mon niveau mon aide, mais la route et encore looooooongue.

Encore merci, G'Claire
 
@

@+Thierry

Guest
Re Salut G'Claire, le Forum


Humm pas très orthodox encore çà... Surtout depuis une TextBox (!), même dans un truc louf, je mettrais plutôt une ListBox car si le user tape n'importe quoi.. humm... enfin

Pour la question de mettre les fichiers images dans le même dossier que celui du fichier Excel ce n'est pas indispensable dans le cas de figure ci-dessus puisque l'on indique le Path complet dans le coden donc on peut les mettre là où l'on indique.

Si on est sûr et certain que les fichiers images se situeront toujours dans le même dossier que le classeur en question, on peut faire ceci :

With Me.CommandButton1
.Caption = "Ranger le dossier"
.Picture = LoadPicture("ThisWorkbook.Path & "\" & "VBcritical.jpg")
.PicturePosition = fmPicturePositionLeftBottom
End With


Sinon ta dernière question "Appel avec le Caption du Bouton ?" je n'ai rien compris (lol), en tout cas tu n'as pas besoin de faire encore une condition du style :
If CommandButton1.Caption = "Toto" then
.Picture = LoadPicture("ThisWorkbook.Path & "\" & "VBcritical.jpg")
end If
Puisque TOUT est déjà traité (le Caption ET la Picture)

Pour finir et ceci pour ta gouverne, tu ne gères pas tes IF comme il se faut, soit tu mets un seul IF / END IF puis tu reprends un autre IF / END IF mais en aucun cas tu ne dois faire comme au dessus IF / ELSE / IF / END IF / END IF... Sinon on passe par IF / ELSEIF / ELSEIF / END IF... Mais là c'est une autre histoire...

Sinon bonne continuation et très heureux que tu soies en mesure de proposer ton aide, à ton niveau, mais quelque soit le niveau le plus important c'est de vouloir aider.

Bonne Nuit à tous et toutes
@+Thierry
 
G

G'Claire

Guest
@Thierry, le forum

Merci, por tes explication

Bon, je vais essayer pour que cela soit plus concret pour moi.

Pour ce qui est de mon TextBox, il ne se fait aucune saisie a l'interieur, car ce TextBox ne récupère qu'une donnée saisie lors de la sortie ou du rangement d'un dossier.

Pour ce qui est de If et End If et If Imbriqué, c'est vrai j'ai pas beaucoup de mal a les gérer.

Et bien encore merci et j'essaye cela demain, G'Claire
 
G

G'Claire

Guest
@Thierry, le forum

Voila j'ai isolée la partie qui me sert à la gestion des entrée et sortie de mes dossier car l'ensemble du fichier fait plus de 50Ko.

Pour les tests il faut selectionné la référence dans la première colonne avant le l'appui sur le bouton.

Utiliser le code que tu m'as donné pour utiliser qu'un bouton, au lieu de deux (cmdModifIn ou cmdModifOut ), mais avec des captions différents et des pictures différentes suivant le résultat de la textbox (Rangé ou sortie), pour ne plus utiliser les visible = False ou True

Et je voudrai alléger le code pour éviter d'utiliser par exemple deux boutons pour la validation (ValiderIn et Valider Out) suivant l'état du bouton cmdModifIn .

J'ai bien essayé cette aprés midi mais en vain.

Merci, G'Claire
 

Pièces jointes

  • GestionEntreesEtSorties.zip
    23.4 KB · Affichages: 44
@

@+Thierry

Guest
Bonsoir G'Claire, le Forum

Alors comme çà tu m'avais réservé une petite surprise avec un beau fichier joint. Hélas je n'ai pas vraiment de temps pour me consacrer à des fichiers entiers comme j'ai pu le faire avant pour pas mal de gens ici.

J'y ai tout de même passé un petit moment. Ce que je peux te conseiller c'est d'abord de privilégier le but initial de ton programme et son intégrité plutôt que de t'aventurer dans des tas de manips pour le visuel du UserForm.

Ce que tu as fait est très beau, çà fait assez pro. Mais à ce stade il faut ruser un peu plus pour arriver à tes fins.

Je ne peux pas passer une partie de ma nuit dessus mais je vais t'aiguiller sur des bases simples.

Dans les propriétés, il y a un "TAG" pour tous les Controls d'un UserForm. Cette astuce du Tag m'a été donnée par notre Ti national. A vue de nez tu as des boutons qui doivent apparaître si on agit en Entrée ou en Sortie. Donc tu les Tags respectivements "IN" et "OUT" par la fenêtre proprité.

Ensuite, par exemple tu peux faire une boucle comme ceci pour le cas IN :

Private Sub cmdModifIn_Click()
Dim CTRL As Control
For Each CTRL In Controls
If CTRL.Tag = "IN" Then
CTRL.Visible = True
ElseIf CTRL.Tag = "OUT" Then
CTRL.Visible = False
End If
Next CTRL

Et une comme celle-là pour le cas OUT :

Private Sub cmdModifOut_Click()
Dim CTRL As Control
For Each CTRL In Controls
If CTRL.Tag = "IN" Then
CTRL.Visible = False
ElseIf CTRL.Tag = "OUT" Then
CTRL.Visible = True
End If
Next CTRL

On pourrait même envisager une simple boucle pour les deux cas de figures et mettre deux Boolean Public à la place d'indiquer False et True, mais je préfère pas trop m'aventurer encore sur ce coup avec toi ;).

Au vue de tes lignes de codes il se peut que tu aies également besoin de faire une distinction dans les Controls IN eux-mêmes ainsi que dans les Control OUT eux-mêmes, alors on peut aussi jouer avec le nom du Control lui même an addition du Tag comme ceci :

For Each CTRL In Controls
If CTRL.Tag = "IN" Then
If Right(CTRL.Name, 3) = "VAL" Then CTRL.Visible = True
ElseIf CTRL.Tag = "OUT" Then
If Right(CTRL.Name, 3) = "VAL" Then CTRL.Visible = False
End If
Next CTRL

Ce dernier exemple implique obligatoirement que tu changes ta manière de dénommer tes Controls CommandButtons comme étant : "CmdOutVAL" et "CmdInVAL" en lieu et place de "cmdValiderOut" et "cmdValiderIn", car le code ci dessus cherchera dans le nom de tes Controls les 3 caractères de droite dans le Nom. (J'espère que tu me suis)

Voilà à peu près ce que je peux faire pour l'instant.

Sinon je ne pense pas qu'il soit impératif de jouer avec les Top et Left. Visible False/True est bien plus conventionnel dans ce cas de figure.

Pour les images, je ne vois pas la nécessité non plus de faire appel à LoadPicture puisque tu as déjà des boutons prédéfinis différents qui contiennent chacun l'image en dur dans Excel depuis la Propriété du Bouton. Donc inutile de charger des image à part et compliquer le tout, surtout si ce fichier doit circuler.

Voilà pour ma consultation et mon diagnostic Mr G'Claire !

Bonne Continuation et surtout bon courage
@+Thierry
 
G

G'Claire

Guest
@Thierry, le forum

Merci d'avoir passer du temps pour me conseiller, je vais essayer de décortiquer et appliquer ces codes.

Pour Les Top et Left, c'était surtout pour avoir un UserForm pas trop gros par rapport a son contenu.

Je te remercie, G'Claire
 

Discussions similaires

Statistiques des forums

Discussions
313 062
Messages
2 094 941
Membres
106 132
dernier inscrit
GautierV27