IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

comment renvoyer la position Zorder des labels


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Novembre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 38
    Par défaut comment renvoyer la position Zorder des labels
    Bonjour,

    C'est sûrement très simple mais je n'y arrive pas alors je fais encore une fois appel a vous et a vos compétences !!!
    J'ai un userform ou il y a une centaine de label que je déplace a convenance mais quand je souhaites faire passer l'étiquette que je manipule dessus une autre, ça ne fonctionne pas.

    voici le module de classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    ' Sur souris appuyée
    Private Sub goLabel_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
    ' Si bouton gauche
    If Button = vbKeyLButton Then
        ' Conserve la position du clic
        gClicX = x
        gClicY = Y
        ' Appelle la procédure DragMouseDown du formulaire
        CallByName goUserForm, "DragMouseDown", VbMethod, goLabel
    End If
    End Sub
     
    ' Sur souris déplacée
    Private Sub goLabel_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
    ' Si bouton gauche
    If Button = vbKeyLButton Then
        ' Déplace l'étiquette en fonction de sa position courante, de la position du clic et de la position
        '   de la souris déplacée sur l'étiquette
        goLabel.Left = goLabel.Left - (gClicX - x)
        goLabel.Top = goLabel.Top - (gClicY - Y)
        ' Appelle la procédure DragMouseMove du formulaire
        CallByName goUserForm, "DragMouseMove", VbMethod, goLabel
    End If
    End Sub
     
    ' Sur souris relâchée
    Private Sub goLabel_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single)
    ' Si bouton gauche
    If Button = vbKeyLButton Then
        ' Appelle la procédure DragMouseUp du formulaire
        CallByName goUserForm, "DragMouseUp", VbMethod, goLabel
    End If
     
    End Sub
    voici les modules dans l'userform

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ' Sur souris appuyée sur l'étiquette pLabel
    Public Sub DragMouseDown(pLabel As MSForms.label)
    End Sub
     
    ' Sur souris déplacée sur l'étiquette pLabel
    Public Sub DragMouseMove(pLabel As MSForms.label)
    pLabel.ZOrder (0)
    End Sub
     
     
    ' Sur souris relâchée sur l'étiquette pLabel
    Public Sub DragMouseUp(pLabel As MSForms.label)
    pLabel.ZOrder (0)
    End Sub
    ça fonctionne bien quand je manipule les étiquettes mais quand j'initialise l'userform, les positions se remettent a leurs positions initiales !!! grrrrrrrrr

    Au début j'avais pensé a renvoyer l'info du zorder dans la feuille Excel pour pouvoir mieux gérer par la suite mais je n'arrive pas a trouver le code qui va bien !!!?
    j'ai essayé le .zorderposition mais sans resultats

    Peut être que ce n'est pas la bonne piste???? , quelqu'un s'est il déjà penché sur le problème??

    merci d'avance
    phileas

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    Salut,

    si je peux me permettre, joins un exemple de classeur,
    ça ira plus vite pour reproduire, analyser et chercher une solution.
    Cordialement,

  3. #3
    Membre averti
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Novembre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 38
    Par défaut re.........
    merci pour ta réponse rapide.
    Je vais tenter de faire un exemple car le fichier est lourd.
    en attendant, peux tu me dire si il est possible de récupérer le zorder sur chaque label. si oui, comment faire ..??

    merci d'avance
    phil

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur
    Inscrit en
    Avril 2003
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur

    Informations forums :
    Inscription : Avril 2003
    Messages : 724
    Par défaut
    J'ai pas le temps de trop regarder ton code en détails,
    mais il me semble que le zOrder tu l'utilises déja, comme dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Sub DragMouseMove(pLabel As MSForms.label)
    ' là, tu règles le position suivant z de ton label!
    pLabel.ZOrder (0)
    End Sub
    Par contre, je suis pas sur que le 0 doit être mis entre parenthèses!
    Car ici, on est plutôt dans l'appel d'une procédure sans utiliser le
    mot clé Call, si tu vois ce que je veux dire!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Sub DragMouseMove(pLabel As MSForms.label)
    ' là, tu règles le position suivant z de ton label!
    pLabel.ZOrder 0
    End Sub

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Avec ZOrder, il n'y a pas de hiérarchie dans l'ordonnancement, sitôt que tu manipule un objet, il est soit tout derrière avec la valeur 1 soit c'est tout devant avec la valeur 0.
    A la création de tes Labels, tu peux utiliser leur propriété Tag et y stocker l'index de création puisque le nouveau créé est positionné sur les autres (le 1er créé aura l'index 1 et sera tout derrière) mais après, avec les manipulations, il va te falloir gérer dans la propriété Tag leur hiérarchie. Si par exemple un Label positionné au milieu de la collection est mis devant, il va falloir déplacer tous des index des Labels qui le précédaient ! Maintenant, si tu veux qu'ils gardent leur index afin de pouvoir les remettre dans l'ordre de création, c'est très simple, une boucle depuis le plus petit index vers le plus grand avec ZOrder 0 les repositionnera comme à la création.

  6. #6
    Membre averti
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Novembre 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Rédacteur technique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 38
    Par défaut
    Bonjour et merci these et philippe;*



    Philippe, après essai les deux fonctionnent très bien -->pLabel.ZOrder 0 et pLabel.ZOrder (0)
    These ; peux tu me donner un exemple stp car je ne vois pas trop comment je pourrais m'y prendre pour la boucle?????

    Merci encore
    phil

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/10/2008, 02h21
  2. comment marche la position des éclairages
    Par skalimer0 dans le forum OpenGL
    Réponses: 3
    Dernier message: 16/11/2007, 15h18
  3. Comment sauvegarder la position des colonnes de mon tableau ?
    Par Bruno13 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 04/11/2007, 01h38
  4. comment renvoyer des messages
    Par AlexFred dans le forum Outlook
    Réponses: 1
    Dernier message: 25/09/2007, 12h13
  5. Comment récupérer la position des icones du bureau ?
    Par bambino3996 dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 29/09/2005, 18h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo