XL 2016 Comment détecter la position de la barre des tâches

Roland_M

XLDnaute Barbatruc
Bonsoir tout le monde,

je ne trouve rien sur le net à ce sujet !?
code ou astuce pour détecter la position de la barre des tâches H/B/G/D !?
Merci d'avance.

j'ai mis version 2016 mais aussi pour 2007

EDIT: avec API probablement !?
mais si c'est une astuce sans api ce n'est pas plus mal !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

Ce que je voulais dire:
Reviens (if you want) publier ton code utilisant l'API (que j'ai cité dans le message#8) pour les lecteurs de ce fil qui rencontreraient la même problématique que toi.
(Histoire de rester dans l'esprit du forum: partage des connaissances etc... ;))
 

job75

XLDnaute Barbatruc
et certain pc on la barre des tâches à des endroits différents, pas toujours en bas !
et là le placement de ces userforms se retrouve derrière la barre des tâches !
si j'ai demandé ça ce n'est pas par caprices, j'ai passé l'âge !
Moi aussi j'ai passé l'âge... de bricoler du VBA.

Un être normalement constitué voyant que la barre placée en haut cache l'UserForm la remettra en bas.
 

Roland_M

XLDnaute Barbatruc
Bonjour,

après une bonne nuit de sommeil, petit retour pour confirmer que ça fonctionne bien
comme promis je verrai pour faire une demo

j'ai modifié avec VBA7 (essai sur 2016 Ok)
#If VBA7 Then
Private Declare PtrSafe Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As LongPtr
#Else
Private Declare Function SHAppBarMessage Lib "shell32.dll" (ByVal dwMessage As Long, pData As APPBARDATA) As Long
#End If

et la macro qui m'est utile: (avec bien entendu toutes les déclarations au préalable)
Public Function FPositionBarreDesTaches%()
Dim ABD As APPBARDATA
ABD.cbSize = Len(ABD): SHAppBarMessage ABM_GETTASKBARPOS, ABD 'appel fonction
FPositionBarreDesTaches = ABD.uEdge '(0-left, 1-top, 2-right, 3-bottom)
End Function

@Job45
Pour comprendre il faut connaître le contexte !
entreprise(verrerie flaconnage) qui tourne 24h/24 et 7jrs/7 avec suivi de production
et donc pointages divers toutes les heures !
vous comprenez que les personnes ne vont pas à chaque fois déplacer l'userform
vous me direz qu'il suffirait qu'ils positionnent la barre en bas !
mais moi je ne travaille pas comme ça, je fais en sorte d'adapter le programme
sans poser de contraintes à l'utilisateur, tout comme le ferai des professionnels (du moins j'essaye)
 

job75

XLDnaute Barbatruc
Bonjour à tous,

On remarquera que quand on modifie la position de la barre des tâches l'application Excel se repositionne automatiquement.

Profitons-en pour positionner correctement l'UserForm, voyez le fichier joint et cette macro :

VB:
Sub USF()
Application.WindowState = xlMaximized 'taille maximum
With UserForm1
    .Show 0 'non modal
    .Top = Application.Top
    .Left = Application.Left
End With
End Sub
A+
 

Pièces jointes

  • Barre des tâches(1).xlsm
    20.8 KB · Affichages: 5

job75

XLDnaute Barbatruc
mais comment on fait, par exemple, pour le haut droit et le bas droit ?
Ce n'est pas bien sorcier, il faut choisir la position de l'UserForm, vois le fichier joint et cette macro :
VB:
Sub USF()
Dim position$
While IsError(Application.Match(position, Array("HG", "HD", "BG", "BD"), 0))
    position = UCase(InputBox("Entrez la position HG HD BG ou BD :", "Position de l'UserForm", position))
    If position = "" Then Exit Sub
Wend
Application.WindowState = xlMaximized 'taille maximum
With UserForm1
    .Show 0 'non modal
    Select Case position
        Case "HG": .Top = Application.Top: .Left = Application.Left
        Case "HD": .Top = Application.Top: .Left = Application.Left + Application.Width - .Width
        Case "BG": .Top = Application.Top + Application.Height - .Height: .Left = Application.Left
        Case "BD": .Top = Application.Top + Application.Height - .Height: .Left = Application.Left + Application.Width - .Width
    End Select
End With
End Sub
 

Pièces jointes

  • Position USF(1).xlsm
    22.8 KB · Affichages: 2
Dernière édition:

Roland_M

XLDnaute Barbatruc
re

EDIT: j'ai supprimé la copie d'écran car il y avait des noms !

merci Job pour ton investissement, mais ça je connais !
le problème c'est qu'il faut mettre en .Show 0 'non modal
or ici ce n'est pas possible, car il est interdit d'intervenir manuellement sur les feuilles !
vois un peu un exemple entre autres sur des pointages de personnes, présentes ou pas, poste, etc ...
voici la page complète mais pas la feuille car il y a 3 pauses ! (bleu)Matin (rouge)ApMidi (noire)Nuit on ne le vois pas
c'est l'userform qui sert de base de commandes ! sinon on taperait n'importe quoi ou flinguer le format !
et pour extraire des données il faut respecter rigoureusement un format donné !
 
Dernière édition:

job75

XLDnaute Barbatruc
le problème c'est qu'il faut mettre en .Show 0 'non modal
or ici ce n'est pas possible, car il est interdit d'intervenir manuellement sur les feuilles
Là tu me surprends beaucoup, bien sûr on n'est pas du tout obligé d'ouvrir l'USF en non modal, fichier (2) :
VB:
Sub USF()
Dim position$
While IsError(Application.Match(position, Array("HG", "HD", "BG", "BD"), 0))
    position = UCase(InputBox("Entrez la position HG HD BG ou BD :", "Position de l'UserForm", position))
    If position = "" Then Exit Sub
Wend
Application.WindowState = xlMaximized 'taille maximum
With UserForm1
    .StartUpPosition = 0 'Manual
    Select Case position
        Case "HG": .Top = Application.Top: .Left = Application.Left
        Case "HD": .Top = Application.Top: .Left = Application.Left + Application.Width - .Width
        Case "BG": .Top = Application.Top + Application.Height - .Height: .Left = Application.Left
        Case "BD": .Top = Application.Top + Application.Height - .Height: .Left = Application.Left + Application.Width - .Width
    End Select
    .Show
End With
End Sub
 

Pièces jointes

  • Position USF(2).xlsm
    21.9 KB · Affichages: 5
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour j'ai survolé la discussion
une proposition simple pour détecter la barre des tache en top ou en down
VB:
Sub test()
    Dim app, w, h, t, l, wst
    Set app = Application
    With app
       .ScreenUpdating = False
        wst = .WindowState
        w = .Width: h = .Height: t = .Top: l = .Left
        Application.WindowState = xlMaximized
        If Application.Top > -1 Then b = "top" Else b = "down"
        .WindowState = wst
        If wst <> xlMaximized Then
            .Left = l: .Top = t + 1: .Width = w: Height = h
        End If
    End With
MsgBox "taskbar " & b
End Sub
 

patricktoulon

XLDnaute Barbatruc
a relire les post jusqu'au 23 je suis surpris moi aussi
le haut gauche , le haut droite , le bas gauche , le bas droite
il est facile de le detemrminer

exemple: le bas droite
le left= application.left+application.width-userform.width
le top = application.top+application.height-userform1.height
@Rolland on a vu ça déjà avec la partie contrainte de mon calendrier non?
 

Discussions similaires