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 :

GetAncestor: quelle est sa .DLL à activer?


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut GetAncestor: quelle est sa .DLL à activer?
    Bonjour,

    Les API GetParent, FindWindow...marchent toutes mais pas GetAncestor elle n'est pas reconnue.

    Voici le message d'erreur:
    Erreur d'exécution: '453'
    Point d'entrée Getancestor d'une DLL introuvable dans user32

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Declare Function Getancestor Lib "user32" (ByVal hwnd As Long, ByVal gaFlags As Long) As Long
     
    avec dans le code VBA
    ancest = 1&
    hWnDAncestor = Getancestor(hChild, ancest)
    Quelle Dll faut il activer svp?

  2. #2
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour,
    ton code,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    hWnDAncestor = Getancestor(hChild, ancest)
    dans cette aide : lien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    child.GetAncestor ( n )
    je constate qu'il n'y a que 1 "info" et avec toi 2

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  3. #3
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Points : 1 441
    Points
    1 441
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Declare Function GetAncestor Lib "user32.dll" ( _
      ByVal hwnd As Long, _
      ByVal gaFlags As Long) As Long
    dans cette page en allemand,

    j'ai noté
    Private Const GA_PARENT = 1
    et toi
    ancest = 1&

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  4. #4
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 475
    Points : 5 630
    Points
    5 630
    Par défaut
    Bonjour,

    Peut-être sensible à la casse : GetAncestor au lieu de Getancestor

    Voir ce lien pour API User32 : https://msdn.microsoft.com/fr-fr/lib...(v=vs.85).aspx
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour

    Dans le bout de code montré (et( probablement non compris) à savoir :
    Declare Function Getancestor Lib "user32" (ByVal hwnd As Long, ByVal gaFlags As Long) As Long

    avec dans le code VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ancest = 1&
    hWnDAncestor = Getancestor(hChild, ancest)
    on voit bien que l'on a "forcé" à 1 (et pourquoi ? C'est le handle de quelle fenêtre, ce 1 ?) le paramètre gaFlags
    On ne voit par contre nulle part comment a été initialisée la variable hChild --->> par défaut (si non initialisée), elle vaut 0 et est donc le hwnd du bureau ! Il se trouve que le bureau n'a pas de "parent" (et encore moins d'ancètre, hein ...) ==>> et donc hWnDAncestor retournera bien évidemment un magnifique (et très logique) 0.
    Et tu t'en étonnes ? Vraiment ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  6. #6
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut
    Merci pour votre aide lu vos commentaires et fait les tests comme vous indiquez...voici pour faire plus simple en code que vous pouvez tester chez vous, ici Getancestor ne se lance pas car non reconnue...toujours le même message...


    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
    27
    28
    29
    30
    Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
    Declare Function Getancestor Lib "user32" (ByVal hwnd As Long, ByVal gaFlags As Long) As Long
    Declare Function GetDesktopWindow Lib "user32" () As Long
    Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
      (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
     
    Const GA_PARENT = 1 'pour utiliser GetAncestor en demandant la recherche du pére
     
    Function Demo()
    Dim hChild As Long
    Dim hParent As Long
    Dim hWnDParent As Long
    Dim hWnDAncestor As Long
    Dim ancest As Long 'pour définir le paramétre de GetAncestor
     
     intrep = MsgBox("Voulez étudier Desktop=>oui ou si=>non 0 qui marche aussi?", vbYesNo)
     If intrep = vbYes Then
     hWnDDesktop = GetDesktopWindow
     hParent = hWnDDesktop
     Else
     hWnDDesktop = 0
     hParent = hWnDDesktop
     End If
     
    hChild = FindWindowEx(hParent, 0, vbNullString, vbNullString) 
    MsgBox hChild
    hWnDAncestor = Getancestor(hChild, GA_PARENT) 'ne marche pas point d'entrée de la DLL introuvable dans user32
    MsgBox hWnDAncestor
     
    End Function

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    242
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 242
    Points : 484
    Points
    484
    Par défaut
    Bonjour
    As-tu essayé ce que Patrice a proposé?

  8. #8
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Septembre 2013
    Messages
    411
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2013
    Messages : 411
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Oui ca y est ca marche...il y a avait un conflit ailleurs qui bloqué les majuscules / minuscules c'est pas croyable ca
    Maintenant GetAncestor marche bien!!!
    Merci à vous

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/02/2009, 15h04
  2. Réponses: 1
    Dernier message: 29/01/2007, 22h43
  3. Réponses: 5
    Dernier message: 06/12/2005, 17h34
  4. Quelle est la fiabilité du protocole SSL ?
    Par Anonymous dans le forum Développement
    Réponses: 5
    Dernier message: 05/09/2002, 13h31

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