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 :

[VBA-E] réaliser un glisser-déplacer dans une listbox [Trucs & Astuces]


Sujet :

Macros et VBA Excel

  1. #61
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    OK , Bandit, je vais t'expliquer un peu, pour que tu commences à comprendre :

    1) pour la 1ère partie :
    Pourquoi, contre toute attente, avoir choisi le mousemove de la list2 et pas, comme on pourrait le penser le mouseup ?
    Tout simplement parce que, une fois le bouton enfoncé dans list1, un mouseup serait considéré comme celui de la list1 au relâché.
    Le mouseMove, alors ? hé hé ! à moins d'être un dieu de la statique ou un as du yoga, il n'est pas possible de faire un relaché en étant parfaitement immobile ! Il y a donc, qu'on le veuille ou non, un MouseMove qui va être généré

    2) pour la 2ème partie :
    pourquoi diable utilliser le mouseMove de la list1 ? Ben... toujours pour les mêmes raisons : le bouton a commencé à être pressé en list1 et, tant qu'on ne l'a pas relaché, VB croit qu'on s'y trouve encore !
    Il reste alors à faire un calcul arithmétique des positions relatives de list1 et list2, un autre calcul pour savoir où l'on se trouve exactement dans la list2 (positions du 1er article affiché et du dernier article affiché) et ... agir en conséquence. Les positions auront des valeurs négatives, la plupart du temps, mais, comme il s'agit de positions relatives, on s'en moque et le raisonnement est toujours bon.

    Voilà de quoi alimenter le mécanisme d'une compréhension, qui n'est certes pas aisée, je sais

    Tu découvriras vite que le développement, c'est surtout celà : une structure de la pensée avant même de se mettre au clavier ! sur 10 unités de temps de développement, il ne faut jamais hésiter à en consacrer 9 à l'organisation de la pensée et à n'en laisser qu'une seule à l'écriture du code correspondant (mais ne le répête à personne... SECRET !... )

    Bon, maintenant que tu es satisfait : je te propose, quand j'en aurai le temps (semaine prochaine), de reprendre la philosophie même de ce machin-là ! On pourrait en effet faire mieux, en n'obligeant pas l'utilisateur à fatiguer son doigt à maintenir enfoncé le bouton central. Celà te tente ? dis-moi

  2. #62
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    C'est clair que je suis satisfait!!
    Mais tu me mets l'eau à la bouche!!
    Je suis en train de m'apercevoir que plus j'en apprends plus j'ai envie d'en apprendre, alors pourquoi pas?
    rendez-vous la semaine prochaine

  3. #63
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    OK ! Tu peux compter sur moi... Je serai la !

  4. #64
    Membre éclairé
    Inscrit en
    Mars 2006
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 72
    Par défaut
    tu vas devenir le roi de la listbox lol

  5. #65
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Hé ! Bandit,
    Tu es là ?
    ce ne sera pas pour la semaine prochaine mais pour demain si tu veux !
    dis-moi !

  6. #66
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    bin c'est comme tu veux

  7. #67
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Hé bien, Bandit !
    Je te vois ...
    Prêt ?

    Alors tu vas voir !
    avant tout : le petit "cadre" qui se promène doit être une petite textbox nommée copie


    code :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Private hauteur As Integer
     
    Private Sub copie_Click()
      coucou
    End Sub
     
    Private Sub Form_Activate()
     copie.ZOrder
     hauteur = List1.FontSize '<<< ========= ou 9, si tu veux.....
     coucou
    End Sub
     
    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
      With copie
       .Left = X + 10
       .Top = Y + 10
      End With
    End Sub
     
    Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
      copie.Visible = False    ' =======EFFACER
      copie.Text = ""      '==========EFFACER
      Me.MousePointer = 0  '=======EFFACER
      coucou  '=========AJOUTER
    End Sub
     
    Private Sub List1_DblClick()
      With copie
        .Text = List1.Text
        .Left = X + List1.Left + 10
        .Top = Y + List1.Top + 10
        .Visible = True
      End With
      Me.MousePointer = 5
    End Sub
     
    Private Sub List2_click()
     If Me.MousePointer = 5 Then
       If List2.ListCount < 2 Then
         List2.AddItem copie.Text
       Else
         numind = List2.ListIndex
         If numind < 0 Then numind = 0
         List2.AddItem copie.Text
         DoEvents
         DoEvents
         For k = List2.ListCount - 1 To numind + 1 Step -1
           List2.List(k) = List2.List(k - 1)
         Next k
         List2.List(k) = copie.Text
       End If
       coucou
     End If
    End Sub
    Sub coucou()
       copie.Text = ""
       copie.Visible = False
       Me.MousePointer = 0
    End Sub

    Fonctionnement :
    - double-click dans la list1 et lacher le bouton : le petit coucou apparaît
    - se "balader" jusqu'à list2 et insérer (on peut utiliser l'ascenseur normal avant de déposer)
    - click dans list2 pour déposer

    pour faire disparaître le petit coucou si on "abandonne" : un click sur la Form ou sur le petit coucou lui-même

    EDIT : Ah, je vois que notre bandit s'est dépéché de ramasser tout celà pour aller l'essayer sans attendre
    PS j'ai fait un edit du code : 3 lignes à effacer, une ligne à ajouter (M'avait échappé !)

  8. #68
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    je suis dessus la
    j'ai un problème au niveau de la list2_clik(), j'ai l'impression qu'il n'arrive pas a prendre en compte l'évenement, sinon tout marche jusque la ( la selection dans la liste1, le copie qui se promène avec la valeur...)
    C'est la recopie dans la liste 2 qui ne se fait pas pour l'instant

  9. #69
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Aucune raison !!!
    Vérifie les propriétés de ta list2 (multiligne, enabled, etc...)
    Regardes également la valeur de la variable hauteur
    Celà marche impeccable chez moi! Il n'y a pas de raisons ...
    Tu cliques bien dans la list2 et pas sur le petit "cadre" ?

  10. #70
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    a priori toutes les propriétés sont correctes, et je ne trouve toujours pas le hic.
    Chose étrange : si je remplace l'évenement click par l'évenement MouseUp sur la liste 2 cela fonctionne parfaitement !!
    Y aurait-il quelque chose qui m'échappe (ce qui serait fort posible )?

  11. #71
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Je crois avoir compris ce qui t'arrive là :

    1) Il ne faut plus, comme avant, garder le bouton de la souris enfoncé
    2) ce n'est plus du tout le bouton central de la souris que tu dois utiliser, mais le seul bouton gauche (tant pour le double click dans list1 que pour le click dans list2)
    Essayes !
    je reviens dans 1 heur 30

  12. #72
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    c'est pourtant ce que je fais : un double clik dans la liste 1, ensuite je promène ma souris sans aucun bouton enclenché. une fois arrivé sur la liste2 et a l'endroit voulu je clique une fois sur le bouton gauche de la souris.
    Résultat : avec l'évenement click rien ne se passe, avec l'évenement MouseUp l'item est copiée a la bonne place...

  13. #73
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Juste une question(idiote, peut-être, mais...) :
    Tu as bien compris que c'était un programme complet ?
    Tu ne me l'as pas inséré dans l'utre programme, par hasard ?
    car sinon : aucune raison pour que celà marche au up et pas au click !
    dis-moi
    envoies-moi, en MP pour ne pas surcharger ici, tout ton code, que je le regarde, STP !

  14. #74
    Membre émérite
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Par défaut
    bon désolé ouskelnor un dernier petit post pour dire que click ne marche toujours pas (malgrè les différentes remarques de jmf) donc je reste sur l'évenement MouseUp!
    En cas merci beaucoup pour toutes ces explications !!!

  15. #75
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    Bon ! alors c'est VBA qui "fonctionne différemment"... Mais c'est bon !
    mets maintenant le tag pour ce sujet mais :

    Remets maintenant en cause ce que tu as fait pour une seule listbox, après avoir relu et rerelu le mécanisme utilisé pour 2 listboxes.

    Reviens ensuite, en ouvrant un autre sujet, sur ce thème-là (déplacements à l'intérieur d'une seul listbox), afin qu'ouskel puisse voir celà également (tu as mal interprêté le sens de son intervention : il est intéressé )
    Amitiés

+ Répondre à la discussion
Cette discussion est résolue.
Page 4 sur 4 PremièrePremière 1234

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/05/2014, 10h43
  2. [VBa-E] Object Ole "image bitmap" dans une Userform?
    Par gootsu dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/07/2006, 14h24
  3. [VBA-E]Comment faire pour écrire dans une page excel existante ?
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2006, 13h54
  4. [VBA][OLE] insertion d'un graph dans une diapo Powerpoin
    Par Nexussmb dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/10/2005, 16h22
  5. [MFC] Glisser/Déposer dans une CView
    Par octopus984 dans le forum MFC
    Réponses: 2
    Dernier message: 26/04/2005, 10h15

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