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 :

Impossible d'accéder aux proprités d'un listBox si le classeur est minimisé ? [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut Impossible d'accéder aux proprités d'un listBox si le classeur est minimisé ?
    Bonjour à toutes et tous et merci de votre temps et de votre aide.

    J'ai un classeur que je maninpule depuis Access.
    Ce classeur comporte un certain nombre de feuilles et certaines feuilles ont un listBox.
    Je ne connais pas le nom de la liste mais je sais qu'il n'y en a qu'une au maximum.
    Pour des raisons techniques je suis obligé d'ouvrir le fichier à chaque page.
    Currieusement mon code trouve bien la collection ListBoxes et passe bien le 1ier ListBox en paramètre à une fonction chargée de l'exploiter.
    Pour info, cette fonction attend un Object pour le listBox (pour ne pas dépendre d'une référence à Excel).
    Si le classeur n'est pas minimisé, tout se passe bien et mon code peut lire les propriétés de la liste comme son nombre d'éléments sélectionnés (ou son nom).
    Si mon classeur est minimisé j'ai une erreur 1004 qui me dit que je n'ai pas accès aux propriétés du listBox. Même en mode débug dans la fenêtre d'exécution immédiate.
    On dirait que l'objet est "vérouillé" ou un truc du genre.
    J'ai vérifié le listBox n'est pas Nothing et j'ai fait le test avec .Name sans succès non plus. Il refuse d'accéder aux propriétés.

    Pour le moment j'ai simplement enlevé la minimisation mais cela empèche mon utulisateur de faire autre chose pendant le traitement car Excel "attrape" le focus et donc on se retrouve à taper dans le Excel alors que par exemple on était dans Word ou IE. Bref ce n'est pas pratique !

    Quelqu'un sait-il comment permettre à VBA d'avoir accès au ListBox même si il est minimisé ou alors comment empécher Excel de s'approprier le focus.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  2. #2
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Pourrais-tu nous en dire un peu plus?
    Notamment nous montrer le code incriminé, la déclaration des variables, le type de ListBox (contrôle activex?) etc...

    Pour info, j'ai essayé avec 2 fichiers Excel, l'un a accès à la listbox (activex) de l'autre, quelque soit le mode d'affichage...

    Voici le code utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Sub essailistbox()
    Dim L As MSForms.ListBox
        Set L = Workbooks("TEST LISTBOX.xlsm").Worksheets("Feuil1").ListBox1
        MsgBox L.Name & "  " & L.List(2)
    End Sub

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour et merci de la réponse.

    Je pense que mes ListBox sont des ActiveX mais pas certain.
    Ce n'est pas moi qui ai créé le Excel.
    Le Excel est une "entité" à part car ce code est dans Access.

    Voici le code concerné.

    appel de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oUnitList = fGetSelectedUnit(prm_oExcelApp.oWorksheet.ListBoxes(1))
    Ce code d'appel fonctionne correctement que le Excel externe soit minimisé ou pas.

    prm_oExcelApp.oWorksheet est un Object qui pointe sur la feuille en court de traitement dans le Excel.

    Ici le code où cela casse :

    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
    Private Function fGetSelectedUnit(prm_oListBox As Object) As Collection
        Dim oResult As New Collection
        Dim nUid_GroupeTA As Variant
        Dim nSeq As Long
        Dim tGroupeTA As String
     
        'Évite que Access ne "voit" pas la liste.
        ' Aucune idée pourquoi il fait cela.
        prm_oListBox.Parent.Parent.Activate 'En fait ce code ne change rien si le Excel est minimisé l'erreur se produit
        prm_oListBox.Parent.Activate: DoEvents 'En fait ce code ne change rien si le Excel est minimisé l'erreur se produit
     
        Dim nIUnit As Long: For nIUnit = 1 To prm_oListBox.ListCount 'Ici ça casse si le Excel est minimisé.
     
            If prm_oListBox.Selected(nIUnit) Then
                'Le numéro d'unité est à la fin du texte.
                tGroupeTA = prm_oListBox.List(nIUnit)
                nSeq = fGet_GroupeTA_NoSeq_FormName(tGroupeTA)
                nUid_GroupeTA = fGet_UID_GroupeTA_WithNumSeq(nSeq)
                Call oResult.Add(nUid_GroupeTA)
            End If
     
        Next nIUnit
     
        Set fGetSelectedUnit = oResult
    End Function
    Ce code casse que la feuille courante soit cachée ou pas.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Curieux.
    Je viens de tester (toujours d'Excel vers Excel n'ayant pas Access sous la main), avec ma listbox déclarée As Object, ça passe...
    D'ailleurs pourquoi ne pas la déclarer As MsForms.ListBox? La référence à MsForms est forcément cochée côté Excel [référence cochée automatiquement lors de l'insertion de tous contrôles Activex].
    ***
    prm_oExcelApp.oWorksheet est un Object qui pointe sur la feuille en court de traitement dans le Excel.
    Serait-il possible de voir les déclarations ET affectations des deux variables : prm_oExcelApp et oWorksheet?



    *** Ne pas tenir compte de cette phrase. C'est côté Access...

    EDIT :
    Je viens de tester ce code depuis PowerPoint, ça fonctionne :

    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
    Sub essailistbox()
    Dim L As Object
    Dim xlApp As Object
    Dim Wb As Object
    Dim Wsh As Object
     
        Set xlApp = CreateObject("excel.application")
        xlApp.Visible = True
        Set Wb = xlApp.Workbooks.Open("C:\Users\" & Environ("username") & "\Desktop\TEST LISTBOX.xlsm")
        xlApp.WindowState = -4140
        Set Wsh = xlApp.Workbooks("TEST LISTBOX.xlsm").Worksheets("Feuil1")
        Set L = Wsh.ListBox1
        MsgBox L.Name & "  " & L.List(2)
        Wb.Close False
        xlApp.Quit
        Set xlApp = Nothing
        Set Wb = Nothing
        Set Wsh = Nothing
        Set L = Nothing
    End Sub

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    OK merci de ce retour.

    Je suis sur une méga-urgence sur un autre dossier, je vais revenir à cela aussi tôt que possible.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bon finalement je n'aurai pas le temps avant la fin de mon mandat de résoudre ce bug qui est bien présent en dév. et en prod.

    J'ai prévenu mon client qu'il ne devait pas utiliser son poste lors des traitements.

    Je ferme le discussion.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

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

Discussions similaires

  1. Impossible d'accéder aux propriétés réseau
    Par rabiahb dans le forum Windows
    Réponses: 1
    Dernier message: 28/01/2011, 18h04
  2. Impossible d'accéder aux propriétés de GPO d'une UO
    Par zohir dans le forum Windows Serveur
    Réponses: 0
    Dernier message: 14/05/2009, 17h17
  3. [C#]Accéder aux propriétés d'un User Control
    Par djoao dans le forum Windows Forms
    Réponses: 6
    Dernier message: 10/03/2006, 09h54
  4. Impossible d'accéder aux tables non créées par dbo
    Par Pete dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2005, 14h01
  5. Réponses: 4
    Dernier message: 11/03/2005, 20h31

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