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

VBA Discussion :

[VBA]Obtenir le "handle" d'un objet


Sujet :

VBA

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 22
    Points : 13
    Points
    13
    Par défaut [VBA]Obtenir le "handle" d'un objet
    Bonjour à tous,

    J'ai découvert sur ce site ce petit bout de code qui semble répondre à mon besoin.

    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
     
    - Copiez tout d'abord ces déclarations au début du module de la form :
     
     
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                                        (ByVal hwnd As Long, ByVal wMsg As Long, _
                                         ByVal wParam As Long, lParam As Any) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, _
                                                                         ByVal Length As Long)
     
    Private Const EM_GETLINECOUNT = &HBA
    Private Const EM_LINELENGTH = &HC1
    Private Const EM_LINEINDEX = &HBB
    Private Const EM_GETLINE = &HC4
     
     
     
    - La procédure ci-dessous affiche une par une les lignes du textbox dont le handle est passé en paramètre :
     
     
    Private Sub AfficheLignes(lngHandleTextBox As Long)
     
    Dim lngNbLignes As Long, i As Long
    Dim lngIndexCar As Long, intLongueurLigne As Integer
    Dim strLigne As String
     
    'nombre de lignes
    lngNbLignes = SendMessage(lngHandleTextBox, EM_GETLINECOUNT, 0, 0)
     
    For i = 1 To lngNbLignes
       'index du premier caractère de la ligne
       lngIndexCar = SendMessage(lngHandleTextBox, EM_LINEINDEX, i - 1, 0)
       'longueur de la ligne
       intLongueurLigne = SendMessage(lngHandleTextBox, EM_LINELENGTH, lngIndexCar, 0)
       'récupère la ligne dans la chaîne strLigne
       strLigne = Space(intLongueurLigne)
       CopyMemory ByVal strLigne, intLongueurLigne, Len(intLongueurLigne)
       SendMessage lngHandleTextBox, EM_GETLINE, i - 1, ByVal strLigne
       MsgBox strLigne
    Next
     
    End Sub
    Le hic, c'est que mon expérience est limitée en programmation (surtout en VB) et que je ne sais pas comment obtenir le "handle" du text box que je doit passer en paramètre.

    Cela dit, votre aide serait grandement apprécié.

    Rob.

  2. #2
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    Ca vaut peut-être le coup de regarder la propriété hWnd dans l'aide en ligne ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    jmfmarques, je viens de me rendre compte que j'ai omis de spécifier que c'est en VBA et non en VB.

    En VB il y a effectivement une propriété hWnd ce qui retourne le handle du textbox. Cette propriété ne semble pas existante pour un textbox en VBA (dumoins je ne l'ai pas trouvé).

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tu nous as pas dit quel été le but de ce code ...?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Tu as bien raison bbil

    Je désire aller chercher ligne par ligne du texte qui a été collé par l'usager dans un textbox multilignes. Ces lignes sont des commandes alors il est important de bien détecter la fin de ligne correctement. Comme spécifié dans le FAQ ou j'ai trouvé ce code, il est possible de détecter le retour de chariot à la fin de la ligne mais il semble que ce ne soit pas aussi fiable que par la méthode cité en exemple.

  6. #6
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    j'ai omis de spécifier que c'est en VBA et non en VB.
    Comme de le demande Bbil ... C'est pour quoi faire ?

    Si c'est important, alors on va aller chercher ce handle en utilisant l'API de Windows...

  7. #7
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    mais ce text box il est dans ton application VBA ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Oui bbil ce textbox est dans mon application vba

  9. #9
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    Attention : dans une Textbox, les lignes ne sont pas forcément séparées par des vbcrlf !!!

    Si dépassement de la largeur : gestion échappant à ce principe (pour l'affichage)

    Tu ferais à mon avis mieux d'utiliser une listbox pour celà !

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Hola, c'est complètement marteau!

    Je n'ai même pas le temps de répondre qu'il a déjà une autre réponse de posté.

    jmfmarques, est-ce qu'un listbox peut recevoir un "coller" de l'usager? Corrige moi si j'ai tors mais je ne crois pas.

  11. #11
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    avec un textbox1... tu peu t'inspier de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton1_Click()
     Dim tbLg() As String
     Dim st
     'lecture des lignes ..
     tbLg = Split(TextBox1, vbCrLf)
    'Afficher les diférentes lignes dans fenêtre exécito,
     For Each st In tbLg
      Debug.Print st
      Next
     End Sub
    tu n'as pas besoin d'utiliser tes API Message... pour acccéder au Textbox présent dans ton VBA...

  12. #12
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    Ce serait possible avec une dll mais lourd à gérer.

    Rien ne tempêche par contre d'associer une petite textbox "tremplin" à ta listbox, d'y faire ton coller et, en cliquant, de l'ajouter à ta listbox !

    Tu peux aussi utiliser une combobox (et là, le coller peut se faire)...

  13. #13
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    Split(TextBox1, vbCrLf)
    Voir ce que j'ai dit plu haut à propos des lignes affichées dans une textbox

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par jmfmarques
    Attention : dans une Textbox, les lignes ne sont pas forcément séparées par des vbcrlf !!!
    il sagit ici de ligne de "commandes" collés par l'opérateurs... celle-ci peuvent prendre plusieurs lignes du text box à l'affichage mais chacune d'elles sont toujours séparés de vbCrLF et peuvent dont être extraite par un Split...


  15. #15
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    oui !... si l'utilisateur pense à séparer systématiquement ses "coller" par un retour charriot ...

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par jmfmarques
    oui !... si l'utilisateur pense à séparer systématiquement ses "coller" par un retour charriot ...
    ? s'il ne fait pas de retour chariot ces textes seront sur la même ligne du text box...

  17. #17
    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
    Points : 4 674
    Points
    4 674
    Par défaut
    hé oui....
    mais une texbox "tremplin" de sasie est effacée à chaque rajout dans la
    Listbox
    une combo, quand à elle, est par définition textbox + listbox et est faite pour cela.
    bonne nuit..

Discussions similaires

  1. [VBA]Obtenir les noms des polices disponibles
    Par xp dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/03/2004, 15h39

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