OVH Cloud OVH Cloud

ôtez-moi d'un doute...

20 réponses
Avatar
sabatier
bonjour
je remarque qu'avec XL 2002 je n'ai pas le bouton "définir un nom" dans
le menu contextuel affiché par un click droit dans une cellule alors que
j'ai cela avec XL 97...
is that quite normal?
à vous lire...merci d'avance
jps

10 réponses

1 2
Avatar
Frédéric Sigonneau
Bonjour,

Cette commande est installée, ce me semble, par une macro complémentaire qu'il
ne m'étonnerait pas que vous ayiez installée en son temps (oublié apparemment) :

http://perso.wanadoo.fr/frederic.sigonneau/code/ToutFait/DefinirNom.zip

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


bonjour
je remarque qu'avec XL 2002 je n'ai pas le bouton "définir un nom" dans
le menu contextuel affiché par un click droit dans une cellule alors que
j'ai cela avec XL 97...
is that quite normal?
à vous lire...merci d'avance
jps


Avatar
Michel Gaboly
Merci Modeste, je vais regarder çà.


Bonjour,
personnellement j'ai trouvé sur AllApi.net
http://www.mentalis.org/index2.shtml

le fichier ApiGuide.exe (API-Guide 3.7 (+/- 2.20MB))
http://users.chello.be/cr27630/3.7/agsetup.exe
'------------------
API-Guide
(current version: 3.7.854, released on 2002/03/31)
Many people have asked us if they could download our API
list because they couldn't go online for a very long time
and it could take ages to download all the API examples.
Of course, this was very unpractical, since the list is
changing every month.
For these people we've created API-Guide! API-Guide is an
API database with all the API functions of our API list.

API-Guide has over 900 functions, all documented, and
explained with an example. Several functions also have a
dotNET equivalent and dotNET example code.
'------------------------------

@+

-----Message d'origine-----
Félicitations Michel ;))

Connais-tu une liste ou un site répertoriant les API
qu'il peut être intéressant

d'appeler depuis VBA, idéalement avec un bref descriptif
pour chacune ?


Ton code marche très bien. Sais-tu s'il est également
possible de faire varier

la hauteur de la liste ? Le document sur lequel je
travaille en ce moment comporte

environ 500, et la liste n'en affiche que 7 à la fois ;-
(((




Bisous à tous;
Voici comment ajuster la liste déroulante des noms du
classeurs sur le nom le plus


long:
Private Declare Function FindWindow Lib "user32"
Alias "FindWindowA" _


(ByVal lpClassName As String, ByVal lpWindowName As
String) As Long


Private Declare Function FindWindowEx Lib "user32"
Alias "FindWindowExA" _


(ByVal hWnd1 As Long, ByVal hWnd2 As Long _
, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowDC Lib "user32"
(ByVal hWnd As Long) As Long


Private Declare Function GetTextExtentPoint32
Lib "gdi32" Alias


"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal
cbString As Long _


, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32"
Alias "SendMessageA" _


(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam
As Long _


, ByVal lParam As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hWnd&, iName$, i%, hDC&, Txt As POINTAPI, MaxLen&
hWnd = FindWindow(vbNullString, Application.Caption)
hWnd = FindWindowEx(hWnd, ByVal 0&, "EXCEL;",
vbNullString)


hWnd = FindWindowEx(hWnd, ByVal 0&, "ComboBox",
vbNullString)


For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hWnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
SendMessage hWnd, &H160, MaxLen, 0
End Sub

MP

"Michel Gaboly" a écrit dans le
message de


news:
Bonjour,

Tabulation marche aussi ;-))

Plus sérieusement, c'est une fonctionnalité que je
n'utilise jamais pour 4



raisons :

1 - Je suis un dinosaure, et de mon point de vue, il
s'agit d'une option récente



dans
l'histoire d'Excel, qui n'apporte pas grand chose.
Quant à la liste qui permet



ensuite
de sélectionner une plage, elle est très peu
fonctionnelle à cause de l'absence



d'ascenseur
(j'ai couramment plusieurs centaines de noms dans un
classeur)




2 - J'ai plutôt tendance à privilégier les raccourcis
claviers : Ctrl + F3 pour



définir
un nom, F3 pour en coller un.

3 - J'utilise énormément de noms et pas seulement
pour les plages (constantes,



formules),
et je trouve + simple d'utiliser toujours la même
méthode pour définir un nom.




4 - D'autre part je trouve cette zone ridiculement
étroite : de nombreux noms ne



sont
lisibles qu'en partie. J'ignore s'il existe une façon
de l'élargir ;-((






merci denis...après plusieurs essais, j'ai compris
(le premier qui dit




"quand même", je le brûle) qu'il fallait faire
entrée après avoir écrit




le nom dans la zone ad hoc...
jps

michdenis a écrit:
Bonsoir JPS,

Oui c'est "normal".

Tu peux comme tu le sais utiliser la section
extrême gauche de la barre des





formules pour saisir désigner une plage
sélectionnée et lui attribuée un nom.


Salutations!


"sabatier" a écrit
dans le message de





news:
bonjour
je remarque qu'avec XL 2002 je n'ai pas le
bouton "définir un nom" dans





le menu contextuel affiché par un click droit
dans une cellule alors que





j'ai cela avec XL 97...
is that quite normal?
à vous lire...merci d'avance
jps





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com


.




--
Cordialement,

Michel Gaboly
http://www.gaboly.com






Avatar
Michel Pierron
Bonjour Michel;
Pour la hauteur, il en coûte quelques API supplémentaires; dans l'exemple
ci-dessous, j'ai choisi 10 lignes.

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String _
, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias
"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal cbString As Long _
, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long _
, ByVal lParam As Long) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long _
, lpRect As RECT) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long _
, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long _
, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Public Type POINTAPI
x As Long
y As Long
End Type

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hwnd&, iName$, i%, hDC&, Txt As POINTAPI, MaxLen&, lpRect As RECT
hwnd = FindWindow(vbNullString, Application.Caption)
hwnd = FindWindowEx(hwnd, ByVal 0&, "EXCEL;", vbNullString)
hwnd = FindWindowEx(hwnd, ByVal 0&, "ComboBox", vbNullString)
For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hwnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
' Ajuste la largeur
SendMessage hwnd, &H160, MaxLen, 0
' Nombre de ligne à afficher (10)
GetClientRect hwnd, lpRect
With lpRect
MoveWindow hwnd, .Left, .Top - 2, .Right - .Left, 10 * (.Bottom - .Top), 1
End With
End Sub

MP

Pour ce qui est de la définition des API, sans être exhaustif, c'est l'outil le
plus complet:
http://www.mentalis.org/agnet/apiguide.shtml
(du moins, c'est mon avis et je le partage; je dirais même plus, je suis
unanime...)


"Michel Gaboly" a écrit dans le message de
news:
Félicitations Michel ;))

Connais-tu une liste ou un site répertoriant les API qu'il peut être intéressant
d'appeler depuis VBA, idéalement avec un bref descriptif pour chacune ?

Ton code marche très bien. Sais-tu s'il est également possible de faire varier
la hauteur de la liste ? Le document sur lequel je travaille en ce moment
comporte

environ 500, et la liste n'en affiche que 7 à la fois ;-(((



Bisous à tous;
Voici comment ajuster la liste déroulante des noms du classeurs sur le nom le
plus


long:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long _
, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias
"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal cbString As Long _
, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long _
, ByVal lParam As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hWnd&, iName$, i%, hDC&, Txt As POINTAPI, MaxLen&
hWnd = FindWindow(vbNullString, Application.Caption)
hWnd = FindWindowEx(hWnd, ByVal 0&, "EXCEL;", vbNullString)
hWnd = FindWindowEx(hWnd, ByVal 0&, "ComboBox", vbNullString)
For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hWnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
SendMessage hWnd, &H160, MaxLen, 0
End Sub

MP

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Tabulation marche aussi ;-))

Plus sérieusement, c'est une fonctionnalité que je n'utilise jamais pour 4
raisons :


1 - Je suis un dinosaure, et de mon point de vue, il s'agit d'une option
récente



dans
l'histoire d'Excel, qui n'apporte pas grand chose. Quant à la liste qui
permet



ensuite
de sélectionner une plage, elle est très peu fonctionnelle à cause de
l'absence



d'ascenseur
(j'ai couramment plusieurs centaines de noms dans un classeur)

2 - J'ai plutôt tendance à privilégier les raccourcis claviers : Ctrl + F3
pour



définir
un nom, F3 pour en coller un.

3 - J'utilise énormément de noms et pas seulement pour les plages
(constantes,



formules),
et je trouve + simple d'utiliser toujours la même méthode pour définir un
nom.




4 - D'autre part je trouve cette zone ridiculement étroite : de nombreux
noms ne



sont
lisibles qu'en partie. J'ignore s'il existe une façon de l'élargir ;-((



merci denis...après plusieurs essais, j'ai compris (le premier qui dit
"quand même", je le brûle) qu'il fallait faire entrée après avoir écrit
le nom dans la zone ad hoc...
jps

michdenis a écrit:
Bonsoir JPS,

Oui c'est "normal".

Tu peux comme tu le sais utiliser la section extrême gauche de la barre
des





formules pour saisir désigner une plage
sélectionnée et lui attribuée un nom.


Salutations!


"sabatier" a écrit dans le message de
news:



bonjour
je remarque qu'avec XL 2002 je n'ai pas le bouton "définir un nom" dans
le menu contextuel affiché par un click droit dans une cellule alors que
j'ai cela avec XL 97...
is that quite normal?
à vous lire...merci d'avance
jps





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com








Avatar
Michel Pierron
Re Michel;
J'oubliais; bien sur, les paramètres du combobox sont définis par Excel; le combo
retrouvra donc ses dimensions d'origine à la prochaine ouverture d'excel. Il est
donc de bon ton d'appeler la procédure lors de l'ouverture du classeur.
MP

"Michel Gaboly" a écrit dans le message de
news:
Félicitations Michel ;))

Connais-tu une liste ou un site répertoriant les API qu'il peut être intéressant
d'appeler depuis VBA, idéalement avec un bref descriptif pour chacune ?

Ton code marche très bien. Sais-tu s'il est également possible de faire varier
la hauteur de la liste ? Le document sur lequel je travaille en ce moment
comporte

environ 500, et la liste n'en affiche que 7 à la fois ;-(((



Bisous à tous;
Voici comment ajuster la liste déroulante des noms du classeurs sur le nom le
plus


long:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long _
, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias
"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal cbString As Long _
, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long _
, ByVal lParam As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hWnd&, iName$, i%, hDC&, Txt As POINTAPI, MaxLen&
hWnd = FindWindow(vbNullString, Application.Caption)
hWnd = FindWindowEx(hWnd, ByVal 0&, "EXCEL;", vbNullString)
hWnd = FindWindowEx(hWnd, ByVal 0&, "ComboBox", vbNullString)
For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hWnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
SendMessage hWnd, &H160, MaxLen, 0
End Sub

MP

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Tabulation marche aussi ;-))

Plus sérieusement, c'est une fonctionnalité que je n'utilise jamais pour 4
raisons :


1 - Je suis un dinosaure, et de mon point de vue, il s'agit d'une option
récente



dans
l'histoire d'Excel, qui n'apporte pas grand chose. Quant à la liste qui
permet



ensuite
de sélectionner une plage, elle est très peu fonctionnelle à cause de
l'absence



d'ascenseur
(j'ai couramment plusieurs centaines de noms dans un classeur)

2 - J'ai plutôt tendance à privilégier les raccourcis claviers : Ctrl + F3
pour



définir
un nom, F3 pour en coller un.

3 - J'utilise énormément de noms et pas seulement pour les plages
(constantes,



formules),
et je trouve + simple d'utiliser toujours la même méthode pour définir un
nom.




4 - D'autre part je trouve cette zone ridiculement étroite : de nombreux
noms ne



sont
lisibles qu'en partie. J'ignore s'il existe une façon de l'élargir ;-((



merci denis...après plusieurs essais, j'ai compris (le premier qui dit
"quand même", je le brûle) qu'il fallait faire entrée après avoir écrit
le nom dans la zone ad hoc...
jps

michdenis a écrit:
Bonsoir JPS,

Oui c'est "normal".

Tu peux comme tu le sais utiliser la section extrême gauche de la barre
des





formules pour saisir désigner une plage
sélectionnée et lui attribuée un nom.


Salutations!


"sabatier" a écrit dans le message de
news:



bonjour
je remarque qu'avec XL 2002 je n'ai pas le bouton "définir un nom" dans
le menu contextuel affiché par un click droit dans une cellule alors que
j'ai cela avec XL 97...
is that quite normal?
à vous lire...merci d'avance
jps





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com








Avatar
Modeste
;-)))
impeccable !!!!
hop archivé....

[Hs]:
tu avais commis il y a quelques temps Magic-II.xls
je viens de lui faire un petit frere ....
(en 3 clic seulement) ;-)))
comment avais-tu récupéré les images ?????
on peut les trouver dans cards32.dll,
http://www.codeguru.com/vb/articles/2360.shtml

mais comment utiliser ça via excel(VBA) ???
il y a une affaire de Hwnd que je n'arrive pas à résoudre.

;-)))
@+
-----Message d'origine-----
Bonjour Michel;
Pour la hauteur, il en coûte quelques API
supplémentaires; dans l'exemple

ci-dessous, j'ai choisi 10 lignes.

Private Declare Function FindWindow Lib "user32"
Alias "FindWindowA" _

(ByVal lpClassName As String, ByVal lpWindowName As
String) As Long

Private Declare Function FindWindowEx Lib "user32"
Alias "FindWindowExA" _

(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1
As String _

, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal
hwnd As Long) As Long

Private Declare Function GetTextExtentPoint32 Lib "gdi32"
Alias

"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal cbString
As Long _

, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32"
Alias "SendMessageA" _

(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As
Long _

, ByVal lParam As Long) As Long
Private Declare Function GetClientRect Lib "user32"
(ByVal hwnd As Long _

, lpRect As RECT) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal
hwnd As Long _

, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long _
, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Public Type POINTAPI
x As Long
y As Long
End Type

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hwnd&, iName$, i%, hDC&, Txt As POINTAPI, MaxLen&,
lpRect As RECT

hwnd = FindWindow(vbNullString, Application.Caption)
hwnd = FindWindowEx(hwnd, ByVal 0&, "EXCEL;",
vbNullString)

hwnd = FindWindowEx(hwnd, ByVal 0&, "ComboBox",
vbNullString)

For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hwnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
' Ajuste la largeur
SendMessage hwnd, &H160, MaxLen, 0
' Nombre de ligne à afficher (10)
GetClientRect hwnd, lpRect
With lpRect
MoveWindow hwnd, .Left, .Top - 2, .Right - .Left, 10
* (.Bottom - .Top), 1

End With
End Sub

MP

Pour ce qui est de la définition des API, sans être
exhaustif, c'est l'outil le

plus complet:
http://www.mentalis.org/agnet/apiguide.shtml
(du moins, c'est mon avis et je le partage; je dirais
même plus, je suis

unanime...)


"Michel Gaboly" a écrit dans le
message de

news:
Félicitations Michel ;))

Connais-tu une liste ou un site répertoriant les API
qu'il peut être intéressant


d'appeler depuis VBA, idéalement avec un bref
descriptif pour chacune ?



Ton code marche très bien. Sais-tu s'il est également
possible de faire varier


la hauteur de la liste ? Le document sur lequel je
travaille en ce moment


comporte
environ 500, et la liste n'en affiche que 7 à la fois ;-
(((





Bisous à tous;
Voici comment ajuster la liste déroulante des noms du
classeurs sur le nom le



plus
long:
Private Declare Function FindWindow Lib "user32"
Alias "FindWindowA" _



(ByVal lpClassName As String, ByVal lpWindowName As
String) As Long



Private Declare Function FindWindowEx Lib "user32"
Alias "FindWindowExA" _



(ByVal hWnd1 As Long, ByVal hWnd2 As Long _
, ByVal lpsz1 As String, ByVal lpsz2 As String) As
Long



Private Declare Function GetWindowDC Lib "user32"
(ByVal hWnd As Long) As Long



Private Declare Function GetTextExtentPoint32
Lib "gdi32" Alias



"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal
cbString As Long _



, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32"
Alias "SendMessageA" _



(ByVal hWnd As Long, ByVal wMsg As Long, ByVal
wParam As Long _



, ByVal lParam As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hWnd&, iName$, i%, hDC&, Txt As POINTAPI,
MaxLen&



hWnd = FindWindow(vbNullString, Application.Caption)
hWnd = FindWindowEx(hWnd, ByVal 0&, "EXCEL;",
vbNullString)



hWnd = FindWindowEx(hWnd, ByVal 0&, "ComboBox",
vbNullString)



For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hWnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
SendMessage hWnd, &H160, MaxLen, 0
End Sub

MP

"Michel Gaboly" a écrit dans
le message de



news:
Bonjour,

Tabulation marche aussi ;-))

Plus sérieusement, c'est une fonctionnalité que je
n'utilise jamais pour 4




raisons :

1 - Je suis un dinosaure, et de mon point de vue,
il s'agit d'une option




récente
dans
l'histoire d'Excel, qui n'apporte pas grand chose.
Quant à la liste qui




permet
ensuite
de sélectionner une plage, elle est très peu
fonctionnelle à cause de




l'absence
d'ascenseur
(j'ai couramment plusieurs centaines de noms dans
un classeur)





2 - J'ai plutôt tendance à privilégier les
raccourcis claviers : Ctrl + F3




pour
définir
un nom, F3 pour en coller un.

3 - J'utilise énormément de noms et pas seulement
pour les plages




(constantes,
formules),
et je trouve + simple d'utiliser toujours la même
méthode pour définir un




nom.

4 - D'autre part je trouve cette zone ridiculement
étroite : de nombreux




noms ne
sont
lisibles qu'en partie. J'ignore s'il existe une
façon de l'élargir ;-((







merci denis...après plusieurs essais, j'ai
compris (le premier qui dit





"quand même", je le brûle) qu'il fallait faire
entrée après avoir écrit





le nom dans la zone ad hoc...
jps

michdenis a écrit:
Bonsoir JPS,

Oui c'est "normal".

Tu peux comme tu le sais utiliser la section
extrême gauche de la barre






des
formules pour saisir désigner une plage
sélectionnée et lui attribuée un nom.


Salutations!


"sabatier" a écrit
dans le message de






news:
bonjour
je remarque qu'avec XL 2002 je n'ai pas le
bouton "définir un nom" dans






le menu contextuel affiché par un click droit
dans une cellule alors que






j'ai cela avec XL 97...
is that quite normal?
à vous lire...merci d'avance
jps





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





.








Avatar
sabatier
c'est bien ce que j'ai longtemps pensé, frédéric, mais impossible de
retrouver cette .xla dans la bécane où j'ai XL 97 ; grâce au lien
ci-dessous, je vais voir comment s'appelle cette marco complémentaire
qui, selon moi, n'apparaît pas dans la liste sous Outils....
en tous cas, ça me conforte dans mon idée et je vais pouvoir installer
cette .xla dans XL 2002...
et merci encore, même si cet "oublié apparemment" a un petit côté "c'est
pas de ma faute si alzheimer se télécharge doucement"....
jps

Frédéric Sigonneau a écrit:
Bonjour,

Cette commande est installée, ce me semble, par une macro complémentaire qu'il
ne m'étonnerait pas que vous ayiez installée en son temps (oublié apparemment) :

http://perso.wanadoo.fr/frederic.sigonneau/code/ToutFait/DefinirNom.zip

FS


Avatar
Michel Gaboly
Merci encore, Michel

Je vais essayer avec une quarantaine de lignes.


Bonjour Michel;
Pour la hauteur, il en coûte quelques API supplémentaires; dans l'exemple
ci-dessous, j'ai choisi 10 lignes.

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String _
, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias
"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal cbString As Long _
, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long _
, ByVal lParam As Long) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long _
, lpRect As RECT) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long _
, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long _
, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Public Type POINTAPI
x As Long
y As Long
End Type

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hwnd&, iName$, i%, hDC&, Txt As POINTAPI, MaxLen&, lpRect As RECT
hwnd = FindWindow(vbNullString, Application.Caption)
hwnd = FindWindowEx(hwnd, ByVal 0&, "EXCEL;", vbNullString)
hwnd = FindWindowEx(hwnd, ByVal 0&, "ComboBox", vbNullString)
For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hwnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
' Ajuste la largeur
SendMessage hwnd, &H160, MaxLen, 0
' Nombre de ligne à afficher (10)
GetClientRect hwnd, lpRect
With lpRect
MoveWindow hwnd, .Left, .Top - 2, .Right - .Left, 10 * (.Bottom - .Top), 1
End With
End Sub

MP

Pour ce qui est de la définition des API, sans être exhaustif, c'est l'outil le
plus complet:
http://www.mentalis.org/agnet/apiguide.shtml
(du moins, c'est mon avis et je le partage; je dirais même plus, je suis
unanime...)

"Michel Gaboly" a écrit dans le message de
news:
Félicitations Michel ;))

Connais-tu une liste ou un site répertoriant les API qu'il peut être intéressant
d'appeler depuis VBA, idéalement avec un bref descriptif pour chacune ?

Ton code marche très bien. Sais-tu s'il est également possible de faire varier
la hauteur de la liste ? Le document sur lequel je travaille en ce moment
comporte

environ 500, et la liste n'en affiche que 7 à la fois ;-(((



Bisous à tous;
Voici comment ajuster la liste déroulante des noms du classeurs sur le nom le
plus


long:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long _
, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias
"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal cbString As Long _
, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long _
, ByVal lParam As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hWnd&, iName$, i%, hDC&, Txt As POINTAPI, MaxLen&
hWnd = FindWindow(vbNullString, Application.Caption)
hWnd = FindWindowEx(hWnd, ByVal 0&, "EXCEL;", vbNullString)
hWnd = FindWindowEx(hWnd, ByVal 0&, "ComboBox", vbNullString)
For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hWnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
SendMessage hWnd, &H160, MaxLen, 0
End Sub

MP

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Tabulation marche aussi ;-))

Plus sérieusement, c'est une fonctionnalité que je n'utilise jamais pour 4
raisons :


1 - Je suis un dinosaure, et de mon point de vue, il s'agit d'une option
récente



dans
l'histoire d'Excel, qui n'apporte pas grand chose. Quant à la liste qui
permet



ensuite
de sélectionner une plage, elle est très peu fonctionnelle à cause de
l'absence



d'ascenseur
(j'ai couramment plusieurs centaines de noms dans un classeur)

2 - J'ai plutôt tendance à privilégier les raccourcis claviers : Ctrl + F3
pour



définir
un nom, F3 pour en coller un.

3 - J'utilise énormément de noms et pas seulement pour les plages
(constantes,



formules),
et je trouve + simple d'utiliser toujours la même méthode pour définir un
nom.




4 - D'autre part je trouve cette zone ridiculement étroite : de nombreux
noms ne



sont
lisibles qu'en partie. J'ignore s'il existe une façon de l'élargir ;-((



merci denis...après plusieurs essais, j'ai compris (le premier qui dit
"quand même", je le brûle) qu'il fallait faire entrée après avoir écrit
le nom dans la zone ad hoc...
jps

michdenis a écrit:
Bonsoir JPS,

Oui c'est "normal".

Tu peux comme tu le sais utiliser la section extrême gauche de la barre
des





formules pour saisir désigner une plage
sélectionnée et lui attribuée un nom.


Salutations!


"sabatier" a écrit dans le message de
news:



bonjour
je remarque qu'avec XL 2002 je n'ai pas le bouton "définir un nom" dans
le menu contextuel affiché par un click droit dans une cellule alors que
j'ai cela avec XL 97...
is that quite normal?
à vous lire...merci d'avance
jps





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com






Avatar
Michel Gaboly
Re,

Je m'en doute ;-))

Je vais écrire une procédure qui permet d'ajouter le code nécessaire au module
ThisWorkbook d'un classeur, que ce module soit vide ou non.

C'est la méthode la + pratique, il me semble.



Re Michel;
J'oubliais; bien sur, les paramètres du combobox sont définis par Excel; le combo
retrouvra donc ses dimensions d'origine à la prochaine ouverture d'excel. Il est
donc de bon ton d'appeler la procédure lors de l'ouverture du classeur.
MP

"Michel Gaboly" a écrit dans le message de
news:
Félicitations Michel ;))

Connais-tu une liste ou un site répertoriant les API qu'il peut être intéressant
d'appeler depuis VBA, idéalement avec un bref descriptif pour chacune ?

Ton code marche très bien. Sais-tu s'il est également possible de faire varier
la hauteur de la liste ? Le document sur lequel je travaille en ce moment
comporte

environ 500, et la liste n'en affiche que 7 à la fois ;-(((



Bisous à tous;
Voici comment ajuster la liste déroulante des noms du classeurs sur le nom le
plus


long:
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long _
, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias
"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal cbString As Long _
, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long _
, ByVal lParam As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hWnd&, iName$, i%, hDC&, Txt As POINTAPI, MaxLen&
hWnd = FindWindow(vbNullString, Application.Caption)
hWnd = FindWindowEx(hWnd, ByVal 0&, "EXCEL;", vbNullString)
hWnd = FindWindowEx(hWnd, ByVal 0&, "ComboBox", vbNullString)
For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hWnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
SendMessage hWnd, &H160, MaxLen, 0
End Sub

MP

"Michel Gaboly" a écrit dans le message de
news:
Bonjour,

Tabulation marche aussi ;-))

Plus sérieusement, c'est une fonctionnalité que je n'utilise jamais pour 4
raisons :


1 - Je suis un dinosaure, et de mon point de vue, il s'agit d'une option
récente



dans
l'histoire d'Excel, qui n'apporte pas grand chose. Quant à la liste qui
permet



ensuite
de sélectionner une plage, elle est très peu fonctionnelle à cause de
l'absence



d'ascenseur
(j'ai couramment plusieurs centaines de noms dans un classeur)

2 - J'ai plutôt tendance à privilégier les raccourcis claviers : Ctrl + F3
pour



définir
un nom, F3 pour en coller un.

3 - J'utilise énormément de noms et pas seulement pour les plages
(constantes,



formules),
et je trouve + simple d'utiliser toujours la même méthode pour définir un
nom.




4 - D'autre part je trouve cette zone ridiculement étroite : de nombreux
noms ne



sont
lisibles qu'en partie. J'ignore s'il existe une façon de l'élargir ;-((



merci denis...après plusieurs essais, j'ai compris (le premier qui dit
"quand même", je le brûle) qu'il fallait faire entrée après avoir écrit
le nom dans la zone ad hoc...
jps

michdenis a écrit:
Bonsoir JPS,

Oui c'est "normal".

Tu peux comme tu le sais utiliser la section extrême gauche de la barre
des





formules pour saisir désigner une plage
sélectionnée et lui attribuée un nom.


Salutations!


"sabatier" a écrit dans le message de
news:



bonjour
je remarque qu'avec XL 2002 je n'ai pas le bouton "définir un nom" dans
le menu contextuel affiché par un click droit dans une cellule alors que
j'ai cela avec XL 97...
is that quite normal?
à vous lire...merci d'avance
jps





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com






Avatar
Michel Pierron
Bonjour Modeste;
Quelle est ta bonne adresse pour que je réponde en bal perso ?
MP

"Modeste" a écrit dans le message de
news:1290701c3f708$af494700$
;-)))
impeccable !!!!
hop archivé....

[Hs]:
tu avais commis il y a quelques temps Magic-II.xls
je viens de lui faire un petit frere ....
(en 3 clic seulement) ;-)))
comment avais-tu récupéré les images ?????
on peut les trouver dans cards32.dll,
http://www.codeguru.com/vb/articles/2360.shtml

mais comment utiliser ça via excel(VBA) ???
il y a une affaire de Hwnd que je n'arrive pas à résoudre.

;-)))
@+
-----Message d'origine-----
Bonjour Michel;
Pour la hauteur, il en coûte quelques API
supplémentaires; dans l'exemple

ci-dessous, j'ai choisi 10 lignes.

Private Declare Function FindWindow Lib "user32"
Alias "FindWindowA" _

(ByVal lpClassName As String, ByVal lpWindowName As
String) As Long

Private Declare Function FindWindowEx Lib "user32"
Alias "FindWindowExA" _

(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1
As String _

, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal
hwnd As Long) As Long

Private Declare Function GetTextExtentPoint32 Lib "gdi32"
Alias

"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal cbString
As Long _

, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32"
Alias "SendMessageA" _

(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As
Long _

, ByVal lParam As Long) As Long
Private Declare Function GetClientRect Lib "user32"
(ByVal hwnd As Long _

, lpRect As RECT) As Long
Private Declare Function MoveWindow Lib "user32" (ByVal
hwnd As Long _

, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long _
, ByVal nHeight As Long, ByVal bRepaint As Long) As Long

Public Type POINTAPI
x As Long
y As Long
End Type

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hwnd&, iName$, i%, hDC&, Txt As POINTAPI, MaxLen&,
lpRect As RECT

hwnd = FindWindow(vbNullString, Application.Caption)
hwnd = FindWindowEx(hwnd, ByVal 0&, "EXCEL;",
vbNullString)

hwnd = FindWindowEx(hwnd, ByVal 0&, "ComboBox",
vbNullString)

For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hwnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
' Ajuste la largeur
SendMessage hwnd, &H160, MaxLen, 0
' Nombre de ligne à afficher (10)
GetClientRect hwnd, lpRect
With lpRect
MoveWindow hwnd, .Left, .Top - 2, .Right - .Left, 10
* (.Bottom - .Top), 1

End With
End Sub

MP

Pour ce qui est de la définition des API, sans être
exhaustif, c'est l'outil le

plus complet:
http://www.mentalis.org/agnet/apiguide.shtml
(du moins, c'est mon avis et je le partage; je dirais
même plus, je suis

unanime...)


"Michel Gaboly" a écrit dans le
message de

news:
Félicitations Michel ;))

Connais-tu une liste ou un site répertoriant les API
qu'il peut être intéressant


d'appeler depuis VBA, idéalement avec un bref
descriptif pour chacune ?



Ton code marche très bien. Sais-tu s'il est également
possible de faire varier


la hauteur de la liste ? Le document sur lequel je
travaille en ce moment


comporte
environ 500, et la liste n'en affiche que 7 à la fois ;-
(((





Bisous à tous;
Voici comment ajuster la liste déroulante des noms du
classeurs sur le nom le



plus
long:
Private Declare Function FindWindow Lib "user32"
Alias "FindWindowA" _



(ByVal lpClassName As String, ByVal lpWindowName As
String) As Long



Private Declare Function FindWindowEx Lib "user32"
Alias "FindWindowExA" _



(ByVal hWnd1 As Long, ByVal hWnd2 As Long _
, ByVal lpsz1 As String, ByVal lpsz2 As String) As
Long



Private Declare Function GetWindowDC Lib "user32"
(ByVal hWnd As Long) As Long



Private Declare Function GetTextExtentPoint32
Lib "gdi32" Alias



"GetTextExtentPoint32A" _
(ByVal hDC As Long, ByVal lpsz As String, ByVal
cbString As Long _



, lpSize As POINTAPI) As Long
Private Declare Function SendMessage Lib "user32"
Alias "SendMessageA" _



(ByVal hWnd As Long, ByVal wMsg As Long, ByVal
wParam As Long _



, ByVal lParam As Long) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Sub AdjustComboNames()
If ActiveWorkbook.Names.Count = 0 Then Exit Sub
Dim hWnd&, iName$, i%, hDC&, Txt As POINTAPI,
MaxLen&



hWnd = FindWindow(vbNullString, Application.Caption)
hWnd = FindWindowEx(hWnd, ByVal 0&, "EXCEL;",
vbNullString)



hWnd = FindWindowEx(hWnd, ByVal 0&, "ComboBox",
vbNullString)



For i = 1 To ActiveWorkbook.Names.Count
hDC = GetWindowDC(hWnd)
iName = ActiveWorkbook.Names(i).Name
GetTextExtentPoint32 hDC, iName, Len(iName), Txt
If Txt.x > MaxLen Then MaxLen = Txt.x
Next i
SendMessage hWnd, &H160, MaxLen, 0
End Sub

MP

"Michel Gaboly" a écrit dans
le message de



news:
Bonjour,

Tabulation marche aussi ;-))

Plus sérieusement, c'est une fonctionnalité que je
n'utilise jamais pour 4




raisons :

1 - Je suis un dinosaure, et de mon point de vue,
il s'agit d'une option




récente
dans
l'histoire d'Excel, qui n'apporte pas grand chose.
Quant à la liste qui




permet
ensuite
de sélectionner une plage, elle est très peu
fonctionnelle à cause de




l'absence
d'ascenseur
(j'ai couramment plusieurs centaines de noms dans
un classeur)





2 - J'ai plutôt tendance à privilégier les
raccourcis claviers : Ctrl + F3




pour
définir
un nom, F3 pour en coller un.

3 - J'utilise énormément de noms et pas seulement
pour les plages




(constantes,
formules),
et je trouve + simple d'utiliser toujours la même
méthode pour définir un




nom.

4 - D'autre part je trouve cette zone ridiculement
étroite : de nombreux




noms ne
sont
lisibles qu'en partie. J'ignore s'il existe une
façon de l'élargir ;-((







merci denis...après plusieurs essais, j'ai
compris (le premier qui dit





"quand même", je le brûle) qu'il fallait faire
entrée après avoir écrit





le nom dans la zone ad hoc...
jps

michdenis a écrit:
Bonsoir JPS,

Oui c'est "normal".

Tu peux comme tu le sais utiliser la section
extrême gauche de la barre






des
formules pour saisir désigner une plage
sélectionnée et lui attribuée un nom.


Salutations!


"sabatier" a écrit
dans le message de






news:
bonjour
je remarque qu'avec XL 2002 je n'ai pas le
bouton "définir un nom" dans






le menu contextuel affiché par un click droit
dans une cellule alors que






j'ai cela avec XL 97...
is that quite normal?
à vous lire...merci d'avance
jps





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com





.








Avatar
Alain CROS
Bonjour.

Cette question et les différentes réponses m'ayant permis de regarder d'un peu plus prés le fonctionnement des combobox.
Je vous livre ce à quoi je suis arrivé qui, il me semble, permet de régler un peu plus finement les dimensions de la liste des noms.

Pour les références sur les API, c'est là.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/functions_in_alphabetical_order.asp

Private Declare Function FindWindowEx& Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1&, ByVal hWnd2&, ByVal lpsz1$, ByVal lpsz2$)

Private Declare Function GetWindowDC& Lib "user32" _
(ByVal hwnd&)

Private Declare Function GetTextExtentPoint32& Lib "gdi32" Alias "GetTextExtentPoint32A" _
(ByVal hDC&, ByVal lpsz$, ByVal cbString&, lpSize As POINTAPI)

Private Declare Function SendMessage& Lib "user32" Alias "SendMessageA" _
(ByVal hwnd&, ByVal wMsg&, ByVal wParam&, lParam&)

Private Declare Function ReleaseDC& Lib "user32.dll" ( _
ByVal hwnd&, ByVal hDC&)

Private Declare Function GetComboBoxInfo& Lib "user32" _
(ByVal hwndCombo&, pcbi As COMBOBOXINFO)

Private Declare Function GetClientRect& Lib "user32" _
(ByVal hwnd&, lpRect As RECT)

Private Declare Function GetWindowRect& Lib "user32" _
(ByVal hwnd&, lpRect As RECT)

Private Declare Function MoveWindow& Lib "user32" _
(ByVal hwnd&, ByVal x&, ByVal y&, ByVal nWidth&, ByVal nHeight&, ByVal bRepaint&)

Private Type POINTAPI
x As Long
y As Long
End Type

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Type COMBOBOXINFO
cbSize As Long
rcItem As RECT
rcButton As RECT
stateButton As Long
hwndCombo As Long
hwndItem As Long
hwndList As Long
End Type

Sub Ajust()
Dim NbLg$
NbLg = InputBox("Nombre de lignes", "Fixer le nombre de lignes", 15&)
If IsNumeric(NbLg) Then MsgBox ("Nouveau nombre de lignes = " & _
AjustComboNoms(CLng(NbLg)))
End Sub

Function AjustComboNoms&(NbLigne&)
Const CB_GETITEMHEIGHT& = &H154, CB_SETDROPPEDWIDTH& = &H160
Dim CBHwnd&, J&, Ret&, LeNom$, hDC&, CBPoint As POINTAPI
Dim NbNom&, Rg As Range, TxtNb&, CBItHeight&
Dim CBInfo As COMBOBOXINFO, CBLRect As RECT, CBNbItem&
NbNom = Names.Count
If NbNom = 0& Then Exit Function
CBHwnd = FindWindowEx(FindWindowEx(FindWindowEx(0&, 0&, _
"XLMAIN", Application.Caption), 0&, "EXCEL;", _
vbNullString), 0&, "ComboBox", vbNullString)
CBItHeight = SendMessage(CBHwnd, CB_GETITEMHEIGHT, 0&, 0&)
hDC = GetWindowDC(CBHwnd)
For J = 1 To NbNom
If Names(J).Visible = True Then
On Error Resume Next
Set Rg = Range(Names(J).RefersToRange.Address)
If Err.Number = 0& Then
On Error GoTo 0
LeNom = Names(J).Name
Ret = Len(LeNom)
GetTextExtentPoint32 hDC, LeNom, Ret, CBPoint
If CBPoint.x > TxtNb Then TxtNb = CBPoint.x
Set Rg = Nothing
End If
End If
Next J
SendMessage CBHwnd, CB_SETDROPPEDWIDTH, CLng(TxtNb * _
CBItHeight / CBPoint.y), 0&
ReleaseDC CBHwnd, hDC
CBInfo.cbSize = Len(CBInfo)
GetComboBoxInfo CBHwnd, CBInfo
GetClientRect CBInfo.hwndList, CBLRect
CBNbItem = CBLRect.Bottom / CBItHeight
GetWindowRect CBInfo.hwndList, CBLRect
If NbLigne < 7& Then NbLigne = 7&
With CBLRect
MoveWindow CBInfo.hwndList, .Left, .Top, .Right - .Left, _
.Bottom - .Top + ((NbLigne - CBNbItem) * CBItHeight), 1&
End With
GetClientRect CBInfo.hwndList, CBLRect
AjustComboNoms = CBLRect.Bottom / CBItHeight
End Function'AC

Alain CROS.


"Michel Gaboly" a écrit dans le message de news:
Bonjour,

4 - D'autre part je trouve cette zone ridiculement étroite : de nombreux noms ne sont
lisibles qu'en partie. J'ignore s'il existe une façon de l'élargir ;-((



1 2