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

  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

  7. #7
    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......

    En fait mon problème serait plutôt comment utiliser la propriété TAG dans ce cas de figure (pour renvoyer l'info du Zorder) !!!

    Une idée?? svp
    merci
    phil

  8. #8
    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,

    Admettons la création de 10 Labels (posés en décalés pour voir l'effet) où l'index de base est 1 (Tag = 1 dans le premier Label puis incrémenté de 1 pour les suivants). Tu les change de position Z et tu souhaites les remettre dans l'ordre original :
    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
     
    Private Sub UserForm_Click()
     
        Dim I As Integer
        Static Pos As Integer
     
        'pour le test, avec appuis successifs, l'ordre est inversé
        If Pos = 1 Then Pos = 0 Else Pos = 1
     
        For I = 0 To Controls.Count - 1
     
            'ici, l'index commence à 1 dans Tag d'où la nécessité d'enlever 1
            Controls(Controls(I).Tag - 1).ZOrder Pos
     
        Next I
     
    End Sub
    Pour ce test, je suis parti du principe qu'il n'y a que des Labels sur la Form, dans le cas contraire, il faut tester au préalable. Des clics successifs sur la Form inversent la position des Labels, celui au premier plan passe au dernier et inversement !

  9. #9
    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;

    très intéressant ton code , je pense que j'aurais matière a l'insérer prochainement!!

    Malheureusement il ne résout pas mon problème;

    Dans l'usf , il n'y pas que des labels et pour info ; cela ne concerne que les labels du no 1 au no 120 qui sont déplacés et classés dans des colonnes par ordre de priorité, le label qui se trouve le + en haut dans chaque colonne (il y a 10 colonnes)doit être dessous des autres !!
    C'est rageant car ça fonctionne bien avec Zorder tant que je ne sors pas de l'userform !!

    je sais c'est tordu comme concept,................c'est pour créer un planning d'étiquettes!!!

    merci
    phil

  10. #10
    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
    Re,

    En fait, si je comprends bien, tu voudrais retrouver le positionnement de chaque Label à l'ouverture comme ils sont à la fermeture de la Form, c'est ça ?

  11. #11
    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
    oui these , c'est exactement ça.............!!
    arhhhhh la communication

  12. #12
    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
    Dans ce cas, c'est un peu plus compliqué !

    Il te faut stocker quelque part les différentes valeurs, par exemple dans une feuille cachée. Comme le nom du Label, sa position ordinale par rapport aux autres dans la profondeur Z et faire une boucle pour les repositionner à l'ouverture de la Form.

  13. #13
    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 These;

    j'ai déjà une feuille pour stocker l'info des X et Y mais je ne sais pas faire pour le Z, as t un idée?

    merci
    phil

  14. #14
    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,

    Le plus simple, c'est que je te poste un classeur exemple.

    J'ai fais simple, 5 Labels posés en décalé sur une Form avec leurs noms et positions ordinale de départ dans la feuille "Feuil1". Quand tu cliques sur un ou plusieurs Labels, tu vas les amener au premier plan à tour de rôle, quand tu ferme la Form, leurs positions vont être stockées en colonne B et à la réouverture, tu trouvera la même configuration qu'à la fermeture.
    Fichiers attachés Fichiers attachés

  15. #15
    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 ........These

    merci pour ce gros travail, c'est vraiment super!!

    le soucis c'est que j'ai un message d'erreur quand j'applique ton code a mon appli, je pense que ça doit venir du fait que j'ai d'autres labels dans mon usf , du coup j'ai encore besoin de ton aide........car je n'arrive pas a créer la boucle !
    Dans mon pgm, seules les labels du no 1 au no 120 sont concernés

    merci
    Phil

  16. #16
    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
    Effectivement, le code que j'ai posté est assez simpliste car c'est pour te montrer une méthode parmi d'autres pour gérer le positionnement des Labels.
    Si tu peux poster un fichier allégé sans données confidentielles, je pourrais mieux voir comment adapter mon code à ton classeur.

  17. #17
    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 These;

    voici un fichier allégé

    l'info ou je souhaiterai le retour du tag se trouve dans la colonne "w" de l'onglet "Labels"
    n'hésites pas a l'améliorer .

    je Bugue complet sur ce problème

    Merci
    phil

  18. #18
    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,

    Je te retourne ton classeur avec quelques modifs (ajout d'un module de classe pour gérer la procédure évènementielle 'DblClick' des Labels), d'une boucle pour réduire le nombre de lignes et les proc pour gérer la position ordinale de Labels. Dans la feuille 'Labels', j'ai ajouté deux colonnes (Z et AA) pour stocker les noms et index.
    Je vois que tu utilise pas mal 'On Error Resume Next' et si j'ai un conseil à te donner, lors du développement de ton outils, il est préférable de ne pas l'utiliser afin de voir les erreurs qui se produisent et de les gérer en conséquence, il vaux mieux gérer une erreur que de l'éluder !
    Fichiers attachés Fichiers attachés

  19. #19
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Oua bravo !
    C'est chouette ce truc, j'adore l'USF avec les labels déplaçable
    Y a juste un pti bug suit un DblClic l'autre USF est bien affiché, mais après l'avoir fermé, le curseur reste avec le rond (ancien sablier) comme s'il était en train de se passer quelque chose et bien que l'on ne sois pas sur un label si on clic et deplace ça déplace le label sur lequel on avait double cliqué avant

    Suggestion, plutot que d'avoir 120 labels dès le départ, ne serait il pas plus simple de faire l'inverse ?
    0 labels au départ, et tu créé tes labels dynamiquement.

  20. #20
    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
    Merci Cerede.Ton analyse est bonne et j'y avais pensé mais je n'y étais pas arrivé car je ne sais pas comment créer un label dynamiquement!! si quelqu'un a a une idée , je suis preneur.....

    Bravo a toi These pour ton aide précieuse, je regardes tout ça et je reviens vers toi
    Phil

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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