OVH Cloud OVH Cloud

Souris suiveuse

41 réponses
Avatar
milloche
Bonne fête les amoureux
J'utilise pour recopier sur Excel, au clavier, des données non copiables d'un
autre programme (Adobe par exemple) une méthode que je dirais géniale (;o))))
Par macro, je réduis ma fenêtre au 1/4 de l'écran et la place là ou elle ne gêne
pas : en haut à droite bien souvent. Mais parfois, c'est là que sont les
données.
Avec une variable physique (une case), j'ai donc prévu à chaque nouveau clic de
déplacer cette fenêtre et de lui faire faire le tour de l'écran en 4 clics.
Comment faire pour que le pointeur suive l'écran (et donc le bouton dessin) car
pour l'instant, il se retrouve à chaque clic dans le vide.
C'est du cours après moi que j't'attrappe.
J'ai tenté Application.mouse.top=x, Application.pointer.top=x ......
Il me manque le juste mot et l'aide n'aide pas, vu que je ne connais pas le mot.
Cordialement.

10 réponses

1 2 3 4 5
Avatar
michdenis
Le langage VBA ne possède aucun outil qui peut déplacer
le curseur à ma connaissance. C'est pourquoi, il faut utiliser
un petit API pour le déplacer à un point sur l'écran
le X et le Y représente les coordonnées en pixels d'un
point sur l'écran.
Cependant, pour déterminer ces 2 valeurs, tu peux avoir recours
aux propriétés "Top", "Height", "Width", "Left" des objets que tu
as inséré dans ta feuille ou les dimensions de l'application elle-même.
Lorsque tu as déterminé le point â l'aide de ces propriétés, tu utilise
la fonction de conversion de points en pixels pour faire comprendre
à l'API où tu veux qu'il place le curseur.

Si tu prenais le temps d'expliquer ce que tu veux faire et pourquoi tu
dois déplacer le curseur, il y a peut être d'autres moyens d'arriver au
même résultat.



"milloche" a écrit dans le message de groupe de discussion :

Bonjour
Je ne m'en sors pas. Je vais donc reposer ma question au plus simple.
Existe t'il une macro de module capable de positionner le pointeur de la souris
là ou je veux (avec Top et Left, comme un dessin) ou par autre moyen (X et Y)
Je vous ai auparavant sans doute embrouillé avec toutes mes explications
superflues
Cordialement..



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

Bonjour Modeste
La publicité n'est pas interdite sur ce forum ?
Ton code est pas mal (même bien) mais fait quand même un peu usine à gaz.
Rien à voir avec mon ci-joint. Que tu as vu je suppose.
Figure toi que j'en suis fier (pour te faire une idée de mon niveau en VB)
Etant encore dans la catégorie amateurs, poids léger, je tape dans la
simplicité.
Mais je garde ton travail sous le coude. Pour les longues soirées d'hiver.
J'ai vu, ça marche mais il faut que je comprenne tout et pourquoi ça marche !
Cordialement.
JMM

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

Bonsour® milloche

Bonjour Denis
Tu dois te demander pourquoi je m'entête à créer des boutons avec la
barre d'outils "dessin" : c'est juste esthétique. Comme sur une
machine-outil. Quand une fonction est active, le bouton est vert ou
rouge suivant le cas. Quand elle est inactive, la macro le remet en
gris
Et ces couleurs sont en dégradé comme si le bouton était bombé.
C'est joli et c'est çà la raison.
Impossible avec les autres barres.
Et un bouton rond n'est pas prévu non plus. Moi, j'en ai.



;o))) Clearasil à ton age ????

Sub Creer_Boutons()
Dim cell As Range
Dim BoutonCourant As Shape
'----hauteur de ligne=hauteur du bouton
Selection.EntireRow.RowHeight = 36
'----creer un bouton dans chaque cellule de la selection
For Each cell In Selection
With cell
' mettre en commentaire selon besoins
' ------Bouton rectangulaire avec biseaux
'Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeBevel, .Left, .Top,
.Width, .Height)
'-------Bouton Oval
Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeOval, .Left, .Top,
.Width, .Height)
With BoutonCourant
.Fill.ForeColor.SchemeColor = 10 ' rouge
.Fill.BackColor.SchemeColor = 11 ' vert
.Line.ForeColor.SchemeColor = 22 ' gris
.OLEFormat.Object.Caption = "O"
.OnAction = "Bouton_Click"
.Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With '(caption)
End With '(bouton)
.Value = False '---- la cellule reçoit FAUX=bouton Rouge, VRAI=Bouton Vert
End With '(cellule)
DoEvents
Next
[a1].Select
End Sub
Sub Bouton_click()
Dim BoutonCourant As Shape
Set BoutonCourant = ActiveSheet.Shapes(Application.Caller)
With BoutonCourant
'---- à modifier si l'on souhaite un comportement Tri-state !!!!!!
'---- la cellule reçoit FAUX = bouton Rouge VRAI=Bouton Vert
Range(.TopLeftCell.Address) = (.Fill.ForeColor.SchemeColor = 10)
'---- la couleur du bouton est modifié ( ici couleur Rouge ou Vert)
.Fill.ForeColor.SchemeColor = IIf(.Fill.ForeColor.SchemeColor = 10, 11, 10)
'---- le texte du bouton est modifié ( ici texte alternatif "O" ou "I")
.OLEFormat.Object.Caption = IIf(.Fill.ForeColor.SchemeColor = 10, "O", "I")
End With
End Sub





Avatar
milloche
J'ai fait de mon mieux.
Cordialement
JMM

http://www.cijoint.fr/cjlink.php?file=cj200902/cijMo0SEby.xls
Cordialement
"michdenis" a écrit dans le message de news:

Le langage VBA ne possède aucun outil qui peut déplacer
le curseur à ma connaissance. C'est pourquoi, il faut utiliser
un petit API pour le déplacer à un point sur l'écran
le X et le Y représente les coordonnées en pixels d'un
point sur l'écran.
Cependant, pour déterminer ces 2 valeurs, tu peux avoir recours
aux propriétés "Top", "Height", "Width", "Left" des objets que tu
as inséré dans ta feuille ou les dimensions de l'application elle-même.
Lorsque tu as déterminé le point â l'aide de ces propriétés, tu utilise
la fonction de conversion de points en pixels pour faire comprendre
à l'API où tu veux qu'il place le curseur.

Si tu prenais le temps d'expliquer ce que tu veux faire et pourquoi tu
dois déplacer le curseur, il y a peut être d'autres moyens d'arriver au
même résultat.



"milloche" a écrit dans le message de groupe de
discussion :

Bonjour
Je ne m'en sors pas. Je vais donc reposer ma question au plus simple.
Existe t'il une macro de module capable de positionner le pointeur de la
souris
là ou je veux (avec Top et Left, comme un dessin) ou par autre moyen (X et Y)
Je vous ai auparavant sans doute embrouillé avec toutes mes explications
superflues
Cordialement..



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

Bonjour Modeste
La publicité n'est pas interdite sur ce forum ?
Ton code est pas mal (même bien) mais fait quand même un peu usine à gaz.
Rien à voir avec mon ci-joint. Que tu as vu je suppose.
Figure toi que j'en suis fier (pour te faire une idée de mon niveau en VB)
Etant encore dans la catégorie amateurs, poids léger, je tape dans la
simplicité.
Mais je garde ton travail sous le coude. Pour les longues soirées d'hiver.
J'ai vu, ça marche mais il faut que je comprenne tout et pourquoi ça marche !
Cordialement.
JMM

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

Bonsour® milloche

Bonjour Denis
Tu dois te demander pourquoi je m'entête à créer des boutons avec la
barre d'outils "dessin" : c'est juste esthétique. Comme sur une
machine-outil. Quand une fonction est active, le bouton est vert ou
rouge suivant le cas. Quand elle est inactive, la macro le remet en
gris
Et ces couleurs sont en dégradé comme si le bouton était bombé.
C'est joli et c'est çà la raison.
Impossible avec les autres barres.
Et un bouton rond n'est pas prévu non plus. Moi, j'en ai.



;o))) Clearasil à ton age ????

Sub Creer_Boutons()
Dim cell As Range
Dim BoutonCourant As Shape
'----hauteur de ligne=hauteur du bouton
Selection.EntireRow.RowHeight = 36
'----creer un bouton dans chaque cellule de la selection
For Each cell In Selection
With cell
' mettre en commentaire selon besoins
' ------Bouton rectangulaire avec biseaux
'Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeBevel, .Left, .Top,
.Width, .Height)
'-------Bouton Oval
Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeOval, .Left, .Top,
.Width, .Height)
With BoutonCourant
.Fill.ForeColor.SchemeColor = 10 ' rouge
.Fill.BackColor.SchemeColor = 11 ' vert
.Line.ForeColor.SchemeColor = 22 ' gris
.OLEFormat.Object.Caption = "O"
.OnAction = "Bouton_Click"
.Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With '(caption)
End With '(bouton)
.Value = False '---- la cellule reçoit FAUX=bouton Rouge, VRAI=Bouton Vert
End With '(cellule)
DoEvents
Next
[a1].Select
End Sub
Sub Bouton_click()
Dim BoutonCourant As Shape
Set BoutonCourant = ActiveSheet.Shapes(Application.Caller)
With BoutonCourant
'---- à modifier si l'on souhaite un comportement Tri-state !!!!!!
'---- la cellule reçoit FAUX = bouton Rouge VRAI=Bouton Vert
Range(.TopLeftCell.Address) = (.Fill.ForeColor.SchemeColor = 10)
'---- la couleur du bouton est modifié ( ici couleur Rouge ou Vert)
.Fill.ForeColor.SchemeColor = IIf(.Fill.ForeColor.SchemeColor = 10, 11,
10)
'---- le texte du bouton est modifié ( ici texte alternatif "O" ou "I")
.OLEFormat.Object.Caption = IIf(.Fill.ForeColor.SchemeColor = 10, "O",
"I")
End With
End Sub








Avatar
michdenis
ça devrait fonctionner :

http://cjoint.com/?cvp1H8NMTu



"milloche" a écrit dans le message de groupe de discussion :
#
J'ai fait de mon mieux.
Cordialement
JMM

http://www.cijoint.fr/cjlink.php?file=cj200902/cijMo0SEby.xls
Cordialement
"michdenis" a écrit dans le message de news:

Le langage VBA ne possède aucun outil qui peut déplacer
le curseur à ma connaissance. C'est pourquoi, il faut utiliser
un petit API pour le déplacer à un point sur l'écran
le X et le Y représente les coordonnées en pixels d'un
point sur l'écran.
Cependant, pour déterminer ces 2 valeurs, tu peux avoir recours
aux propriétés "Top", "Height", "Width", "Left" des objets que tu
as inséré dans ta feuille ou les dimensions de l'application elle-même.
Lorsque tu as déterminé le point â l'aide de ces propriétés, tu utilise
la fonction de conversion de points en pixels pour faire comprendre
à l'API où tu veux qu'il place le curseur.

Si tu prenais le temps d'expliquer ce que tu veux faire et pourquoi tu
dois déplacer le curseur, il y a peut être d'autres moyens d'arriver au
même résultat.



"milloche" a écrit dans le message de groupe de
discussion :

Bonjour
Je ne m'en sors pas. Je vais donc reposer ma question au plus simple.
Existe t'il une macro de module capable de positionner le pointeur de la
souris
là ou je veux (avec Top et Left, comme un dessin) ou par autre moyen (X et Y)
Je vous ai auparavant sans doute embrouillé avec toutes mes explications
superflues
Cordialement..



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

Bonjour Modeste
La publicité n'est pas interdite sur ce forum ?
Ton code est pas mal (même bien) mais fait quand même un peu usine à gaz.
Rien à voir avec mon ci-joint. Que tu as vu je suppose.
Figure toi que j'en suis fier (pour te faire une idée de mon niveau en VB)
Etant encore dans la catégorie amateurs, poids léger, je tape dans la
simplicité.
Mais je garde ton travail sous le coude. Pour les longues soirées d'hiver.
J'ai vu, ça marche mais il faut que je comprenne tout et pourquoi ça marche !
Cordialement.
JMM

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

Bonsour® milloche

Bonjour Denis
Tu dois te demander pourquoi je m'entête à créer des boutons avec la
barre d'outils "dessin" : c'est juste esthétique. Comme sur une
machine-outil. Quand une fonction est active, le bouton est vert ou
rouge suivant le cas. Quand elle est inactive, la macro le remet en
gris
Et ces couleurs sont en dégradé comme si le bouton était bombé.
C'est joli et c'est çà la raison.
Impossible avec les autres barres.
Et un bouton rond n'est pas prévu non plus. Moi, j'en ai.



;o))) Clearasil à ton age ????

Sub Creer_Boutons()
Dim cell As Range
Dim BoutonCourant As Shape
'----hauteur de ligne=hauteur du bouton
Selection.EntireRow.RowHeight = 36
'----creer un bouton dans chaque cellule de la selection
For Each cell In Selection
With cell
' mettre en commentaire selon besoins
' ------Bouton rectangulaire avec biseaux
'Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeBevel, .Left, .Top,
.Width, .Height)
'-------Bouton Oval
Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeOval, .Left, .Top,
.Width, .Height)
With BoutonCourant
.Fill.ForeColor.SchemeColor = 10 ' rouge
.Fill.BackColor.SchemeColor = 11 ' vert
.Line.ForeColor.SchemeColor = 22 ' gris
.OLEFormat.Object.Caption = "O"
.OnAction = "Bouton_Click"
.Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With '(caption)
End With '(bouton)
.Value = False '---- la cellule reçoit FAUX=bouton Rouge, VRAI=Bouton Vert
End With '(cellule)
DoEvents
Next
[a1].Select
End Sub
Sub Bouton_click()
Dim BoutonCourant As Shape
Set BoutonCourant = ActiveSheet.Shapes(Application.Caller)
With BoutonCourant
'---- à modifier si l'on souhaite un comportement Tri-state !!!!!!
'---- la cellule reçoit FAUX = bouton Rouge VRAI=Bouton Vert
Range(.TopLeftCell.Address) = (.Fill.ForeColor.SchemeColor = 10)
'---- la couleur du bouton est modifié ( ici couleur Rouge ou Vert)
.Fill.ForeColor.SchemeColor = IIf(.Fill.ForeColor.SchemeColor = 10, 11,
10)
'---- le texte du bouton est modifié ( ici texte alternatif "O" ou "I")
.OLEFormat.Object.Caption = IIf(.Fill.ForeColor.SchemeColor = 10, "O",
"I")
End With
End Sub








Avatar
milloche
On peut dire que ce fût dur !
Mais çà marche impec.
Tu comprends maintenant que j'avais juste la fainéantise de bouger ma souris
pour faire le tour de l'écran.
On ne se refait pas.
Encore une fois CHAPEAU BAS
JMM




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

ça devrait fonctionner :

http://cjoint.com/?cvp1H8NMTu



"milloche" a écrit dans le message de groupe de
discussion :
#
J'ai fait de mon mieux.
Cordialement
JMM

http://www.cijoint.fr/cjlink.php?file=cj200902/cijMo0SEby.xls
Cordialement
"michdenis" a écrit dans le message de news:

Le langage VBA ne possède aucun outil qui peut déplacer
le curseur à ma connaissance. C'est pourquoi, il faut utiliser
un petit API pour le déplacer à un point sur l'écran
le X et le Y représente les coordonnées en pixels d'un
point sur l'écran.
Cependant, pour déterminer ces 2 valeurs, tu peux avoir recours
aux propriétés "Top", "Height", "Width", "Left" des objets que tu
as inséré dans ta feuille ou les dimensions de l'application elle-même.
Lorsque tu as déterminé le point â l'aide de ces propriétés, tu utilise
la fonction de conversion de points en pixels pour faire comprendre
à l'API où tu veux qu'il place le curseur.

Si tu prenais le temps d'expliquer ce que tu veux faire et pourquoi tu
dois déplacer le curseur, il y a peut être d'autres moyens d'arriver au
même résultat.



"milloche" a écrit dans le message de groupe de
discussion :

Bonjour
Je ne m'en sors pas. Je vais donc reposer ma question au plus simple.
Existe t'il une macro de module capable de positionner le pointeur de la
souris
là ou je veux (avec Top et Left, comme un dessin) ou par autre moyen (X et Y)
Je vous ai auparavant sans doute embrouillé avec toutes mes explications
superflues
Cordialement..



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

Bonjour Modeste
La publicité n'est pas interdite sur ce forum ?
Ton code est pas mal (même bien) mais fait quand même un peu usine à gaz.
Rien à voir avec mon ci-joint. Que tu as vu je suppose.
Figure toi que j'en suis fier (pour te faire une idée de mon niveau en VB)
Etant encore dans la catégorie amateurs, poids léger, je tape dans la
simplicité.
Mais je garde ton travail sous le coude. Pour les longues soirées d'hiver.
J'ai vu, ça marche mais il faut que je comprenne tout et pourquoi ça marche
!
Cordialement.
JMM

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

Bonsour® milloche

Bonjour Denis
Tu dois te demander pourquoi je m'entête à créer des boutons avec la
barre d'outils "dessin" : c'est juste esthétique. Comme sur une
machine-outil. Quand une fonction est active, le bouton est vert ou
rouge suivant le cas. Quand elle est inactive, la macro le remet en
gris
Et ces couleurs sont en dégradé comme si le bouton était bombé.
C'est joli et c'est çà la raison.
Impossible avec les autres barres.
Et un bouton rond n'est pas prévu non plus. Moi, j'en ai.



;o))) Clearasil à ton age ????

Sub Creer_Boutons()
Dim cell As Range
Dim BoutonCourant As Shape
'----hauteur de ligne=hauteur du bouton
Selection.EntireRow.RowHeight = 36
'----creer un bouton dans chaque cellule de la selection
For Each cell In Selection
With cell
' mettre en commentaire selon besoins
' ------Bouton rectangulaire avec biseaux
'Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeBevel, .Left,
.Top,
.Width, .Height)
'-------Bouton Oval
Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeOval, .Left, .Top,
.Width, .Height)
With BoutonCourant
.Fill.ForeColor.SchemeColor = 10 ' rouge
.Fill.BackColor.SchemeColor = 11 ' vert
.Line.ForeColor.SchemeColor = 22 ' gris
.OLEFormat.Object.Caption = "O"
.OnAction = "Bouton_Click"
.Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With '(caption)
End With '(bouton)
.Value = False '---- la cellule reçoit FAUX=bouton Rouge, VRAI=Bouton Vert
End With '(cellule)
DoEvents
Next
[a1].Select
End Sub
Sub Bouton_click()
Dim BoutonCourant As Shape
Set BoutonCourant = ActiveSheet.Shapes(Application.Caller)
With BoutonCourant
'---- à modifier si l'on souhaite un comportement Tri-state !!!!!!
'---- la cellule reçoit FAUX = bouton Rouge VRAI=Bouton Vert
Range(.TopLeftCell.Address) = (.Fill.ForeColor.SchemeColor = 10)
'---- la couleur du bouton est modifié ( ici couleur Rouge ou
Vert)
.Fill.ForeColor.SchemeColor = IIf(.Fill.ForeColor.SchemeColor = 10, 11,
10)
'---- le texte du bouton est modifié ( ici texte alternatif "O" ou "I")
.OLEFormat.Object.Caption = IIf(.Fill.ForeColor.SchemeColor = 10, "O",
"I")
End With
End Sub











Avatar
milloche
Bonjour
J'aimerais simplifier ta macro qui ne supporte pas les déménagements.
Ou je le fais mal sans doute
Explication ici.
http://www.cijoint.fr/cjlink.php?file=cj200904/cijzvTfYTB.xls
Cordialement.
JMM



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

On peut dire que ce fût dur !
Mais çà marche impec.
Tu comprends maintenant que j'avais juste la fainéantise de bouger ma
souris pour faire le tour de l'écran.
On ne se refait pas.
Encore une fois CHAPEAU BAS
JMM




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

ça devrait fonctionner :

http://cjoint.com/?cvp1H8NMTu



"milloche" a écrit dans le message de
groupe de discussion :
#
J'ai fait de mon mieux.
Cordialement
JMM

http://www.cijoint.fr/cjlink.php?file=cj200902/cijMo0SEby.xls
Cordialement
"michdenis" a écrit dans le message de news:

Le langage VBA ne possède aucun outil qui peut déplacer
le curseur à ma connaissance. C'est pourquoi, il faut utiliser
un petit API pour le déplacer à un point sur l'écran
le X et le Y représente les coordonnées en pixels d'un
point sur l'écran.
Cependant, pour déterminer ces 2 valeurs, tu peux avoir recours
aux propriétés "Top", "Height", "Width", "Left" des objets que tu
as inséré dans ta feuille ou les dimensions de l'application elle-même.
Lorsque tu as déterminé le point â l'aide de ces propriétés, tu utilise
la fonction de conversion de points en pixels pour faire comprendre
à l'API où tu veux qu'il place le curseur.

Si tu prenais le temps d'expliquer ce que tu veux faire et pourquoi tu
dois déplacer le curseur, il y a peut être d'autres moyens d'arriver au
même résultat.



"milloche" a écrit dans le message de
groupe de
discussion :

Bonjour
Je ne m'en sors pas. Je vais donc reposer ma question au plus simple.
Existe t'il une macro de module capable de positionner le pointeur de
la
souris
là ou je veux (avec Top et Left, comme un dessin) ou par autre moyen (X
et Y)
Je vous ai auparavant sans doute embrouillé avec toutes mes
explications
superflues
Cordialement..



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

Bonjour Modeste
La publicité n'est pas interdite sur ce forum ?
Ton code est pas mal (même bien) mais fait quand même un peu usine à
gaz.
Rien à voir avec mon ci-joint. Que tu as vu je suppose.
Figure toi que j'en suis fier (pour te faire une idée de mon niveau en
VB)
Etant encore dans la catégorie amateurs, poids léger, je tape dans la
simplicité.
Mais je garde ton travail sous le coude. Pour les longues soirées
d'hiver.
J'ai vu, ça marche mais il faut que je comprenne tout et pourquoi ça
marche !
Cordialement.
JMM

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

Bonsour® milloche

Bonjour Denis
Tu dois te demander pourquoi je m'entête à créer des boutons avec la
barre d'outils "dessin" : c'est juste esthétique. Comme sur une
machine-outil. Quand une fonction est active, le bouton est vert ou
rouge suivant le cas. Quand elle est inactive, la macro le remet en
gris
Et ces couleurs sont en dégradé comme si le bouton était bombé.
C'est joli et c'est çà la raison.
Impossible avec les autres barres.
Et un bouton rond n'est pas prévu non plus. Moi, j'en ai.



;o))) Clearasil à ton age ????

Sub Creer_Boutons()
Dim cell As Range
Dim BoutonCourant As Shape
'----hauteur de ligne=hauteur du bouton
Selection.EntireRow.RowHeight = 36
'----creer un bouton dans chaque cellule de la selection
For Each cell In Selection
With cell
' mettre en commentaire selon besoins
' ------Bouton rectangulaire avec biseaux
'Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeBevel,
.Left, .Top,
.Width, .Height)
'-------Bouton Oval
Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeOval, .Left,
.Top,
.Width, .Height)
With BoutonCourant
.Fill.ForeColor.SchemeColor = 10 ' rouge
.Fill.BackColor.SchemeColor = 11 ' vert
.Line.ForeColor.SchemeColor = 22 ' gris
.OLEFormat.Object.Caption = "O"
.OnAction = "Bouton_Click"
.Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With '(caption)
End With '(bouton)
.Value = False '---- la cellule reçoit FAUX=bouton Rouge,
VRAI=Bouton Vert
End With '(cellule)
DoEvents
Next
[a1].Select
End Sub
Sub Bouton_click()
Dim BoutonCourant As Shape
Set BoutonCourant = ActiveSheet.Shapes(Application.Caller)
With BoutonCourant
'---- à modifier si l'on souhaite un comportement Tri-state !!!!!!
'---- la cellule reçoit FAUX = bouton Rouge VRAI=Bouton Vert
Range(.TopLeftCell.Address) = (.Fill.ForeColor.SchemeColor = 10)
'---- la couleur du bouton est modifié ( ici couleur Rouge ou
Vert)
.Fill.ForeColor.SchemeColor = IIf(.Fill.ForeColor.SchemeColor = 10,
11,
10)
'---- le texte du bouton est modifié ( ici texte alternatif "O" ou
"I")
.OLEFormat.Object.Caption = IIf(.Fill.ForeColor.SchemeColor = 10,
"O",
"I")
End With
End Sub















Avatar
milloche
Vielle file mais lue quand même et rapidement, je n'y croyais pas trop !
C'est justement ce que je voudrais, faire référence à une cellule et non
plus à un bouton. Cela simplifierait tout. Ce bouton se trouvant forcément
sur une cellule.
J'ai essayé de donner manuellement (par tâtonnement) le vrai X et Y à
atteindre par la macro et ça marche. Mais il est différent à chaque clic.
Il faudrait 4 if ou 4 boutons
C'est pourquoi je pense que la solution idéale serait d'atteindre avec le
pointeur le centre d'une cellule, désignée dans la macro, quelque soit la
taille et la position de la fenêtre.
Non ?

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

Bonjour Milloche,

A ) Lorsque tu veux définir une procédure, évite
de formater l'application (barre de menus ... etc)
Débute d'abord par fignoler le fonctionnement de
la procédure comme tu le désires.

B ) Si tu désires positionner le curseur sur un bouton
donné, tu peux utiliser cette macro dans le fichier soumis
pour placer le curseur sur le bouton "Denis" sans faire
référence à la cellule laquelle se retrouve le bouton.

Sub Positionnement()
With ActiveSheet
With .Shapes("denis")
X = Application.ActiveWindow.PointsToScreenPixelsX(.Left +
(.Width))
Y = Application.ActiveWindow.PointsToScreenPixelsY(.Top +
(.Height))
SetCursorPos X, Y
End With
End With
End Sub




"milloche" a écrit dans le message de
groupe de discussion : #
Bonjour
J'aimerais simplifier ta macro qui ne supporte pas les déménagements.
Ou je le fais mal sans doute
Explication ici.
http://www.cijoint.fr/cjlink.php?file=cj200904/cijzvTfYTB.xls
Cordialement.
JMM



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

On peut dire que ce fût dur !
Mais çà marche impec.
Tu comprends maintenant que j'avais juste la fainéantise de bouger ma
souris pour faire le tour de l'écran.
On ne se refait pas.
Encore une fois CHAPEAU BAS
JMM




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

ça devrait fonctionner :

http://cjoint.com/?cvp1H8NMTu



"milloche" a écrit dans le message de
groupe de discussion :
#
J'ai fait de mon mieux.
Cordialement
JMM

http://www.cijoint.fr/cjlink.php?file=cj200902/cijMo0SEby.xls
Cordialement
"michdenis" a écrit dans le message de news:

Le langage VBA ne possède aucun outil qui peut déplacer
le curseur à ma connaissance. C'est pourquoi, il faut utiliser
un petit API pour le déplacer à un point sur l'écran
le X et le Y représente les coordonnées en pixels d'un
point sur l'écran.
Cependant, pour déterminer ces 2 valeurs, tu peux avoir recours
aux propriétés "Top", "Height", "Width", "Left" des objets que tu
as inséré dans ta feuille ou les dimensions de l'application
elle-même.
Lorsque tu as déterminé le point â l'aide de ces propriétés, tu
utilise
la fonction de conversion de points en pixels pour faire comprendre
à l'API où tu veux qu'il place le curseur.

Si tu prenais le temps d'expliquer ce que tu veux faire et pourquoi tu
dois déplacer le curseur, il y a peut être d'autres moyens d'arriver
au
même résultat.



"milloche" a écrit dans le message de
groupe de
discussion :

Bonjour
Je ne m'en sors pas. Je vais donc reposer ma question au plus simple.
Existe t'il une macro de module capable de positionner le pointeur de
la
souris
là ou je veux (avec Top et Left, comme un dessin) ou par autre moyen
(X
et Y)
Je vous ai auparavant sans doute embrouillé avec toutes mes
explications
superflues
Cordialement..



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

Bonjour Modeste
La publicité n'est pas interdite sur ce forum ?
Ton code est pas mal (même bien) mais fait quand même un peu usine à
gaz.
Rien à voir avec mon ci-joint. Que tu as vu je suppose.
Figure toi que j'en suis fier (pour te faire une idée de mon niveau
en
VB)
Etant encore dans la catégorie amateurs, poids léger, je tape dans la
simplicité.
Mais je garde ton travail sous le coude. Pour les longues soirées
d'hiver.
J'ai vu, ça marche mais il faut que je comprenne tout et pourquoi ça
marche !
Cordialement.
JMM

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

Bonsour® milloche

Bonjour Denis
Tu dois te demander pourquoi je m'entête à créer des boutons avec la
barre d'outils "dessin" : c'est juste esthétique. Comme sur une
machine-outil. Quand une fonction est active, le bouton est vert ou
rouge suivant le cas. Quand elle est inactive, la macro le remet en
gris
Et ces couleurs sont en dégradé comme si le bouton était bombé.
C'est joli et c'est çà la raison.
Impossible avec les autres barres.
Et un bouton rond n'est pas prévu non plus. Moi, j'en ai.



;o))) Clearasil à ton age ????

Sub Creer_Boutons()
Dim cell As Range
Dim BoutonCourant As Shape
'----hauteur de ligne=hauteur du bouton
Selection.EntireRow.RowHeight = 36
'----creer un bouton dans chaque cellule de la selection
For Each cell In Selection
With cell
' mettre en commentaire selon besoins
' ------Bouton rectangulaire avec biseaux
'Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeBevel,
.Left, .Top,
.Width, .Height)
'-------Bouton Oval
Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeOval, .Left,
.Top,
.Width, .Height)
With BoutonCourant
.Fill.ForeColor.SchemeColor = 10 ' rouge
.Fill.BackColor.SchemeColor = 11 ' vert
.Line.ForeColor.SchemeColor = 22 ' gris
.OLEFormat.Object.Caption = "O"
.OnAction = "Bouton_Click"
.Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With '(caption)
End With '(bouton)
.Value = False '---- la cellule reçoit FAUX=bouton Rouge,
VRAI=Bouton Vert
End With '(cellule)
DoEvents
Next
[a1].Select
End Sub
Sub Bouton_click()
Dim BoutonCourant As Shape
Set BoutonCourant = ActiveSheet.Shapes(Application.Caller)
With BoutonCourant
'---- à modifier si l'on souhaite un comportement Tri-state !!!!!!
'---- la cellule reçoit FAUX = bouton Rouge VRAI=Bouton Vert
Range(.TopLeftCell.Address) = (.Fill.ForeColor.SchemeColor = 10)
'---- la couleur du bouton est modifié ( ici couleur Rouge ou
Vert)
.Fill.ForeColor.SchemeColor = IIf(.Fill.ForeColor.SchemeColor =
10,
11,
10)
'---- le texte du bouton est modifié ( ici texte alternatif "O"
ou
"I")
.OLEFormat.Object.Caption = IIf(.Fill.ForeColor.SchemeColor = 10,
"O",
"I")
End With
End Sub

















Avatar
milloche
Le bidouillage étant le propre de milloche, voici ce que j'ai fait après
une bonne période d'énervement et un peu par hasard.
Sub Positionnement()
With ActiveSheet
With .[A3]
X = Application.ActiveWindow.PointsToScreenPixelsX(.Left) + 60
Y = Application.ActiveWindow.PointsToScreenPixelsY(.Top) + 60
SetCursorPos X, Y
End With
End With
End Sub
j'ai juste rajouté un petit 60 à X et Y
Ne me demande pas pourquoi, mais la souris vient pile poil se caler là ou
je la voulais.
Cela chiottera sans doute si je modifie la hauteur des lignes, mais je n'en
n'ai pas l'intention, et puis je m'en souviendrai.
Et c'est la fête du travail !
Cordialement

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

Remplace ces 2 lignes :

x = Application.ActiveWindow.PointsToScreenPixelsX((.Offset(, 1).Left -
(.Width / 2)) * 4 / 3)
y = Application.ActiveWindow.PointsToScreenPixelsY((.Offset(1).Top -
(.Height / 2)) * 4 / 3)

par

X = Application.ActiveWindow.PointsToScreenPixelsX((.Left + (.Width / 2))
* 4 / 3)
Y = Application.ActiveWindow.PointsToScreenPixelsY((.Top + (.Height / 2))
* 4 / 3)




"MichDenis" a écrit dans le message de groupe de
discussion :
Pour positionner le curseur au centre d'une cellule de ton choix :


'Dans le haut du module, déclaration de l'API
Private Declare Function SetCursorPos Lib "user32" _
(ByVal x As Long, ByVal y As Long) As Long

A ) évidemment, la cellule doit être dans la section visible de la
feuille à l'écran.
B ) Pour placer le curseur au centre de la cellule K25 de la feuille
active...

'----------------------------------------
Sub Positionnement()
Dim X As Double, Y As Double
With ActiveSheet
With .Range("K25")
x = Application.ActiveWindow.PointsToScreenPixelsX((.Offset(,
1).Left - (.Width / 2)) * 4 / 3)
y =
Application.ActiveWindow.PointsToScreenPixelsY((.Offset(1).Top - (.Height
/ 2)) * 4 / 3)
SetCursorPos x, y
End With
End With
End Sub
'----------------------------------------




"milloche" a écrit dans le message de
groupe de discussion :
Vielle file mais lue quand même et rapidement, je n'y croyais pas trop !
C'est justement ce que je voudrais, faire référence à une cellule et non
plus à un bouton. Cela simplifierait tout. Ce bouton se trouvant
forcément
sur une cellule.
J'ai essayé de donner manuellement (par tâtonnement) le vrai X et Y à
atteindre par la macro et ça marche. Mais il est différent à chaque clic.
Il faudrait 4 if ou 4 boutons
C'est pourquoi je pense que la solution idéale serait d'atteindre avec le
pointeur le centre d'une cellule, désignée dans la macro, quelque soit la
taille et la position de la fenêtre.
Non ?

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

Bonjour Milloche,

A ) Lorsque tu veux définir une procédure, évite
de formater l'application (barre de menus ... etc)
Débute d'abord par fignoler le fonctionnement de
la procédure comme tu le désires.

B ) Si tu désires positionner le curseur sur un bouton
donné, tu peux utiliser cette macro dans le fichier soumis
pour placer le curseur sur le bouton "Denis" sans faire
référence à la cellule laquelle se retrouve le bouton.

Sub Positionnement()
With ActiveSheet
With .Shapes("denis")
X = Application.ActiveWindow.PointsToScreenPixelsX(.Left +
(.Width))
Y = Application.ActiveWindow.PointsToScreenPixelsY(.Top +
(.Height))
SetCursorPos X, Y
End With
End With
End Sub




"milloche" a écrit dans le message de
groupe de discussion : #
Bonjour
J'aimerais simplifier ta macro qui ne supporte pas les déménagements.
Ou je le fais mal sans doute
Explication ici.
http://www.cijoint.fr/cjlink.php?file=cj200904/cijzvTfYTB.xls
Cordialement.
JMM



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

On peut dire que ce fût dur !
Mais çà marche impec.
Tu comprends maintenant que j'avais juste la fainéantise de bouger ma
souris pour faire le tour de l'écran.
On ne se refait pas.
Encore une fois CHAPEAU BAS
JMM




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

ça devrait fonctionner :

http://cjoint.com/?cvp1H8NMTu



"milloche" a écrit dans le message de
groupe de discussion :
#
J'ai fait de mon mieux.
Cordialement
JMM

http://www.cijoint.fr/cjlink.php?file=cj200902/cijMo0SEby.xls
Cordialement
"michdenis" a écrit dans le message de news:

Le langage VBA ne possède aucun outil qui peut déplacer
le curseur à ma connaissance. C'est pourquoi, il faut utiliser
un petit API pour le déplacer à un point sur l'écran
le X et le Y représente les coordonnées en pixels d'un
point sur l'écran.
Cependant, pour déterminer ces 2 valeurs, tu peux avoir recours
aux propriétés "Top", "Height", "Width", "Left" des objets que tu
as inséré dans ta feuille ou les dimensions de l'application
elle-même.
Lorsque tu as déterminé le point â l'aide de ces propriétés, tu
utilise
la fonction de conversion de points en pixels pour faire comprendre
à l'API où tu veux qu'il place le curseur.

Si tu prenais le temps d'expliquer ce que tu veux faire et pourquoi
tu
dois déplacer le curseur, il y a peut être d'autres moyens d'arriver
au
même résultat.



"milloche" a écrit dans le message de
groupe de
discussion :

Bonjour
Je ne m'en sors pas. Je vais donc reposer ma question au plus simple.
Existe t'il une macro de module capable de positionner le pointeur de
la
souris
là ou je veux (avec Top et Left, comme un dessin) ou par autre moyen
(X
et Y)
Je vous ai auparavant sans doute embrouillé avec toutes mes
explications
superflues
Cordialement..



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

Bonjour Modeste
La publicité n'est pas interdite sur ce forum ?
Ton code est pas mal (même bien) mais fait quand même un peu usine à
gaz.
Rien à voir avec mon ci-joint. Que tu as vu je suppose.
Figure toi que j'en suis fier (pour te faire une idée de mon niveau
en
VB)
Etant encore dans la catégorie amateurs, poids léger, je tape dans
la
simplicité.
Mais je garde ton travail sous le coude. Pour les longues soirées
d'hiver.
J'ai vu, ça marche mais il faut que je comprenne tout et pourquoi ça
marche !
Cordialement.
JMM

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

Bonsour® milloche

Bonjour Denis
Tu dois te demander pourquoi je m'entête à créer des boutons avec
la
barre d'outils "dessin" : c'est juste esthétique. Comme sur une
machine-outil. Quand une fonction est active, le bouton est vert ou
rouge suivant le cas. Quand elle est inactive, la macro le remet en
gris
Et ces couleurs sont en dégradé comme si le bouton était bombé.
C'est joli et c'est çà la raison.
Impossible avec les autres barres.
Et un bouton rond n'est pas prévu non plus. Moi, j'en ai.



;o))) Clearasil à ton age ????

Sub Creer_Boutons()
Dim cell As Range
Dim BoutonCourant As Shape
'----hauteur de ligne=hauteur du bouton
Selection.EntireRow.RowHeight = 36
'----creer un bouton dans chaque cellule de la selection
For Each cell In Selection
With cell
' mettre en commentaire selon besoins
' ------Bouton rectangulaire avec biseaux
'Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeBevel,
.Left, .Top,
.Width, .Height)
'-------Bouton Oval
Set BoutonCourant = ActiveSheet.Shapes.AddShape(msoShapeOval,
.Left,
.Top,
.Width, .Height)
With BoutonCourant
.Fill.ForeColor.SchemeColor = 10 ' rouge
.Fill.BackColor.SchemeColor = 11 ' vert
.Line.ForeColor.SchemeColor = 22 ' gris
.OLEFormat.Object.Caption = "O"
.OnAction = "Bouton_Click"
.Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With '(caption)
End With '(bouton)
.Value = False '---- la cellule reçoit FAUX=bouton Rouge,
VRAI=Bouton Vert
End With '(cellule)
DoEvents
Next
[a1].Select
End Sub
Sub Bouton_click()
Dim BoutonCourant As Shape
Set BoutonCourant = ActiveSheet.Shapes(Application.Caller)
With BoutonCourant
'---- à modifier si l'on souhaite un comportement Tri-state
!!!!!!
'---- la cellule reçoit FAUX = bouton Rouge VRAI=Bouton Vert
Range(.TopLeftCell.Address) = (.Fill.ForeColor.SchemeColor = 10)
'---- la couleur du bouton est modifié ( ici couleur Rouge ou
Vert)
.Fill.ForeColor.SchemeColor = IIf(.Fill.ForeColor.SchemeColor >>>>>> 10,
11,
10)
'---- le texte du bouton est modifié ( ici texte alternatif "O"
ou
"I")
.OLEFormat.Object.Caption = IIf(.Fill.ForeColor.SchemeColor = 10,
"O",
"I")
End With
End Sub



















Avatar
milloche
Il faut dire que dans mon vrai fichier, assez compliqué, quand je réduis la
fenêtre à 1/4 d'écran, je ne garde plus aucun accessoire et toute la
surface est réservée aux données
Plus de heading, scrollbar,formula bar, statusbar, menubar etc. Rien que
les données et même certaines colonnes sont masquées. Reste seulement la
barre de titre très difficile à enlever. J'avais d'ailleurs demandé là
dessus il y a x mois. Mais reculé devant l'usine à gaz que c'était.
Tu me parlais très justement de ce formatage à ne pas faire avant que la
macro fonctionne. Mais c'est justement le but de cette macro ! Juste mettre
en page.
La différence provient sans doute de ça. Excel quand il n'a plus aucune
barre à laquelle se référer décrèterait alors de mettre le pointeur dans la
barre de titre, la seule existant encore et non cachable. C'est au moins
mon explication de candide.
Merci de ton aide car sans elle, j'y serais encore et pour un bout de
temps.
JMM

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

| j'ai juste rajouté un petit 60 à X et Y
| Ne me demande pas pourquoi, mais la souris vient
| pile poil se caler là ou je la voulais.

Tant mieux si tu as trouvé quelque chose à la hauteur de tes attentes.

J'ai testé ta procédure sous Excel 2003 et Excel 2007, et à chaque fois
je me retrouve en A5 et ce, dans une feuille vierge sans avoir
redimensionné quoi que ce soit.

OK, on ne va pas comparer les 2 approches ;-)


'Dans le haut du module, déclaration de l'API
Private Declare Function SetCursorPos Lib "user32" _
(ByVal x As Long, ByVal y As Long) As Long

'--------------------------------------------
Sub Positionnement()
Dim x As Double, y As Double
With ActiveSheet
With .Range("K25")
x = Application.ActiveWindow.PointsToScreenPixelsX((.Left +
(.Width / 2)) * 4 / 3)
y = Application.ActiveWindow.PointsToScreenPixelsY((.Top +
(.Height / 2)) * 4 / 3)
SetCursorPos x, y
End With
End With
End Sub
'--------------------------------------------


Avatar
milloche
Ecoute
Tu n'as pas l'air d'être bousculé aujourd'hui.
Laisse moi le temps de te préparer un petit cadeau.
Tu risque d'être surpris.
@+

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

| Excel quand il n'a plus aucune barre à laquelle se référer
| décrèterait alors de mettre le pointeur dans la
| barre de titre

La procédure que je t'ai proposée devrait fonctionner peu importe
les objets (barre de menus, formulabar , Scrollbar...) masqués dans
la fenêtre excel.

| alors de mettre le pointeur dans la barre de titre, la seule
| existant encore et non cachable

Si tu désires masquer la barre de titre d'excel :

'Déclaration dans le haut du module standard des API requis
'--------------------------------------------------
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias
"GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias
"SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long
Const GWL_STYLE = (-16)
Public Const WS_CAPTION = &HC00000


'Cache la barre de titre de l'application Excel
'--------------------------------------------------
Sub CachéLaBarreDeTitreExcel()
Dim hWnd As Long, Style As Long
Nom = ActiveWindow.Application.Parent.Caption
hWnd = FindWindow(vbNullString, Nom)
Style = GetWindowLong(hWnd, GWL_STYLE) And Not WS_CAPTION
SetWindowLong hWnd, GWL_STYLE, Style
End Sub
'--------------------------------------------------

'Affiche la barre de titre de l'application Excel
'--------------------------------------------------
Sub AfficherLaBarreDeTitreExcel()
Dim hWnd As Long, Style As Long
Nom = ActiveWindow.Application.Parent.Caption
hWnd = FindWindow(vbNullString, Nom)
Style = GetWindowLong(hWnd, GWL_STYLE) Or WS_CAPTION
SetWindowLong hWnd, GWL_STYLE, Style
End Sub
'--------------------------------------------------




"milloche" a écrit dans le message de
groupe de discussion :
Il faut dire que dans mon vrai fichier, assez compliqué, quand je réduis
la
fenêtre à 1/4 d'écran, je ne garde plus aucun accessoire et toute la
surface est réservée aux données
Plus de heading, scrollbar,formula bar, statusbar, menubar etc. Rien que
les données et même certaines colonnes sont masquées. Reste seulement la
barre de titre très difficile à enlever. J'avais d'ailleurs demandé là
dessus il y a x mois. Mais reculé devant l'usine à gaz que c'était.
Tu me parlais très justement de ce formatage à ne pas faire avant que la
macro fonctionne. Mais c'est justement le but de cette macro ! Juste
mettre
en page.
La différence provient sans doute de ça. Excel quand il n'a plus aucune
barre à laquelle se référer décrèterait alors de mettre le pointeur dans
la
barre de titre, la seule existant encore et non cachable. C'est au moins
mon explication de candide.
Merci de ton aide car sans elle, j'y serais encore et pour un bout de
temps.
JMM

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

| j'ai juste rajouté un petit 60 à X et Y
| Ne me demande pas pourquoi, mais la souris vient
| pile poil se caler là ou je la voulais.

Tant mieux si tu as trouvé quelque chose à la hauteur de tes attentes.

J'ai testé ta procédure sous Excel 2003 et Excel 2007, et à chaque fois
je me retrouve en A5 et ce, dans une feuille vierge sans avoir
redimensionné quoi que ce soit.

OK, on ne va pas comparer les 2 approches ;-)


'Dans le haut du module, déclaration de l'API
Private Declare Function SetCursorPos Lib "user32" _
(ByVal x As Long, ByVal y As Long) As Long

'--------------------------------------------
Sub Positionnement()
Dim x As Double, y As Double
With ActiveSheet
With .Range("K25")
x = Application.ActiveWindow.PointsToScreenPixelsX((.Left +
(.Width / 2)) * 4 / 3)
y = Application.ActiveWindow.PointsToScreenPixelsY((.Top +
(.Height / 2)) * 4 / 3)
SetCursorPos x, y
End With
End With
End Sub
'--------------------------------------------




Avatar
milloche
Voila, mais il ne fonctionne déjà plus !
http://www.cijoint.fr/cjlink.php?file=cj200905/cijpt79Qk5.xls
Amuse toi bien
JMM




"milloche" a écrit dans le message de news:
eZ$
Ecoute
Tu n'as pas l'air d'être bousculé aujourd'hui.
Laisse moi le temps de te préparer un petit cadeau.
Tu risque d'être surpris.
@+

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

| Excel quand il n'a plus aucune barre à laquelle se référer
| décrèterait alors de mettre le pointeur dans la
| barre de titre

La procédure que je t'ai proposée devrait fonctionner peu importe
les objets (barre de menus, formulabar , Scrollbar...) masqués dans
la fenêtre excel.

| alors de mettre le pointeur dans la barre de titre, la seule
| existant encore et non cachable

Si tu désires masquer la barre de titre d'excel :

'Déclaration dans le haut du module standard des API requis
'--------------------------------------------------
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" Alias
"GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias
"SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As
Long
Const GWL_STYLE = (-16)
Public Const WS_CAPTION = &HC00000


'Cache la barre de titre de l'application Excel
'--------------------------------------------------
Sub CachéLaBarreDeTitreExcel()
Dim hWnd As Long, Style As Long
Nom = ActiveWindow.Application.Parent.Caption
hWnd = FindWindow(vbNullString, Nom)
Style = GetWindowLong(hWnd, GWL_STYLE) And Not WS_CAPTION
SetWindowLong hWnd, GWL_STYLE, Style
End Sub
'--------------------------------------------------

'Affiche la barre de titre de l'application Excel
'--------------------------------------------------
Sub AfficherLaBarreDeTitreExcel()
Dim hWnd As Long, Style As Long
Nom = ActiveWindow.Application.Parent.Caption
hWnd = FindWindow(vbNullString, Nom)
Style = GetWindowLong(hWnd, GWL_STYLE) Or WS_CAPTION
SetWindowLong hWnd, GWL_STYLE, Style
End Sub
'--------------------------------------------------




"milloche" a écrit dans le message de
groupe de discussion :
Il faut dire que dans mon vrai fichier, assez compliqué, quand je réduis
la
fenêtre à 1/4 d'écran, je ne garde plus aucun accessoire et toute la
surface est réservée aux données
Plus de heading, scrollbar,formula bar, statusbar, menubar etc. Rien que
les données et même certaines colonnes sont masquées. Reste seulement la
barre de titre très difficile à enlever. J'avais d'ailleurs demandé là
dessus il y a x mois. Mais reculé devant l'usine à gaz que c'était.
Tu me parlais très justement de ce formatage à ne pas faire avant que la
macro fonctionne. Mais c'est justement le but de cette macro ! Juste
mettre
en page.
La différence provient sans doute de ça. Excel quand il n'a plus aucune
barre à laquelle se référer décrèterait alors de mettre le pointeur dans
la
barre de titre, la seule existant encore et non cachable. C'est au moins
mon explication de candide.
Merci de ton aide car sans elle, j'y serais encore et pour un bout de
temps.
JMM

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

| j'ai juste rajouté un petit 60 à X et Y
| Ne me demande pas pourquoi, mais la souris vient
| pile poil se caler là ou je la voulais.

Tant mieux si tu as trouvé quelque chose à la hauteur de tes attentes.

J'ai testé ta procédure sous Excel 2003 et Excel 2007, et à chaque fois
je me retrouve en A5 et ce, dans une feuille vierge sans avoir
redimensionné quoi que ce soit.

OK, on ne va pas comparer les 2 approches ;-)


'Dans le haut du module, déclaration de l'API
Private Declare Function SetCursorPos Lib "user32" _
(ByVal x As Long, ByVal y As Long) As Long

'--------------------------------------------
Sub Positionnement()
Dim x As Double, y As Double
With ActiveSheet
With .Range("K25")
x = Application.ActiveWindow.PointsToScreenPixelsX((.Left +
(.Width / 2)) * 4 / 3)
y = Application.ActiveWindow.PointsToScreenPixelsY((.Top +
(.Height / 2)) * 4 / 3)
SetCursorPos x, y
End With
End With
End Sub
'--------------------------------------------








1 2 3 4 5