routine lien cellule-bouton-image - VB/VBA/VBS - Programmation
Marsh Posté le 30-06-2006 à 11:05:47
Une proposition de procédure à appliquer à tous les boutons
Private Sub EcrireProcClick(Nom As String)
Dim code As String
code = ""
code = "Sub " & Nom & "_Click()" & vbCrLf
code = code & " <ton code ligne 1>" & vbCrLf
code = code & " <ton code ligne 2>" & vbCrLf
code = code & "End Sub"
' Ecriture du code dans le module de la feuille (fs)
With ThisWorkbook.VBProject.VBComponents("<Ton UserForm>" ).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, code
End With
End Sub
Marsh Posté le 30-06-2006 à 11:21:18
ca doit le faire oui
et la sub EcrireProcClick() je l'appelle à quel niveau et avec quel paramèetre stp ?
Marsh Posté le 30-06-2006 à 11:24:16
En fait ca génére le code en dur dans ton userform.
Moi j'ai créé un bouton et j'ai associé le code suivant à adapter
For Each bout In UserForm3.Controls
If bout.Name Like "bouton*" Then Call EcrireProcClick(bout.Name)
Next
Marsh Posté le 30-06-2006 à 11:40:28
Paul Hood a écrit : En fait ca génére le code en dur dans ton userform. |
je sens que ca va le faire au final ca ^^
par contre, comme j'ai des string avec du code comme ca
image ="E:\plop.gif", comment faire comprendre le " comme un " et pas dans le code en lui même...
Marsh Posté le 30-06-2006 à 11:48:50
jpcheck a écrit : je sens que ca va le faire au final ca ^^ |
j'ai mis le chr(34) à la place
code= code & "image ="E:\prout.gif"" & vbCrLf
donne donc
code= code & "image =" & chr(34) & "E:\prout.gif" & chr(34) & vbCrLf
Marsh Posté le 30-06-2006 à 11:53:39
Ca l'air de fonctionner avec ca :
MaString = "Tata"
code = "toto et " & """" & MaString & """"
MsgBox code
En fait pour mettre un " il faut en mettre 4 ("""" ) dans la variable
Marsh Posté le 30-06-2006 à 13:48:18
Paul Hood a écrit : Ca l'air de fonctionner avec ca : |
le code est bien généré, je l'affiche dans une msgbox pour m'en assurer, mais le bloc suivant
Code :
|
est mal encaissé, retour 1004.
Marsh Posté le 30-06-2006 à 14:43:28
ReplyMarsh Posté le 04-07-2006 à 10:48:01
Je répond sans doute un peu tard, je ne suis pas ce forum de très prêt....
Code :
|
Tu peux facilement boucler sur les contrôles de ta feuille.
Marsh Posté le 04-07-2006 à 11:05:39
merci, pas de pb pour le retard, cette macro était en mode pause, en attente de propositions, car je me suis taperles 100*12 lignes de codes pour chaque bouton à la main...
en quoi consiste la fonction debug.print ?
Marsh Posté le 04-07-2006 à 11:09:37
Re,
Debug.print te permets d'imprimer dans la fenêtre "Exécution" pour des raisons de debogage. (Ne s'affiche qu'en mode édition. Sans effet quand le code est compilé).
Marsh Posté le 04-07-2006 à 15:43:43
Proposition pour générer un form avec tes 100 boutons et le code associés :
Dans un form1 tu créé le bouton CommandButton1 avec le code ci-dessous
Private Sub CommandButton1_Click()
Dim Nom As String
Dim Usf As Object, btn As Object
'Application.VBE.SelectVBComponent.Designer.Controls.Count
Set Usf = ThisWorkbook.VBProject.VBComponents("UserForm2" )
For j = 1 To 10
For i = 1 To 10
Nom = "bouton" & Format(j, "0#" ) & Format(i, "0#" )
Set bout = Usf.Designer.Controls.Add("Forms.CommandButton.1", Nom)
bout.Name = Nom
bout.Left = (i - 1) * 25
bout.Top = (j - 1) * 25
bout.Height = 25
bout.Width = 25
With Usf.CodeModule
X = .CountOfLines
.InsertLines X + 1, "Sub " & Nom & "_Click()"
.InsertLines X + 2, " MsgBox ActiveControl.Name"
.InsertLines X + 3, "End Sub"
End With
Next
Next
VBA.UserForms.Add (Usf.Name)
UserForms(UserForms.Count - 1).Show
End Sub
Pour que ca fonctionne il faut qu'un form "UserForm2" existe. dimensionne le en conséquence pour recevoir 100 boutons de 25x25.
Ca génére les 100 boutons (10 par 10) et le code de chaque bouton (ici tout simple, il retourne le nom du bouton sur lequel el clic est effectué).
Le nom du boutons est donné en fonction de sa position :
En haut à gauche bouton_0101 : 1ere ligne 1ere colonne
en bas à gauche bouton_1001 : 10 eme ligne 1ere colonne.
A partir des 4 dernier carateres du nom du bouton tu tapes dans la feuille la bonne colonne et la bonne ligne pour connaître le nombre de bombe.
remarquesur ton code (en haut)
pas la peine de faire une boucle au début mais plutôt
'affichage valeur
bouton001.Picture = LoadPicture("E:\" & cells(ligne,colonne) & ".gif" )
avec ligne et colonne issue du nom du bouton.
J'sais pas si c'est tres clair... mais dis moi si ca correspond à ce que tu cherches.
Marsh Posté le 04-07-2006 à 15:53:26
là ou j'enrage, c'est que je me dis que ton code c'est du pain bénni. par contre, j'ai toujours cette fichue erreur 1004 avec mon usf qui vaut nothing :s
j'ai trouvé sur ce site ici, l'idée d'ajouter la référence Microsoft Visual Basic For Applications Extensibility 5.3 mais ca ne fait rien...
Marsh Posté le 04-07-2006 à 16:13:01
ReplyMarsh Posté le 04-07-2006 à 16:24:45
ReplyMarsh Posté le 04-07-2006 à 16:34:27
ReplyMarsh Posté le 04-07-2006 à 16:34:52
jpcheck a écrit : il m'envoie paitre dès le activeworkbook.vbproject |
Il dit quoi comme erreur ?
Marsh Posté le 04-07-2006 à 16:39:09
Paul Hood a écrit : Il dit quoi comme erreur ? |
erreur 1004, L'accès au projet visual basic n'est pas fiable.
Marsh Posté le 04-07-2006 à 16:44:48
ReplyMarsh Posté le 04-07-2006 à 16:48:48
Paul Hood a écrit : Les variables sont bien déclarées et typées |
voila le code en question :
Code :
|
Marsh Posté le 04-07-2006 à 16:55:25
ReplyMarsh Posté le 04-07-2006 à 16:58:34
ReplyMarsh Posté le 04-07-2006 à 17:04:22
Code= "msgbox nom" par exemple pour savoir si l'écriture qqui merd.. ou si c'est dans ta variable code.
Remarque:
Tu lui passes pas de paramêtre à ta fonction mousedown ?
Ceci dis, chez moi ca marche nickel..enfin la crétaion de la procedure apres à l'utilisation il plante puisque pas de parametre pour mousedown.
Marsh Posté le 04-07-2006 à 17:09:10
le msgbox nom me donne bien commandbutton1, la deuxieme msgbox me donne bien mon code cherché, par contre, le thisworkbook.etc plante
Marsh Posté le 04-07-2006 à 17:15:27
Comme je te disais, la création fonctionne nickel chez moi... par contre a l'execution ca plante..mais c'est normal.
Marsh Posté le 04-07-2006 à 17:19:45
Paul Hood a écrit : Comme je te disais, la création fonctionne nickel chez moi... par contre a l'execution ca plante..mais c'est normal. |
y a-t-il une sécurité qu'il faille faier suater ??
on échange nos pc ?
Marsh Posté le 04-07-2006 à 17:20:31
jpcheck a écrit : y a-t-il une sécurité qu'il faille faier suater ?? |
sinon, connais tu un moyen d'afficher la liste des vbcomponents, ca vient surement de la ...
Marsh Posté le 04-07-2006 à 17:25:39
jpcheck a écrit : sinon, connais tu un moyen d'afficher la liste des vbcomponents, ca vient surement de la ... |
il me sort aussi un variable de bloc with non défini...
Marsh Posté le 04-07-2006 à 17:25:41
j'ai pas mieux :
For Each obj In ThisWorkbook.VBProject.VBComponents
MsgBox obj.Name
Next
Marsh Posté le 04-07-2006 à 17:29:29
Code :
|
Marsh Posté le 04-07-2006 à 17:34:01
JihemAir a écrit :
|
JMR je t'aime
Marsh Posté le 30-06-2006 à 09:25:59
Bonjour
pour faire suite à mes précédents topics, je suis toujours sur ma programmation de démineur. Je prends la présentation Windows...
J'ai donc un userform avec 100 boutons de jeu + 1 de reset.
J'ai déjà géré le tirage aléatoire des mines, et les valeurs des cases selon la proximité de mines ou non.
Mon problème est maintenant le suivant.
Est-il possible de créer une ou plusieurs routines (le minimum étant le mieux) permettant d'avoir une automatisation de
- l'image de départ lors du clic sur le bouton "reset" => mise à zéro du jeu, mise à zéro des images
- la liaison cellule des mines (zone A1:J10), cellule du nombre (zone A11:J20)
mon code pour un bouton étant celui-ci :
et tout ca pour 100 boutons donc (10x10)
pourriez vous m'aider ?
Merci d'avance