Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/03/2006, 18h22   #1
Invité de passage
 
Inscription : février 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 22
Points : 2
Points : 2
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 :
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.
LiNuXaDDiKt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 18h33   #2
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
Ca vaut peut-être le coup de regarder la propriété hWnd dans l'aide en ligne ...
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 18h44   #3
Invité de passage
 
Inscription : février 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 22
Points : 2
Points : 2
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é).
LiNuXaDDiKt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 18h57   #4
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
tu nous as pas dit quel été le but de ce code ...?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 19h04   #5
Invité de passage
 
Inscription : février 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 22
Points : 2
Points : 2
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.
LiNuXaDDiKt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 19h06   #6
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
Citation:
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...
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 19h06   #7
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
mais ce text box il est dans ton application VBA ?
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 19h08   #8
Invité de passage
 
Inscription : février 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 22
Points : 2
Points : 2
Oui bbil ce textbox est dans mon application vba
LiNuXaDDiKt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 19h09   #9
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
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à !
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 19h14   #10
Invité de passage
 
Inscription : février 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 22
Points : 2
Points : 2
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.
LiNuXaDDiKt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 19h15   #11
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
avec un textbox1... tu peu t'inspier de :

Code :
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...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 19h17   #12
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
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)...
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 19h18   #13
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
Citation:
Split(TextBox1, vbCrLf)
Voir ce que j'ai dit plu haut à propos des lignes affichées dans une textbox
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 21h11   #14
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
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...

bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 21h23   #15
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
oui !... si l'utilisateur pense à séparer systématiquement ses "coller" par un retour charriot ...
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 21h26   #16
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 849
Points : 16 849
Envoyer un message via Skype™ à bbil
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...
bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2006, 21h52   #17
Inactif
 
Avatar de jmfmarques
 
Inscription : décembre 2005
Messages : 3 784
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 3 784
Points : 4 125
Points : 4 125
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..
jmfmarques est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h26.


 
 
 
 
Partenaires

Hébergement Web