Se connecter avec
S'enregistrer | Connectez-vous

[non résolu^^]Récupérer valeur d'une liste déroulante (vba excel)

Dernière réponse : dans Programmation
Partagez

Bonjour,

Voilà quelques jours que je cherche la méthode pour récupérer la valeur d'une liste déroulante (objet de formulaire), insérée directement depuis une feuille de calcul, et non un userform.


Je cherche également si il est possible de mettre les données dans cette liste sans passer par une sélection de cellules.

Merci d'avance

(ps : kangol t'énerve pas :D )
Contenus similaires

Donc, j'ai créer une liste déroulante dans une feuille excel.

Et je voudrais récuperer la valeur sélectionnée de la liste déroulante en code VBA.

Ce qui donne ca :

A bas quand c'est bien expliqué ! :o 

C'est ça que tu cherches ?
  1. Workbooks("Classeur1").Worksheets("Feuil1").OLEObjects("ComboBox1").Object.Value


Y'a plus qu'à mettre [RESOLU] dans le titre :sol: 

Merci pour la réponse, mais ... :( 

J'ai mis ceci :

  1. test_var = Worksbooks("Valeurs en cours 0002.xls").Worksheets("Macros").OLEObjects("variation_stock").Object.value


Et j'ai une erreur :
"erreur d'exécution 1004
Imopssible de lire la propriété OLEObjects de la classe Worksheet

ps : j'utilise Excel 2003

[PAS ENCORE RESOLU]


Essaie ça :
  1. Dim c As OLEObject
  2.  
  3. For Each c In Worksbooks("Valeurs en cours 0002.xls").Worksheets("Macros").OLEObjects
  4. Debug.Print c.Name
  5. Next

Le vrai nom de ta combo devrait apparaître dans la fenêtre DEBUG.

je vien de trouver une solution de secours, mais pas trés propre, cela consite à liée une cellule, et faire des conditions sur le code ( ligne 1, 2 et 3, pour mon cas précis, c'est ok ).

je teste quand même ton code, pour infos ;) 

Citation :
Ben en posant une combobox depuis la barre d'outils "Boîte à outils Contrôles" [:spamafote]

caramou a dit :
J'ai rien qui apparait :o 


Han, tu n'as pas utilisé la barre d'outils "Boîte à outils Contrôles" mais la barre "Formulaire" !
Ton composant ne s'appelle pas "Combobox1" mais "Drop Down 1" !

Ceci pour voir ton composant :
  1. Dim s As Shape
  2.  
  3. With Workbooks("Classeur1").Worksheets("Feuil1")
  4. Debug.Print "Nombre d'objets sur la feuille : " & Shapes.Count
  5. For Each s In .Shapes
  6. Debug.Print "- "; s.Name
  7. Next
  8. End With


Donc la réponse a ton problème :
  • Ta solution de contournement est LA solution.

    Tips: Utilise les objets OLE de la barre d'outils "Boîte à outils Contrôles".
  • Bonjour,

    J'ai exactement le même problème que dtom (1 an après sur excel 2007).

    Pareil, j'ai dessiné une combobox avec controles, je l'ai remplie avec une plage de mes feuilles.
    Mais j'ai besoin de retrouver la valeur choisie dans la combo pour faire un tri sur une autre page et ainsi afficher un beau graphe.

    Voici le code qui me permet de faire le tri:

    Sheets("ASD DPQR Tier 1").Select
    Rows("1:1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$DG$176").AutoFilter Field:=10
    Sheets("Graph Highlight").Select

    Sheets("ASD DPQR Tier 1").Select
    Range("J1").Select
    ActiveSheet.Range("$A$1:$DG$176").AutoFilter Field:=10, Criteria1:= _
    "LO1_R1X3_12"

    'Ici entre guillemets, une des valeurs que j'aimerais récupérer de ma combo.
    'J'ai déjà essayé avec Combobox1.Value, mais comme je ne connais pas le nom de la combo ça ne sert à rien.
    'Pour le code ci dessus, pour retrouver le nom, je n'arrive pas à le faire marcher.
    'Drop Down 1 ne marche pas non plus.


    Sheets("Graph Highlight").Select


    Merci d'avance pour vos réponses,

    Charly

    Salut Charly,

    Vire-moi ces couleurs infâmes. Tu en profiteras pour utiliser la balise [code], conformément au règlement. Je suis sûr que tu attendais d'autres commentaires :/ 

    Bonjour,

    J'ai exactement le même problème que dtom (1 an après sur excel 2007).

    Pareil, j'ai dessiné une combobox avec controles, je l'ai remplie avec une plage de mes feuilles.
    Mais j'ai besoin de retrouver la valeur choisie dans la combo pour faire un tri sur une autre page et ainsi afficher un beau graphe.

    Voici le code qui me permet de faire le tri:

    1. Sheets("ASD DPQR Tier 1" ).Select
    2. Rows("1:1" ).Select
    3. Selection.AutoFilter
    4. ActiveSheet.Range("$A$1:$DG$176" ).AutoFilter Field:=10
    5. Sheets("Graph Highlight" ).Select
    6.  
    7. Sheets("ASD DPQR Tier 1" ).Select
    8. Range("J1" ).Select
    9. ActiveSheet.Range("$A$1:$DG$176" ).AutoFilter Field:=10, Criteria1:= _
    10. "LO1_R1X3_12"
    11. Sheets("Graph Highlight" ).Select


    'Ici entre guillemets ("LO1_R1X3_12"), une des valeurs que j'aimerais récupérer de ma combo.
    'J'ai déjà essayé avec Combobox1.Value, mais comme je ne connais pas le nom de la combo ça ne sert à rien.
    'Pour le code ci dessus, pour retrouver le nom, je n'arrive pas à le faire marcher.
    'Drop Down 1 ne marche pas non plus.


    Merci d'avance pour vos réponses,

    Charly


    PS: C'est bon comme ça?
    oui c'est sur, j'ai attendu une réponse toute l'après midi, au moment où j'allais éteindre l'ordi, je reçoit le message, tout excité j'ouvre et non pas de réponse :-(

    Citation :
    PS: C'est bon comme ça?

    Oui, à par que tu n'as pas modifié ton message, tu en as créé un autre. Du coup, je ne peux plus virer le mien. Ce n'est pas grave.

    Je regarde ton problème et je te réponds.

    Citation :
    mais comme je ne connais pas le nom de la combo ça ne sert à rien.

    C'est bien le problème, gros malin !

    Voici de quoi le trouver, le nom de ton composant :
    1. Option Explicit
    2.  
    3. Private Function ShapeType(n As Integer) As String
    4. Select Case n
    5. Case msoAutoShape: ShapeType = "msoAutoShape"
    6. Case msoCallout: ShapeType = "msoCallout"
    7. Case msoCanvas: ShapeType = "msoCanvas"
    8. Case msoChart: ShapeType = "msoChart"
    9. Case msoComment: ShapeType = "msoComment"
    10. Case msoDiagram: ShapeType = "msoDiagram"
    11. Case msoEmbeddedOLEObject: ShapeType = "msoEmbeddedOLEObject"
    12. Case msoFormControl: ShapeType = "msoFormControl"
    13. Case msoFreeform: ShapeType = "msoFreeform"
    14. Case msoGroup: ShapeType = "msoGroup"
    15. Case msoLine: ShapeType = "msoLine"
    16. Case msoLinkedOLEObject: ShapeType = "msoLinkedOLEObject"
    17. Case msoLinkedPicture: ShapeType = "msoLinkedPicture"
    18. Case msoOLEControlObject: ShapeType = "msoOLEControlObject"
    19. Case msoPicture: ShapeType = "msoPicture"
    20. Case msoScriptAnchor: ShapeType = "msoScriptAnchor"
    21. Case msoShapeTypeMixed: ShapeType = "msoShapeTypeMixed"
    22. Case msoTable: ShapeType = "msoTable"
    23. Case msoTextBox: ShapeType = "msoTextBox"
    24. Case msoTextEffect: ShapeType = "msoTextEffect"
    25. End Select
    26. End Function
    27.  
    28. Sub ListShapes()
    29. Dim wb As Workbook
    30. Dim sh As Object
    31. Dim tx As String
    32. Dim shp As Shape
    33.  
    34. Dim sep As String
    35.  
    36. sep = ""
    37. tx = ""
    38. For Each wb In Workbooks
    39. tx = tx & sep
    40. tx = tx & "Classeur : <" & wb.CodeName & "> "
    41. tx = tx & """" & wb.Name & """ "
    42. tx = tx & "[" & TypeName(wb) & "]" & vbCrLf
    43. tx = tx & " Feuilles de calcul : " & wb.Worksheets.Count & vbCrLf
    44. tx = tx & " Feuilles graphiques : " & wb.Charts.Count & vbCrLf
    45. For Each sh In wb.Sheets
    46. tx = tx & vbCrLf & " Feuille : <" & sh.CodeName & "> "
    47. tx = tx & """" & sh.Name & """ "
    48. tx = tx & "[" & TypeName(sh) & "]" & vbCrLf
    49. tx = tx & " Objets : " & sh.Shapes.Count & vbCrLf
    50. For Each shp In sh.Shapes
    51. tx = tx & " Objet : <" & shp.Name & "> "
    52. On Error Resume Next
    53. tx = tx & """" & shp.OLEFormat.Object.Caption & """"
    54. tx = tx & """" & shp.OLEFormat.Object.Object.Caption & """"
    55. tx = tx & """" & shp.OLEFormat.Object.Object.Text & """"
    56. tx = tx & " [" & ShapeType(shp.OLEFormat.Object.ShapeRange.Type) & "]"
    57. On Error GoTo 0
    58. tx = tx & vbCrLf
    59. Next
    60. Next
    61. sep = "--------------------------------------------------------" & vbCrLf
    62. Next
    63. MsgBox tx
    64. End Sub

    Bonjour zeb,

    Merci beaucoup pour ta réponse, mais je n'y arrive toujours pas.

    Les formes créées sont elles toujours de la forme:

    1. Case msoAutoShape: ShapeType = "msoAutoShape"
    2. Case msoCallout: ShapeType = "msoCallout"
    3. Case msoCanvas: ShapeType = "msoCanvas"
    4. Case msoChart: ShapeType = "msoChart"
    5. Case msoComment: ShapeType = "msoComment"
    6. Case msoDiagram: ShapeType = "msoDiagram"
    7. Case msoEmbeddedOLEObject: ShapeType = "msoEmbeddedOLEObject"
    8. Case msoFormControl: ShapeType = "msoFormControl"
    9. Case msoFreeform: ShapeType = "msoFreeform"
    10. Case msoGroup: ShapeType = "msoGroup"
    11. Case msoLine: ShapeType = "msoLine"
    12. Case msoLinkedOLEObject: ShapeType = "msoLinkedOLEObject"
    13. Case msoLinkedPicture: ShapeType = "msoLinkedPicture"
    14. Case msoOLEControlObject: ShapeType = "msoOLEControlObject"
    15. Case msoPicture: ShapeType = "msoPicture"
    16. Case msoScriptAnchor: ShapeType = "msoScriptAnchor"
    17. Case msoShapeTypeMixed: ShapeType = "msoShapeTypeMixed"
    18. Case msoTable: ShapeType = "msoTable"
    19. Case msoTextBox: ShapeType = "msoTextBox"
    20. Case msoTextEffect: ShapeType = "msoTextEffect"


    Enfin bref, j'ai testé ta macro, il me dit que j'ai 3 pages, me donne les caractéristiques de ce qui se trouve sur toutes les feuilles sauf celles dont j'ai besoin, est ce que cela veut dire qu'il n'y a rien sur la feuille ou il y a la combobox?

    Comme cela ne marchait pas, j'ai essayé avec tous les Shapetype de la liste, en mettant le ShapeType.Value à la place de ce que j'avais entre guillemets, faut il mettre les guillemets? car je les ai enlevés vu que je n'insérait pas de valeur directement.

    Merci encore pour tes réponses,

    Au fait, comment as tu appris à faire celà? (ce que tu m'as pondu était vraiment ... la classe ;-))

    Charly

    Citation :
    Les formes créées sont elles toujours de la forme:
    ...
    Oui. C'est la liste exhaustive des valeurs possibles pour le type MsoShapeType, à deux valeurs près. Il manque les types msoMedia et msoPlaceholder. Ils sont utilisables dans d'autres applications Office.

    Citation :
    Enfin bref, j'ai testé ta macro, il me dit que j'ai 3 pages, me donne les caractéristiques de ce qui se trouve sur toutes les feuilles sauf celles dont j'ai besoin, est ce que cela veut dire qu'il n'y a rien sur la feuille ou il y a la combobox?
    Gné :heink:  - Quelle type de feuilles utilises-tu ???
    S'agirait-il d'une UserForm ?

    Citation :
    Comme cela ne marchait pas, j'ai essayé avec tous les Shapetype de la liste, en mettant le ShapeType.Value à la place de ce que j'avais entre guillemets, faut il mettre les guillemets? car je les ai enlevés vu que je n'insérait pas de valeur directement.
    Rien compris... :/  Que cherches-tu à faire ?

    Merci de t'intéresser à mon cas, c'est cool la patience.

    Donc je récapitule. (Je suis sous excel 2007)
    -Feuille 1 j'ai des données (beaucoup de lignes que je dois filtrer pour pouvoir afficher un graphe)
    -Feuille 2 j'ai une combobox (mise en utilisant l'onglet développeur, dans controles, insérer, controle de formulaire, zone de liste déroulante) que j'ai remplie en utilisant une liste de la feuille 1. (mes critères). Cette combobox est associée à la macro que j'ai déjà écrite:

    1. Sub HighlightSelect()
    2. '
    3. ' HighlightSelect Macro
    4. '
    5. Sheets("ASD DPQR Tier 1").Select
    6. Rows("1:1").Select
    7. Selection.AutoFilter
    8. ActiveSheet.Range("$A$1:$DG$176").AutoFilter Field:=10
    9. Sheets("Graph Highlight").Select
    10.  
    11. Sheets("ASD DPQR Tier 1").Select
    12. Range("J1").Select
    13. ActiveSheet.Range("$A$1:$DG$176").AutoFilter Field:=10, Criteria1:= _
    14. "LO1_R1X4_02"
    15.  
    16. Sheets("Graph Highlight").Select


    cette macro me permet de trier ma feuille 1 selon le critère "LO1_R1X4_02" (critère hardcodé donc), ce que je voudrais ça serait trier par rapport au critère choisi dans ma combobox, ça serait donc ComboBox.Value qu'il faudrait mettre à la place de "LO1_R1X4_02". Enfin avec le nom de la combobox.

    Ce que j'ai fais après ton dernier post, c'est essayer ta macro, celle ci me permettait de voir qu'il n'y avait 3 feuilles dans le fichier cool, mais je n'avais les propriétés que de deux, les deux qui ne m'intéressaient pas, il ne parlait pas de la feuille où il y a la combobox.

    Ensuite, comme tu me l'as confirmé, tu m'as donné la liste exhaustive des shapes alors j'ai essayé tous els noms dans ma macro en remplaçant le:
    "LO1_R1X4_02"
    par Shape.Value j'ai essayé avec toute la liste, mais ça n'a toujours pas marché.

    Je ne sais plus quoi faire maintenant.

    Merci pour tes réponses,

    Charly

    Argh! Je ne dispose actuellement que de la version 2003 d'Excel.
    Je tâche de mettre la main sur une version plus moderne et je t'en reparle.

    Citation :
    celle ci me permettait de voir qu'il n'y avait 3 feuilles dans le fichier cool, mais je n'avais les propriétés que de deux, les deux qui ne m'intéressaient pas, il ne parlait pas de la feuille où il y a la combobox.

    Je ne comprends pas pourquoi :/ 

    Essaie de refaire la manip juste pour la feuille-où-il-y-a-la-combobox :
    1. Dim sh As Shape
    2. Dim tx As String
    3.  
    4. tx = "Objets: " & Worksheets("feuille-où-il-y-a-la-combobox").Shapes.Count & vbCrLf
    5. For Each shp In Worksheets("feuille-où-il-y-a-la-combobox").Shapes
    6. tx = tx & " Objet : <" & shp.Name & "> "
    7. tx = tx & "| "
    8. On Error Resume Next
    9. tx = tx & "c:""" & shp.OLEFormat.Object.Caption & """ "
    10. tx = tx & "t:""" & shp.OLEFormat.Object.Text & """ "
    11. tx = tx & "v:""" & shp.OLEFormat.Object.Value & """ "
    12. tx = tx & "[" & TypeName(shp.OLEFormat.Object) & "] "
    13. tx = tx & "| "
    14. tx = tx & "c:""" & shp.OLEFormat.Object.Object.Caption & """ "
    15. tx = tx & "t:""" & shp.OLEFormat.Object.Object.Text & """ "
    16. tx = tx & "v:""" & shp.OLEFormat.Object.Object.Value & """ "
    17. tx = tx & "[" & TypeName(shp.OLEFormat.Object.Object) & "] "
    18. On Error GoTo 0
    19. tx = tx & "| " & vbCrLf
    20. Next
    21. MsgBox tx


    En attendant.....

    Ton code est vraiment horrible :
    1. Sheets("ASD DPQR Tier 1" ).Select
    2. Rows("1:1" ).Select
    3. Selection.AutoFilter
    4. ActiveSheet.Range("$A$1:$DG$176" ).AutoFilter Field:=10
    5. Sheets("Graph Highlight" ).Select
    6. Sheets("ASD DPQR Tier 1" ).Select
    7. Range("J1" ).Select
    8. ActiveSheet.Range("$A$1:$DG$176" ).AutoFilter Field:=10, Criteria1:= "LO1_R1X4_02"
    9. Sheets("Graph Highlight" ).Select


    Je hais les Select/Selections/Truc.Activate/ActiveMachin !!! Beurk
    Primo, ça consomme des ressources énormes, deuxio, ça ne sert à rien d'autre.
    Justifie-moi les lignes 5, 6 et 7 !

    Regarde ça :
    1. Sheets("ASD DPQR Tier 1" ).Rows("1:1" ).AutoFilter
    2. Sheets("ASD DPQR Tier 1" ).Range("$A$1:$DG$176" ).AutoFilter Field:=10, Criteria1:= "LO1_R1X4_02"
    3. Sheets("Graph Highlight" ).Select '// A la fin, c'est justifiable.

    Et je me demande pourquoi faire deux fois un filtre, une fois sur la ligne 1, une fois sur la zone A1:DG176.
    Ceci devrait suffire :
    1. Sheets("ASD DPQR Tier 1" ).Range("$A$1:$DG$176" ).AutoFilter Field:=10, Criteria1:= "LO1_R1X4_02"

    Info: Le Shape.Value peut être le numéro d'ordre de ton choix dans la combo, pas le texte choisi.

    Est-ce un contrôle auquel tu associes une plage d'entrée et une cellule liée ?
    Si, oui, on devrait pouvoir s'en sortir facilement !

    Citation :
    Info: Le Shape.Value peut être le numéro d'ordre de ton choix dans la combo, pas le texte choisi.

    Ca veut dire quoi?

    Citation :
    Est-ce un contrôle auquel tu associes une plage d'entrée et une cellule liée ?
    Si, oui, on devrait pouvoir s'en sortir facilement !


    Oui c'est ça, à part que dans mon cas, je n'ai pas de cellule liée, je n'ai que la plage d'entrée

    Voila,

    J'ai utilisé le code et il me trouve 2 objets:
    le graphe: Objet: <Graphique 2> | [ChartObject] | |
    la combobox: Objet: <Drop Down 68> | v:14 [DropDown] | |

    Evidemment, j'ai essayé DropDown.Value, mais j'ai toujours une erreur!

    Bon ce dont je viens de m'apercevoir aussi, c'est que le numéro après le v (v:14) est le numéro de la ligne où se toruve l'attribut que je veux dans la combobox!!

    zeb a dit :
    Si oui, on devrait pouvoir s'en sortir facilement !
    :D  :D  :D 

    Exécute ce code pas à pas (Touche F8) et étudie-le :
    1. Dim ws As Worksheet
    2. Dim sh As Shape
    3. Dim rg As Range
    4. Dim o As Object
    5. Dim i As Integer
    6. Dim v As String
    7.  
    8. Stop '// On fait une pause. F8 pour continuer pas à pas.
    9.  
    10. Set ws = Worksheets("La feuille qui contient la combo") '// La feuille qui contient la combo
    11. Set sh = ws.Shapes("Drop Down 68") '// La combo en tant que Shape
    12. Set o = sh.OLEFormat.Object '// La combo en tant qu'objet DropDown.
    13.  
    14. If TypeName(o) <> "DropDown" Then
    15. MsgBox "L'objet n'est pas un DropDown mais un " & TypeName(o) & ".", vbCritical
    16. Exit Sub
    17. End If
    18.  
    19. Set rg = Range(o.ListFillRange) '// La plage d'entrée
    20. i = o.Value '// La valeur numérique de la combo
    21. v = rg.Cells(i).Value '// La cellule contenant la bonne valeur.
    22.  
    23. MsgBox "Eh Charly, c'est ça que tu cherches depuis deux jours : " & v & " ?"


    Quand tu auras tout compris, tu pourras utiliser ça :
    1. Function GetDropDownValue(dropdownname As String, Optional ws As Worksheet) As String
    2. Dim dd As Object
    3.  
    4. If ws Is Nothing Then Set ws = ActiveSheet
    5. Set dd = ws.Shapes(dropdownname).OLEFormat.Object
    6. If TypeName(dd) <> "DropDown" Then Err.Raise vbObjectError + 512, "GetDropDownValue", "Not a DropDown object"
    7. GetDropDownValue = Range(dd.ListFillRange).Cells(dd.Value).Value
    8. End Function




    Enjoy!

    !!!!!!!!:D  :D  :D  :D  !!!!!!!!!!
    Merci zeb, tu es mon sauveur, j'ai vraiment cru que je n'y arriverais jamais

    Mais j'ai compris ce que fais la macro où il y a la textbox, donc c'est celle là que j'utilise dans ma macro principale!

    Par contre, j'ai pas compris ce que fais la fonction :s

    En tout cas, merci beaucoup!!

    Problème résolu!

    Au fait, du coups je comprend pas comment ça marche, pourquoi cela ne marchait il pas quand je mettait DropDown.Value?

    Et j'aurais aussi aimé savoir, ça aurait été plus facile si j'avais créé ma combobox avec un userform?

    Oh :(  Si tu ne comprends pas je suis déçu.
    J'essaie d'être pédagogue et je ne donne en général pas de solution toute faite avant d'être sûr que tout le monde peut la comprendre.

    Regarde bien ligne 19, 20 et 21 du premier code. Je considère la plage d'entrée (rg), je prends la valeur NUMERIQUE (=14 pour LO1_R1X4_02 dans ton exemple) et je prends cette n-ième valeur dans cette plage.

    Ligne 7 du second code, je fais la même chose.

    Relis-les bien tous les deux. Et comprends-les bien. C'est important. Surtout que c'est en pensant que cela peut être utile et instructif que je trouve l'envie de vous aider ;) 

    Salut zeb,

    En fait, c'est pas que j ene comprend pas le code, il est très bien, commenté et tout et tout.

    C'est plutôt le pourquoi il faut faire ça?
    Quand on dessine une combobox sous excel, il ne devrait pas au départ être considéré comme une shape ou même un user form?
    C'est ça qui me choque

    Ensuite, c'est vrai que j'ai pas beaucoup réfléchi dessus aujourd'hui, je verrai demain matin quand ma tête sera plus fraiche. surtout pour la fonction, je t'écrirais surement quelques posts encore,

    Mais vraiment merci pour ton aide!!

    Charly

    Salut zeb,

    De retour de week end, j'ai enfin pris le temps de bien tout relire, et tout va bien maintenant.
    Mais je suis confronté à une nouvelle problématique, que je vais lancer dans un nouveau sujet, j'espère que tu pourras de nouveau m'aider :p  (le sujet concernera une macro la mise à jour d'un graphe où les données sont alimentées tous les jours)

    Merci encore en tout cas,

    Charly

    Bonjour,

    J'ai essayé de récupérer la valeur de ma liste déroulante qui se nome Boutton_Commercial avec le code suivant :

    Code :

    1.Sub Macro1()
    2.Sheets("Comparatif par Marque").Cells(1, 2).Value = Workbooks("BASE_CLIENT").Worksheets("Comparatif par Marque").OLEObjects("Boutton_Contrat").Object.Value
    3.End Sub

    Avec ce code, j'obtient le message suivant :

    Erreur d'execution : 9
    L'indice n'appartient pas à la sélection


    Je n'arrive pas à trouver le moyen d'attraper la valeur présente dans la liste déroulante (Contrôle de formulaire) intitulé "Boutton_Contrat"

    J'espère que vous allez pouvoir m'aider.

    Cordialement

    Voila, Désolé j'avais pas trouvé comment faire.


    Bonjour,

    J'ai essayé de récupérer la valeur de ma liste déroulante qui se nome Boutton_Commercial avec le code suivant :

    1. Sub Macro1()
    2. Sheets("Comparatif par Marque" ).Cells(1, 2).Value = Workbooks("BASE_CLIENT" ).Worksheets("Comparatif par Marque" ).OLEObjects("Boutton_Contrat" ).Object.Value
    3. End Sub


    Avec ce code, j'obtient le message suivant :

    Erreur d'execution : 9
    L'indice n'appartient pas à la sélection


    Je n'arrive pas à trouver le moyen d'attraper la valeur présente dans la liste déroulante (Contrôle de formulaire) intitulé "Boutton_Contrat"

    J'espère que vous allez pouvoir m'aider.

    Cordialement

    Oui, sans doute. Ta liste déroulante est un objet de la collection Shapes et non pas de la collection OLEObjects. Regarde ligne 5 du dernier code proposé à Charly888.

    En effet c'est bien cela.

    J'aimerai rajouter le nom de la feuille dans la Macro Lorsque je le met, j'obtient un message voici le code :

    1. Function GetDropDownValue(dropdownname As String, Optional ws As Worksheet) As String
    2. Dim dd As Object
    3.  
    4. If ws Is Nothing Then Set ws = ActiveSheet
    5. Set dd = ws.Shapes(dropdownname).OLEFormat.Object
    6. If TypeName(dd) <> "DropDown" Then Err.Raise vbObjectError + 512, "GetDropDownValue", "Not a DropDown object"
    7. GetDropDownValue = Range(dd.ListFillRange).Cells(dd.Value).Value
    8. End Function
    9.  
    10.  
    11. Sub TEST2()
    12. Sheets("Comparatif par Marque").Cells(1, 1).Value = GetDropDownValue("Boutton_Commercial", "Comparatif par Marque")
    13.  
    14. End Sub


    Message d'erreur : Erreur de compilation Incompatibilité de type.

    Désolé je suis vraiment un novice

    En tout cas merci pour votre aide.

    Si tu ne parles qu'à moi, dis-moi tu.

    Si tu as une erreur, il faut dire où !!!!!!! (Je devine que c'est ligne 12 :whistle:  )

    Un objet Sheet, c'est un onglet, feuille ou graphique : Utilise Worksheet, qui est plus précis.

    GetDropDownValue est une fonction qui attend un nom de DropDown et une feuille. Toi, tu lui donnes un nom de DropDown, et un nom de feuille. Ce n'est pas pareil.

    Oui c'était bien en ligne 12, j'ai mis cela et ca fonctionne:

    1. Sheets("Comparatif par Marque").Cells(1, 1).Value = GetDropDownValue("Boutton_Commercial", Sheets("Comparatif par marque"))


    Merki pour ton aide!

    :sol: 
    _________________________________________

    Bon, à part que tu n'écoutes qu'à moitié.

    zeb a dit :
    Un objet Sheet, c'est un onglet, feuille ou graphique : Utilise Worksheet, qui est plus précis.

    Il ne faut pas confondre les types et les collections.

    Une feuille, c'est une seule feuille.
    Une collection de feuilles c'est plusieurs feuilles, parmi lesquelles il faut en choisir une !
    1. Dim wsCompParMrq As Worksheet ' // <-- Une feuille
    2. Dim wsNumber1 As Worksheet ' // <-- Une autre feuille
    3.  
    4. Set wsCompParMrq = Worksheets("Comparatif par marque") ' // Par nom
    5. Set wsNumber1 = Worksheets(1) ' // Par numéro
    6.  
    7. MsgBox "Feuille 'Comparatif par marque' : " & vbCrLf & _
    8. " Nom : " & vbTab & wsCompParMrq.Name & vbCrLf & _
    9. " Code : " & vbTab & wsCompParMrq.CodeName & vbCrLf & _
    10. " Num. : " & vbTab & wsCompParMrq.Index


    Donc :
  • Worksheet, c'est le type Feuille de calcul,
  • Chart, c'est le type Onglet Graphique.
  • Worksheets, c'est la collection de toutes les feuilles de calcul,
  • Charts, c'est la collection de toutes les onglets graphiques,
  • Sheets, c'est la collection de onglets, feuilles de calcul et onglets graphiques.

    Proposition de lecture : http://www.presence-pc.com/forum/ppc/Programmation/exce...
  • Posez votre question