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 :

récupérer la position exacte d'une cellule (Avec les API) [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut récupérer la position exacte d'une cellule (Avec les API)
    Bonjour,

    Pour pouvoir positionner exactement un USF particulier,je désire récupérer la position exacte de la cellule (La cellule active par exemple) quelles que soit les options en vigueur à l'instant T.

    Je sais le faire par rapport à un autre USF, mais je voudrais aussi pouvoir le faire par rapport à la position exacte d'une cellule.
    Je sais le faire également sans API, mais dans ce cas ce n'est possible que s'il n'y a pas de scrolling, sinon l'affichage passe en dehors de l'écran.
    C'est la raison pour laquelle il me semble nécessaire de passer par les API.

    Hum... Il y a aussi un problème de zoom, là ce serait la cerise sur le gâteau ! Mébon l'essentiel serait déjà de gérer le scroll.

    Merci.

  2. #2
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Bonjour galopin01,

    Avec les deux propriétés du code ci-dessous tu devrais t'en sortir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
     
    Dim rg As Range
    Set rg = ActiveCell
     
    MsgBox "Position par rapoprt a l'en-tete de colonne " & rg.Top
    MsgBox "Position par rapoprt a l'en-tete de ligne " & rg.Left
     
    'Positionne la cellule en haut a gauche
    ActiveWindow.ScrollRow = rg.Row
    ActiveWindow.ScrollColumn = rg.Column
     
    End Sub

  3. #3
    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

    mais non!!!

    colle 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
    Option Explicit
    Private Declare Function GetDC& Lib "user32.dll" (ByVal hwnd&)
    Private Declare Function GetDeviceCaps& Lib "gdi32" (ByVal hDC&, ByVal nIndex&)
     
    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
    ensuite dans le activate du userform par exemple
    tu met ceci si tu veux que le userform se mette sur la cellule active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    position_usf Me, ActiveCell
    sinon si tu veux gérer l'affichage en dehors du module userform
    tu met dans une sub dans le meme module standard par exemple avec un userform nommé "userform1"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    sub position usf()
    position_usf userform1, cells(45,18)
    end sub
    l'userform1 se positionnera sur la cellule ligne 45,colonne 18 le scroll sera automatique
    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

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    Bonjour,
    [Edit] Pas vu le message de patricktoulon... Je vais examiner sa proposition et je reviendrai plus tard !


    anthonysansh :
    Je connaissais effectivement le ScrollRow... Et j'y suis effectivement arrivé avec un codage un peu bourrin :
    Je pense que ce serait plus clean avec les API mébon... en attendant ça dépanne !

    Merci encore.

    Je laisse néanmoins le post ouvert car bien que la question revienne souvent elle n'a jamais été résolue avec les API, mais toujours avec des contours tirés par les cheveux...

    Le code actuel (Fonctionne sur colonne J et gère le scroll descendant à partir de la ligne 10)
    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
    Option Explicit
    Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Dim i%, j%, k%, iR%, x&, y&, param$
       If Target.Count = 1 And Target.Column = 10 Then
       Cancel = True
          iR = Application.CommandBars.Item("Ribbon").Height
          x = Target.Left
          y = Target.Top
          If Target.Row > 10 Then
          ActiveWindow.ScrollRow = Target.Row - 10
             y = y - (Target.Row - 11) * Target.Height
          Else
             ActiveWindow.ScrollRow = 1
          End If
          i = iR - IIf(iR < 100, 14, 36)
          j = IIf(Application.DisplayFormulaBar = True, 20, 0)
          k = IIf(ActiveWindow.DisplayHeadings = True, 15, 0)
          param = Target.Height + i + j + k + y
          param = param & " " & Target.Left + k + 1 / 3 * k
     
          i = UserForm1.ShowUSF(param)
        End If
    End Sub
    Et le code du UserForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Function ShowUSF(Var$)
    Dim T
    T = Split(Var)
    Me.Top = T(0)
    Me.Left = T(1)
    Me.Show
    End Function
    A+

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 205
    Par défaut
    bonjour patricktoulon,
    Ok c'est bon, Je pense pouvoir adapter.

    Superbe !

    Merci.
    Bonne soirée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment ajouter une chaîne dans une liste avec les API Windows ?
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 02/02/2013, 13h47
  2. Déplacer une fenêtre avec les API user32.dll.
    Par jmix90 dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 11/06/2009, 11h42
  3. Réponses: 2
    Dernier message: 04/02/2009, 12h13
  4. Récupérer Coordonnées d'une Cellule avec un Vlookup
    Par mouimouic dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/01/2008, 19h34
  5. Comment récuperer la position d'une cellule avec un Range.
    Par branqueira dans le forum VBA Access
    Réponses: 1
    Dernier message: 28/05/2007, 11h39

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