CommandBouton

Résolu
vinvinsylvain Messages postés 36 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 mars 2010 - 22 nov. 2009 à 17:12
vinvinsylvain Messages postés 36 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 mars 2010 - 3 déc. 2009 à 18:36
Bonjour a tous !

Voilà mon souci j'ai une application ton une form pricipale avec des commandBoutons.

Je vourdrais savoir si s'est posible de faire un code qui permet de changer le nom tu bouton ainsi que sa commande (ouverture d'un fichier, ouverture d'une application...)
S'est a dire par exemple j'ai un bouton qui s'appel word, en cliquand dessu sa m'ouvre word. Mais si un jour je veux le changer par excel et qui m'ouvre excel, est que s'est posible par un code.

A savoir que si s'est posible il devra etre lier avec un fichier txt comme si dessou:

Fichier commende.txt:
OuTLOOK [] Shell "C:\Program Files\Microsoft Office\OFFICE11\OUTLOOK.EXE"
Word [] Shell "C:\Program Files\Microsoft Office\OFFICE11\WORD.EXE"
...


Merci d'avance

21 réponses

SnkVrt Messages postés 89 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 23 février 2010
3 déc. 2009 à 15:11
Bon, ne le prend pas mal mais il me semble que tu en es à tes tous premiers pas en VB.
Pour info, les Administrateurs n'aiment pas beaucoup qu'on demande du code tout fait.
Là, ça me dérange pas car c'est un sujet qui m'intéresse et que je voulais apprendre moi aussi, alors ça va...
Mais pour le tout début, utilise des moyens simples d'abords...
Exemple...: (et là, on ne parle plus de classe)
Tout d'abord, le 1er bouton (celui qui sera copié autant de fois qu'il y a de ligne) doit déjà exister et avoir la propriété index 0 (et dans mon code, il doit avoir la propriété Name Bouton)


Utilise ma fonction SplitLines (transformée en procédure pour le coup) pour mettre la partie gauche sur la propriété Caption du bouton, et mettre la partie droite sur la propriété ToolTipText (infobulle) du bouton.

Voici un code complet qui fonctionne...

Option Explicit

Dim j As Byte

Private Sub Form_Load()
Open "C:\Rapport événement\Base de Donnée Bouton.txt" For Input As #1
While Not EOF(1)
If j > 0 Then
Load Bouton(j)
Bouton(j).Top = Bouton(0).Top + j * (Bouton(0).Height * 1.5)
Bouton(j).Visible = True
End If
Line Input #1, l$
SplitLines (l$)
j = j + 1
Wend
Close #1
End Sub


Private Sub Bouton_Click(Index As Integer)
Shell Bouton(Index).ToolTipText, vbNormalFocus
End Sub


Private Sub SplitLines(Ligne As String)
'Supposant Une ligne ainsi faite..: MotClé + Espace + Le reste

Dim PartieGauche As String 'à gauche de l'espace
Dim PartieDroite As String 'à droite de l'espace
Dim MyChar As String 'Servira de caractère
Dim i As Byte
For i = 1 To Len(Ligne)
MyChar = Mid(Ligne, i, 1) 'Dissection Caractère par caractère
If MyChar <> " " Then
'On concatène les caractères jusqu'à ce qu'on
'arrive à un espace
PartieGauche = PartieGauche & MyChar
Else
PartieDroite = Right(Ligne, Len(Ligne) - Len(PartieGauche) - 1) 'le -1 c'est l'espace
Bouton(j).Caption = PartieGauche
Bouton(j).ToolTipText = PartieDroite
Exit Sub
End If
Next
End Sub


C'est du bidouillage mais essaie déjà de bien comprendre ça. Du reste, je pense que la classe reste un moyen plus "normal" de procéder mais un tout petit peu plus complexe.

Enfin moi-meme n'ayant pas un bon niveau, je te conseille vivement de regarder les codes des "grands" qui sont sur ce site.

@+
3
cs_jcq Messages postés 211 Date d'inscription vendredi 12 décembre 2003 Statut Membre Dernière intervention 15 janvier 2010
22 nov. 2009 à 19:07
Là il va falloir investir dans un bouquin débuter en programmation avec le VB.

Bart-Rennes
La vie est courte, profitez-en !
Contrôles de bouton et frame en ActiveX et WinForm .NET sur http://www.namtuk.com/FR/DotNet_bouton_my_command_button.aspx
0
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
22 nov. 2009 à 19:54
Bonjour,

Je vourdrais savoir si s'est posible de faire un code qui permet de changer le nom tu bouton


Il va falliur penser à utiliser autre chose (propriété Caption ou propriété Tag) cat la propriété Name est en lecture seule en mode exécution ...
0
vinvinsylvain Messages postés 36 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 mars 2010
23 nov. 2009 à 00:34
Bonsoir

J'ai trouver ceci qui m'irrai bien
Private Sub Command1_Click()
Dim Com As String
Dim Com1 As String
Open "C:\Rapport événement\Base de Donnée Bouton.txt" For Input As #1
While Not EOF(1)
Line Input #1, l$
Com = (l$)
Wend
Close #1

Shell Com
End Sub


Mon souci, il lit bien la ligne mais comme on fait pour découper la ligne car je voudrai juste ce qui est à droit du tabulation
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SnkVrt Messages postés 89 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 23 février 2010
27 nov. 2009 à 12:24
Salut,
à mon avis ta solution c'est le fichier .ini
Il y a pleins de codes sur le sujet en tapant ini dans une recherche.
0
vinvinsylvain Messages postés 36 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 mars 2010
27 nov. 2009 à 14:00
Bonjour,

Je te remerci SnkVrt, j'ai parcourue beaucoup de sujet sur ini.

Mais je ne trouve pas de source sur mon sujet
0
SnkVrt Messages postés 89 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 23 février 2010
27 nov. 2009 à 15:51
Essaie ceci (adapte au besoin)

Private Function SplitLines(Ligne As String) As String
'Supposant Une ligne ainsi faite..: MotClé + Espace + Le reste
Dim PartieGauche As String 'à gauche de l'espace
Dim PartieDroite As String 'à droite de l'espace
Dim MyChar As String 'Servira de caractère
Dim i As Byte
For i = 1 To Len(Ligne)
MyChar = Mid(Ligne, i, 1) 'Dissection Caractère par caractère
If MyChar <> " " Then
PartieGauche = PartieGauche & MyChar
Else
MsgBox PartieGauche
PartieDroite = Trim(Replace(Ligne, PartieGauche, ""))
SplitLines = PartieDroite
Exit Function
End If
Next
End Function

Voilà, c'est pas génial mais je ne suis pas génial...
0
vinvinsylvain Messages postés 36 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 mars 2010
30 nov. 2009 à 21:47
Je te remerci mais là je suis complètement perdu, je dois y mettre ou et comment appel le fichier qui contien les lignes?

Il est vraiment temps que j'achete plusieurs livre en vb6 lol
0
SnkVrt Messages postés 89 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 23 février 2010
1 déc. 2009 à 00:27
Greffé sur ton propre code, ça donne...

Private Sub Command1_Click()
Dim Com As String
Dim Com1 As String 'lui est-il vraiment utile?
Open "C:\Rapport événement\Base de Donnée Bouton.txt" For Input As #1
While Not EOF(1)
Line Input #1, l$
Com = SpiltLines(l$)
Wend
Close #1

Shell Com 'à vérifier (parenthèses, guillemets...)
End Sub

Private Function SplitLines(Ligne As String) As String 
'Supposant Une ligne ainsi faite..: MotClé + Espace + Le reste 
Dim PartieGauche As String 'à gauche de l'espace 
Dim PartieDroite As String 'à droite de l'espace 
Dim MyChar As String 'Servira de caractère 
Dim i As Byte 
For i = 1 To Len(Ligne) 
MyChar = Mid(Ligne, i, 1) 'Dissection Caractère par caractère 
If MyChar <> " " Then 
'On concatène les caractères jusqu'à ce qu'on
'arrive à un espace
PartieGauche = PartieGauche & MyChar 
Else 
'MsgBox PartieGauche 'Uniquement pour vérifier
PartieDroite = Trim(Replace(Ligne, PartieGauche, "")) 
SplitLines = PartieDroite 
Exit Function 
End If 
Next 
End Function 


Bon, il est 00:20, je n'ai pas testé mais ça doit marcher...
Tiens nous au courant.
0
SnkVrt Messages postés 89 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 23 février 2010
1 déc. 2009 à 13:51
Bon, on oublie la fonction replace qui effacera le nom de l'exécutable au passage si il est identhique au 1er mot...

Dans le code ci-dessus, remplace...
PartieDroite = Trim(Replace(Ligne, PartieGauche, ""))

par...
PartieDroite = Right(Ligne, Len(Ligne) - Len(PartieGauche) - 1) 'le -1 c'est l'espace


Et aussi, comment ton prog va-t-il choisir quel ligne il doit utiliser?
0
vinvinsylvain Messages postés 36 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 mars 2010
1 déc. 2009 à 14:07
Je te remercie pour ton code et de ton aide précieu

Voici mon fichier txt:

"bouton1" C:\Program_Files\Internet Explorer\iexplore.exe
"Bouton2" C:\Rapport événement\image\button2.jpg
etc...

Après je ne peux te répondre sur ta dernière question car je sais pas encore comment faire
Soit je lui dis quel ligne il faut lire par le code suivant:
Private Sub Command1_Click()
Dim Com As String
Dim Com1 As String 'lui est-il vraiment utile?
Open "C:\Rapport événement\Base de Donnée Bouton.txt" For Input As #1
While Not EOF(1)
Line Input #1, l$
Com = SpiltLines(l$)
Wend
Close #1



Le com1 s'est le titre que je veux donner au bouton par le code suivant
CommandBoutton1.caption = com1
qui serra mis dans le Private Sub Form_Load()
0
SnkVrt Messages postés 89 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 23 février 2010
1 déc. 2009 à 14:54
Bon alors déjà si tu veux mettre...
Command1.Caption = Com1 dans Form_Load, tu dois déclarer ta variable Com1 dans les déclarations (tout en haut et pas dans une procédure)

Ensuite ma question était en fait...:
Qu'est-ce qui va faire que tu choisiras une ligne plutot qu'une autre?
Quel critère va orienter ton choix?
0
vinvinsylvain Messages postés 36 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 mars 2010
1 déc. 2009 à 15:01
Pour ta question je pensait juste suivre l'autre des lignes

s'est a dire:

bouton1 = première ligne
bouton2 = deuxième ligne
etc...

et oui s'est vrai excusse je me suis tromper com1 tu a tout a fais raison pour le déclarations
0
SnkVrt Messages postés 89 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 23 février 2010
1 déc. 2009 à 18:25
Ha, ça commence à devenir plus clair pour moi, et inquiétant aussi car il va peut-etre falloir envisager de créer dynamiquement des boutons (selon le nombre de lignes contenues dans le fichier txt).
Bon ça c'est pas un problème, mais pour leur affecter une action sur leur évènement Click, là je crois que ça dépasse mes compétences car je ne suis qu'un petit progueur du dimanche.
Néanmoins, je vais me pencher sur le problème... pour apprendre...
0
vinvinsylvain Messages postés 36 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 mars 2010
1 déc. 2009 à 23:28
Hooooo grand grand merci !!!!
s'est génial !!!
moi je m'y penche depuis une semaine et je dis pas le bordel que j'ai mis dans mon programme lol
0
SnkVrt Messages postés 89 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 23 février 2010
2 déc. 2009 à 09:42
petite idée...
tu peux faire une petite classe disons...

Public Class TrucsPouvantEtreLancés
  Public Intitulé as String 'la partie gauche
  Public Chemin as String   'la partie droite
  End Class


Et dans ta boucle While...Wend, itére une nouvelle instance à chaque ligne lu dans le fichier txt et utilise la fonction SplitLines pour affecter les propriétés.
Au meme endroit, crée dynamiquement un nouveau bouton avec
Load Command1(index) (Exemple ici)

Voilà, je crois que c'est pas mal comme solution.
0
vinvinsylvain Messages postés 36 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 mars 2010
2 déc. 2009 à 11:17
donc si j'ai bien compris le code devra resemblé à :

[code=vb]
Public Class TrucsPouvantEtreLancés
Public Intitulé as String 'la partie gauche
Public Chemin as String 'la partie droite
End Class

Private Sub Command1_Click()
Dim Com As String
Dim Com1 As String 'lui est-il vraiment utile?
Open "C:\Rapport événement\Base de Donnée Bouton.txt" For Input As #1
While Not EOF(1)
Line Input #1, l$
Com = SpiltLines(l$)
Wend
Close #1

Shell Com 'à vérifier (parenthèses, guillemets...)
End Sub

Private Function SplitLines(Ligne As String) As String
'Supposant Une ligne ainsi faite..: MotClé + Espace + Le reste
Dim PartieGauche As String 'à gauche de l'espace
Dim PartieDroite As String 'à droite de l'espace
Dim MyChar As String 'Servira de caractère
Dim i As Byte
For i = 1 To Len(Ligne)
MyChar = Mid(Ligne, i, 1) 'Dissection Caractère par caractère
If MyChar <> " " Then
'On concatène les caractères jusqu'à ce qu'on
'arrive à un espace
PartieGauche = PartieGauche & MyChar
Else
'MsgBox PartieGauche 'Uniquement pour vérifier
PartieDroite = Trim(Replace(Ligne, PartieGauche, ""))
SplitLines = PartieDroite
Exit Function
End If
Next
End Function [code]




Le souci le code fonction il lit bien le fichier, mais il me donne pas la totalité de la ligne sur la partie gauche

Pourtant mon fichier txt est:
bouton1 [tab] C:\Program_Files\Internet Explorer\iexplore.exe
Bouton2 [tab] C:\Rapport événement\image\button2.jpg

Avec le code il lit: "événement\image\button2.jpg"
il manque: "C:\Rapport"
0
SnkVrt Messages postés 89 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 23 février 2010
2 déc. 2009 à 13:39
Attention !!
dans ce context, il ne faut pas insérer une tabulation dans le fichier txt mais juste 1 espace...c'est très important.
et puis n'oublie pas d'instancier un objet De la classe TrucsPouvantEtreLancés dans ta boucle While...Wend ainsi que la création d'un bouton.
0
vinvinsylvain Messages postés 36 Date d'inscription dimanche 8 octobre 2006 Statut Membre Dernière intervention 12 mars 2010
2 déc. 2009 à 20:53
ok pour le fichier txt.

mais après je suis complètement perdu

grand merci pour ta pasience
0
SnkVrt Messages postés 89 Date d'inscription vendredi 16 mars 2007 Statut Membre Dernière intervention 23 février 2010
3 déc. 2009 à 15:21
J'ai oublié une dernière chose...
Avec Option Explicit en début de code, tu devras obligatoirement déclarer également ta variable l$.

Conseil.: Prends l'habitude de toujours utiliser Option Explicit qui t'oblige à déclarer toutes tes variables. ça t'évitera bien des erreurs.

Voilà, j'espère t'avoir aider.
@+
0
Rejoignez-nous