IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Positionner UserForm sur cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut Positionner UserForm sur cellule
    Bonjour à tous,

    Je cherche le moyen de positionner correctement un UserForm sur une cellule.

    J'ai rapidement compris que le simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.Top = Activecell.Top
    Me.Left = Activecell.Left
    Ne fonctionnais pas, semble-t-il à cause d'un conversion nécessaire entre Pt et Px.

    J'ai donc tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.Left = ActiveWindow.PointsToScreenPixelsX(pPosition.Left)
    Me.Top = ActiveWindow.PointsToScreenPixelsY(pPosition.Top)
    Mais ça ne donne pas vraiment un résultat plus probant

    J'ai trouvé ce sujet : http://www.developpez.net/forums/d82...pport-cellule/
    Mais cela ne fonctionne pas correctement non plus, le UserForm est quand même largement décalé.

    Petite précision, je ne sais pas si ça peu jouer mais j'ai retiré la CaptionBar du UserForm.

    Merci pour votre aide

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour

    met ca dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Option Explicit
     Declare Function GetDC& Lib "user32.dll" (ByVal hwnd&)
     Declare Function GetDeviceCaps& Lib "gdi32" (ByVal hDC&, ByVal nIndex&)
    ' Fonction d'acquisition de l'identifiant de la fenêtre active
    Private Declare Function GAW Lib "User32" Alias "GetActiveWindow" () As Long
    ' Fonction de changement
    Private Declare Function SWL Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    'Fonction pour redresser l'affichage de la form sans la caption
    Private Declare Function DrawMenuBar Lib "User32" (ByVal hwnd As Long) As Long
     
      Sub Sans_Caption()
        SWL GAW, -16, &H94080080: SWL GAW, -20, 0: DrawMenuBar GAW
    End Sub
    Sub position_usf(usf, cel)
    ' 1 inch = 72 points for usually 96 or 120 dpi
    Dim x#, y#, w#, h#
    x = GetDeviceCaps(GetDC(0), 88) / 72
    y = GetDeviceCaps(GetDC(0), 90) / 72
    With usf
    .StartUpPosition = 0
    .Left = (ActiveWindow.PointsToScreenPixelsX(cel.Left * x) * 1 / x)
    .Top = (ActiveWindow.PointsToScreenPixelsY(cel.Top * y) * 1 / y)
    End With
    ActiveWindow.ScrollRow = cel.Row
    ActiveWindow.ScrollColumn = cel.Column
    End Sub
    et dans le activate de l'userform tu met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Activate()
    Sans_Caption
    position_usf Me, ActiveCell
    End Sub
    au load de ton userform il s'affiche a l'angle gauche haut de ta cellule active et sans caption
    si ta cellule active n'est pas visible le scroll de la feuille se fait automatiquement

    adit:
    supprime les deux ligne de scroll c'est pas au point je fait une erreur quelque part
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    regarde le fichier et fais un double Click sur un cellule!
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Merci pour vos réponses.

    @patricktoulon : Ne fonctionne pas, le form est beaucoup plus haut que la cellule active et décaler vers la gauche
    La sub Sans_Caption ne fonctionne pas, mais j'ai déjà le code pour le cacher.
    Comment fonctionne-t-elle sans le Handle de la fenêtre ?

    @rdurupt : Pareille, il se positionne au même endroit qu'avec le code de @patricktoulon
    Et se pose aussi le problème du Zoom, si celui-ci n'est pas à 100 la position de ton Calendard n'est pas bonne

    En PJ le XLSX, la colonne dans laquelle je veux afficher le form sur selection_change est K
    Classeur1.xlsx

  5. #5
    Invité
    Invité(e)
    Par défaut
    je un peut d’adaptation!
    Fichiers attachés Fichiers attachés

  6. #6
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Génial !!

    Je remarque juste qu'il doit y avoir quelques valeur à adapter en fonction de la taille du UserForm.
    Sur X et Y ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    X = (Target.Left - ActiveWindow.VisibleRange.Left + 45) * ActiveWindow.Zoom / 100
    Y = (Target.Top + Target.Height - ActiveWindow.VisibleRange.Top + 9.3 + 226) * ActiveWindow.Zoom / 100
    Le + 45 et le + 226 ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/03/2015, 11h35
  2. Positionner une UserForm sur une Worksheet.window
    Par metis dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/10/2012, 17h20
  3. [XL-2003] Positionnement Userform par rapport cellule
    Par Johakr dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/03/2011, 14h17
  4. [XL-2003] Afficher un UserForm par un clic sur cellule
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/09/2010, 09h44
  5. clic sur cellule et ouverture userform
    Par jonathanoudelet dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/08/2008, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo