EVÈNEMENT MOUSEMOVE SUR UNE SÉLECTION DE CONTRÔLES DE MÊME TYPE
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
21 avril 2006 à 09:54
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
24 avril 2006 à 08:00
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 24 avril 2006 à 08:00
Salut Gamanga,
J'utilise pas de shape, mais des Labels, de plus ceux-ci ne se trouvent sur la feuille du classeur, mais dans un UserForm.
cs_gamanga
Messages postés3Date d'inscriptionvendredi 7 avril 2006StatutMembreDernière intervention18 mars 2009 23 avril 2006 à 14:26
voici une macro VBA qui à titre d'exemple renomme des formes sous excel en faisant appel à la notion de collection.
Cette tecnique est AUSSI utile sous VB qui ne gére des groupes de contrôle à une dimension ce qui peut s'avérer insuffisant. En conbinant l'index du groupe et une régle sur le nom du contrôle on peut gérer des tableaux de contrôles de plus d'une dimension.
Les noms des variables utilisés par la macro servent de commentaires.
Sub Macro1()
' la feuille active comporte un certain nombre d'ellipse (0 est possible) : on peut les renommer à la main dans excel après copier coller
' voici un exemple avec une macro VBA
' Macro1 Macro
' Macro enregistrée le 23/04/2006
'
Dim Forme As Shape
Dim numéro As Integer
Dim OldName As String, NewName As String
'
For Each Forme In ActiveSheet.Shapes
OldName = Forme.Name
If Mid$(UCase$(OldName), 1, 4) = "OVAL" Then
numéro = Val(Trim$(Mid$(OldName, 5)))
NewName = "Ellipse" + Format$(numéro, "0000")
Forme.Name = NewName
MsgBox "Ancien nom " + OldName, vbInformation, "Nouveau nom " + Forme.Name
End If
Next
Range("a1").Select
End Sub
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 avril 2006 à 13:04
Malheureusement non, j'ai des notions mais c'est tout.
Par contre c'est bon a savoir, car j'aurai fait la même chose en Vb6 si j'en avais eu l'utilité, maintenant avec votre coup de main je connais une technique simplifié.
Merci pour vos commentaires, qui m'a permis de comprendre le groupe de contrôles !
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 21 avril 2006 à 12:59
pas de groupes de controles en VBA...
nous pensions que tu jouais en VB6
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 avril 2006 à 12:46
J'ai vérifié, y a pas de propriété Index en VBA (juste TabIndex, ms inutile dans ce cas)
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 avril 2006 à 12:42
Effectivement, ca a l'air + simple que je ne le croyais.
Par contre, pour mes besoins je suis en VBA excel, et quand je fais copier/coller d'un contrôl, l'éditeur ne me demande pas de créer un groupe de contrôle et les noms de controles ne sont pas les meme (ex : Label1, Label2)
Je vais qd meme essayer plusieurs choses !!
Merci pour la syntaxe, je vais chercher l'"index" en VBA
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 21 avril 2006 à 12:24
Complément :
Pour savoir combien de control comporte un groupe tu peux faire
lblTest().Count
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 21 avril 2006 à 12:20
Non, c'est en fait beaucoup plus simple.
Tout tes controls doivent avoir le même nom (pour le même groupe).
Place par exemple un Label que tu nommme lblTest
Ensuite sur ce control tu fait un copier/coller. Au moment du coller VB te demande si tu vuex creer un groupe de control, là tu répond oui.
Tu t'appercevra, qu'en fait il ne fait que donner le même nom à tes controls et mettre un Index différent (en commençant par zero)
Tu peux appeler ensuite tes controles ainsi lblTest(Index) :
Ex : lblText(0).Caption
Pour les fonctions, sans groupe de controle tu obtiens
Private Sub lblTest_Click()
End Sub
Avec groupe de controle tu obtiens :
Private Sub Label1_Click(Index As Integer)
End Sub
Index te permet de savoir sur quel Label tu a cliqué.
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 21 avril 2006 à 11:39
Salut à tout les deux !
Pourquoi n'ai je pas fait de groupe de contrôles ?
1/ En fait je ne connais pas la technique, j'ai bien essayé des combines, du genre si mes labels a utiliser s'appellent Label1 ... à Label10, je faisais
For i = 1 to 10
Label(i).Quelquechose
Next i
Mais VB m'affiché un Msg d'erreur.
Je pense qu'il faut déclarer un truc comme Dim lblX As Control mais je sais pas vraiment l'utiliser (si vous avez un exemple, ça me permettra d'agrandir mes connaissances)
2/ Je voulais apprendre les Modules de classe, là au moins c'est fait,
reste plus qu'a connaitre votre technique.
Voilà, vous savez pourquoi !
En tout cas, merci de m'avoir guider vers une solution apparement + simple.
Si vous avez un exemple de groupe de controles, je suis preneur.
j'en profite, avec votre technique, peut on utiliser les autres évènements du contrôl en question ? (sur KeyDown, par exemple)
Encore merci
Mortalino
bouv
Messages postés1411Date d'inscriptionmercredi 6 août 2003StatutMembreDernière intervention 3 mars 20191 21 avril 2006 à 11:06
même remarque que Renfield...
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 21 avril 2006 à 09:54
pourquoi ne pas, simplement, utiliser un groupe de controles ?
24 avril 2006 à 08:00
J'utilise pas de shape, mais des Labels, de plus ceux-ci ne se trouvent sur la feuille du classeur, mais dans un UserForm.
23 avril 2006 à 14:26
Cette tecnique est AUSSI utile sous VB qui ne gére des groupes de contrôle à une dimension ce qui peut s'avérer insuffisant. En conbinant l'index du groupe et une régle sur le nom du contrôle on peut gérer des tableaux de contrôles de plus d'une dimension.
Les noms des variables utilisés par la macro servent de commentaires.
Sub Macro1()
' la feuille active comporte un certain nombre d'ellipse (0 est possible) : on peut les renommer à la main dans excel après copier coller
' voici un exemple avec une macro VBA
' Macro1 Macro
' Macro enregistrée le 23/04/2006
'
Dim Forme As Shape
Dim numéro As Integer
Dim OldName As String, NewName As String
'
For Each Forme In ActiveSheet.Shapes
OldName = Forme.Name
If Mid$(UCase$(OldName), 1, 4) = "OVAL" Then
numéro = Val(Trim$(Mid$(OldName, 5)))
NewName = "Ellipse" + Format$(numéro, "0000")
Forme.Name = NewName
MsgBox "Ancien nom " + OldName, vbInformation, "Nouveau nom " + Forme.Name
End If
Next
Range("a1").Select
End Sub
21 avril 2006 à 13:04
Par contre c'est bon a savoir, car j'aurai fait la même chose en Vb6 si j'en avais eu l'utilité, maintenant avec votre coup de main je connais une technique simplifié.
Merci pour vos commentaires, qui m'a permis de comprendre le groupe de contrôles !
21 avril 2006 à 12:59
nous pensions que tu jouais en VB6
21 avril 2006 à 12:46
21 avril 2006 à 12:42
Par contre, pour mes besoins je suis en VBA excel, et quand je fais copier/coller d'un contrôl, l'éditeur ne me demande pas de créer un groupe de contrôle et les noms de controles ne sont pas les meme (ex : Label1, Label2)
Je vais qd meme essayer plusieurs choses !!
Merci pour la syntaxe, je vais chercher l'"index" en VBA
21 avril 2006 à 12:24
Pour savoir combien de control comporte un groupe tu peux faire
lblTest().Count
21 avril 2006 à 12:20
Tout tes controls doivent avoir le même nom (pour le même groupe).
Place par exemple un Label que tu nommme lblTest
Ensuite sur ce control tu fait un copier/coller. Au moment du coller VB te demande si tu vuex creer un groupe de control, là tu répond oui.
Tu t'appercevra, qu'en fait il ne fait que donner le même nom à tes controls et mettre un Index différent (en commençant par zero)
Tu peux appeler ensuite tes controles ainsi lblTest(Index) :
Ex : lblText(0).Caption
Pour les fonctions, sans groupe de controle tu obtiens
Private Sub lblTest_Click()
End Sub
Avec groupe de controle tu obtiens :
Private Sub Label1_Click(Index As Integer)
End Sub
Index te permet de savoir sur quel Label tu a cliqué.
21 avril 2006 à 11:39
Pourquoi n'ai je pas fait de groupe de contrôles ?
1/ En fait je ne connais pas la technique, j'ai bien essayé des combines, du genre si mes labels a utiliser s'appellent Label1 ... à Label10, je faisais
For i = 1 to 10
Label(i).Quelquechose
Next i
Mais VB m'affiché un Msg d'erreur.
Je pense qu'il faut déclarer un truc comme Dim lblX As Control mais je sais pas vraiment l'utiliser (si vous avez un exemple, ça me permettra d'agrandir mes connaissances)
2/ Je voulais apprendre les Modules de classe, là au moins c'est fait,
reste plus qu'a connaitre votre technique.
Voilà, vous savez pourquoi !
En tout cas, merci de m'avoir guider vers une solution apparement + simple.
Si vous avez un exemple de groupe de controles, je suis preneur.
j'en profite, avec votre technique, peut on utiliser les autres évènements du contrôl en question ? (sur KeyDown, par exemple)
Encore merci
Mortalino
21 avril 2006 à 11:06
21 avril 2006 à 09:54