Affichage d'userform

Bonjour,

J'ai fait un UserForm qui doit être lancé au clic sur une cellule. Celui-ci doit apparaître à coté du curseur.

Pour cela j'ai trouvé un code que j'ai implémenter de la manière suivante :

Private Type POINTAPI
    X As Long
    Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Sub UserForm_Initialize()
    Dim Pt As POINTAPI
    GetCursorPos Pt
    MsgBox "x : " & Pt.X & " ; Y " & Pt.Y
    With UserForm1
        .Left = Pt.X
        .Top = Pt.Y
    End With

    der_ligne = ThisWorkbook.Sheets("liste des clients").Range("A" & Rows.Count).End(xlUp).Row

    For i = 1 To der_ligne
        ComboBox1.AddItem ThisWorkbook.Sheets("liste des clients").Range("A" & i).Value
    Next

End Sub

Le tout est appelé dans une détection de changement de sélection.

J'ai malheureusement remarqué qu'un décalage entre l'endroit du clic et l'apparition de la fenêtre se faisait. Auriez-vous un correctif à proposer ? Une constante à soustraire pour obtenir la bonne valeur ?

Arthur

Bonjour,

ajoute cette ligne en début de macro

Me.StartUpPosition = 0

Bonjour i20100,

J'ai essayé la ligne que tu m'as donnée, malheureusement elle ne fonctionne pas.

J'ai aussi essayé de soustraire une partie pour que cela soit parfait mais je n'ai toujours pas trouver le bon coef :/

(Pt.X - (Pt.X / 3;6) se rapproche petit a petit du truc mais pas partout.

Si tu as d'autre idées ....

Sinon je partirai sur un truc simple, le mettre au milieu de l'écran ... mais bon ....

Arthur.

Je reviens vers vous pour expliquer plus simplement x)

Avez-vous un code qui permet d'ouvrir un userform prédéfinie là ou l'on clique sur une feuille excel ? (genre centré sur la cellule cliqué )

re,

voici un exemple,

Bonjour i20100

merci pour ton exemple.

Finalement je suis partie sur ça :

Private Type POINTAPI
    X As Long
    Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Sub ComboBox1_Change()
    ThisWorkbook.Sheets("cde en cours").Range("E" & ActiveCell.Row).Value = ComboBox1.Value
End Sub

Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    ThisWorkbook.Sheets("cde en cours").Cells(ActiveCell.Row, 6).Select
    Unload Me
End Sub

Private Sub UserForm_Initialize()
    Dim Pt As POINTAPI
    GetCursorPos Pt
    'MsgBox "x : " & Pt.X & " ; Y " & Pt.Y
    With UserForm1
        .StartUpPosition = 0
        .Left = -10
        .Top = 0
        .Left = Me.Left + Pt.X - (Pt.X / 3.1)
        .Top = Me.Top + Pt.Y - (Pt.Y / 3.3)
    End With

    der_ligne = ThisWorkbook.Sheets("liste des clients").Range("A" & Rows.Count).End(xlUp).Row

    For i = 1 To der_ligne
        ComboBox1.AddItem ThisWorkbook.Sheets("liste des clients").Range("A" & i).Value
    Next
End Sub

qui fonctionne assez bien, tant qu'on a le fichier Excel positionné sur l'écran 1 (défini dans les paramètre Windows)

merci tout de même pour tes efforts.

Cordialement,

Arthur.

Rechercher des sujets similaires à "affichage userform"