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 :

utiliser le type d'un OLEObject ? (Transtypage)


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut utiliser le type d'un OLEObject ? (Transtypage)
    Salut,

    je crée dynamiquement une listbox. J'utilise donc un OLEObject.
    Le probleme c'est que je ne peux plus avoir accés aux fonctions de la listbox;
    il ne s'affiche que les fonctions d'un OLEObject.
    Pourtant qd j'utilise typename(list.object) ca retourne bien "ListBox"!!!
    Comment je dois faire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    For i = 1 To 2
            Dim list As OLEObject
     
            Set list = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ListBox.1", Link:=False, _
                        DisplayAsIcon:=False, Left:=348, Top:=337, _
                        Width:=94, Height:=345)
     
            MsgBox TypeName(list.Object)
     
            list.Name = "list" & i
     
        Next i

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Une fois ta listbox "list1" créée, pour par exemple introduire les valeurs de la plage A1 à A10, tu peux l'utiliser comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.list1.ListFillRange = "A1:A10"
    C'était ça ta question ?

    PS : je ne sais pas si tu as remarqué mais tes 2 listbox se créent l'une sur l'autre

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut
    bonjour fring,

    merci pour ton aide mais j'ai du mal m'exprimer.
    En effet, je voudrais faire en sorte d'utiliser les fonctions de la listbox
    comme "listindex" ou "listcount".
    Pour l'instant cela bugge car le compilateur voit ca comme des OLEObjects.
    Tu sais comment faire stp?

    PS: oui en effet j'avais vu qu'elles se superposent mais c'est juste que je ne me suis pas encore occupé de la partie affichage lol

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Je n'utilise quasiment jamais un contrôle directement sur la feuille, je ne connais pas toutes les propriétés possibles. Je n'ai pas l'impression que la propriété Listindex existe pour une listbox directement insérée sur la feuille.


    Quelques exemples :

    Compter le nombre de lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ActiveSheet.List1.ListCount
    Récupérer le contenu de toute la listbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim i As Integer
     
    With ActiveSheet
    For i = 0 To .List1.ListCount - 1
            .Cells(i + 1, 2) = .List1.list(i)
        Next i
    End With
    Récupérer le contenu de la ligne 4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ActiveSheet.List1.List(3)
    Récupérer le contenu de la ligne sélectionnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox ActiveSheet.List1.Text

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut
    Merci pour l'info sur listindex pour la création.
    Cpdt je refais un exemple peut etre plus clair de mon probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    For i = 1 To nbOF
            Dim ole As OLEObject
            Dim list As ListBox
     
            Set ole = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ListBox.1", Link:=False, _
                        DisplayAsIcon:=False, Left:=348, Top:=337, _
                        Width:=94, Height:=345)
     
            Set list = ole.Object
     
     
        Next i
    Je voudrais récupérer le type listbox de la variable car autant pour tes exemples que pour "Set list = ole.Object", j'obtiens une erreur d,incompatibilité de type.

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut

    J'ai trouvé!!
    Merci Fring pour ton aide qund meme!!!!!

    En fait il faut faire un Set avec une variable définit avec MsForm, allez voir ci-dessou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For i = 1 To 2
            Dim ole As OLEObject
            Dim list As MSForms.ListBox
            
            Set ole = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ListBox.1", Link:=False, _
                        DisplayAsIcon:=False, Left:=348, Top:=337, _
                        Width:=94, Height:=345)
            
            Set list = ole.Object
            list.Name = "list" & i
            
        Next i
    Cela permet donc d'effectuer le transtypage OLEObject ==> ListBox
    Et je suppose que cela devrait marcher pour tout type

  7. #7
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Je ne comprend pas pourquoi l'utilisation de la variable list ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For i = 1 To 2
            Dim ole As OLEObject
            Dim list As MSForms.ListBox
     
            Set ole = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ListBox.1", Link:=False, _
                        DisplayAsIcon:=False, Left:=348, Top:=337, _
                        Width:=94, Height:=345)
     
            ole.Name = "list" & i
     
        Next i

  8. #8
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut
    en fait j'avais besoin d,accéder aux parametres des listbox afin de les creer selon mes criteres, exemple :
    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
    For i = 1 To nbOF
            Dim list As MSForms.ListBox
     
            Set ole = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ListBox.1", Link:=False, _
                        DisplayAsIcon:=False, Left:=348, Top:=337, _
                        Width:=61, Height:=200)
     
     
            Set list = ole.Object
            With list
                .
                .BorderStyle = fmBorderStyleSingle
                .ColumnCount = 2
                .ColumnHeads = True
                .ColumnWidths = 30
                .SpecialEffect = fmSpecialEffectSunken
                .Name = "list" & i
            End With
     
        Next i

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/12/2005, 16h54
  2. [D2005] Utilisation des types énumérés
    Par bouha dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 21/07/2005, 22h21
  3. Erreur utilisation de type indéfini
    Par hanane_iaai dans le forum C++
    Réponses: 3
    Dernier message: 04/07/2005, 17h34
  4. [HTML]Utilisation du type file
    Par Kuroro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 23/12/2004, 16h12
  5. utilisation du type DATE d'interbase
    Par dibak dans le forum InterBase
    Réponses: 4
    Dernier message: 05/01/2004, 15h03

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