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 :

Remplir une combobox d'un autre classeur Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 20
    Points : 10
    Points
    10
    Par défaut Remplir une combobox d'un autre classeur Excel
    Bonjour,

    Je cherche le moyen de remplir le combobox d'un classeur Excel "B" à partir d'une macro se trouvant sur le classeur "A".

    Un exemple de code qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        Set wb = Workbooks.Open(MODELEFICHE)
        Set ws = wb.Worksheets(1)
     
        ws.ComboBoxNomControleur.Add = "toto"
    Voila, j'ai le cas pour un combobox, mais la question générale serait même "Comment interagir avec les contrôles d'un autre classeur"

    Ah, et si possible, j'aimerai éviter le genre "Tu copies les valeurs que tu veux mettre dans ta combobox sur une plage de cellule de ton classeur B et tu fais un lien sur ton classeur B entre ta combobox et ta plage...", Ca je sais faire, mais ca ne me va pas du tout...

    Merci de votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Points : 1 219
    Points
    1 219
    Par défaut
    Bonjour,

    Une piste avec la démarche suivante

    1) Créez 2 classeurs et nommez les respectivement "A" et "B"
    2) Enregistrez le classeur "B" dans le dossier C:\ et fermez le (ce sera le classeur dans lequel s'affichera la ComboBox)
    3) Dans le classeur "A", nommez une feuille "source" et, à partir de sa cellule A1, inscrivez des données contiguës sur une ou plusieurs colonnes
    4) Dans un module standard, copiez le code suivant
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    '##########################################
    '### Nécessite la référence             ###
    '### Microsoft Forms 2.0 Object Library ###
    '### C:\WINDOWS\system32\FM20.DLL       ###
    '##########################################
     
    '### Constantes à adapter selon votre gré ###
    Const NOM_COMBOBOX As String = "maComboBox"
    Const CLASSEUR_B As String = "B.xls"
    Const CHEMIN As String = "C:\"
    Const FEUILLE_SOURCE As String = "source"
    Const DEPART_DATA As String = "A1" 'cellule de départ des données
    Const COLONNE_AFFICHAGE_COMBO As Long = 1
    Const CELLULE_LIEE As String = "C1"
    '############################################
     
    Sub ChargeComboBox()
    Dim WB As Workbook
    Dim S As Worksheet
    Dim R As Range
    Dim var
    Dim lastLig&
    Dim nbCol&
    Dim i&
    Dim A$
    Dim OL As OLEObject
    Dim CB As MSForms.ComboBox
    Set S = ThisWorkbook.Sheets(FEUILLE_SOURCE)
    Set R = S.Range(DEPART_DATA)
    lastLig& = S.Range(S.Cells(65536, R.Column), S.Cells(65536, R.Column)).End(xlUp).Row
    nbCol& = S.Range(S.Cells(R.Row, R.Column), S.Cells(R.Row, R.Column)).End(xlToRight).Column - R.Column + 1
    Set R = S.Range(S.Cells(R.Row, R.Column), S.Cells(lastLig&, R.Column + nbCol& - 1))
    var = R
    On Error Resume Next
    Set WB = Workbooks(CLASSEUR_B)
    If Not WB Is Nothing Then
      MsgBox "Le classeur ''" & CLASSEUR_B & "'' est déjà ouvert."
      Exit Sub
    End If
    Set WB = Workbooks.Open(CHEMIN & CLASSEUR_B)
    Set S = WB.Sheets(1)
    Set OL = S.OLEObjects(NOM_COMBOBOX)
    On Error GoTo 0
    If OL Is Nothing Then
      Set OL = S.OLEObjects.Add(ClassType:="Forms.ComboBox.1")
      OL.Name = NOM_COMBOBOX
    End If
    Set CB = OL.Object
    CB.List = var
    CB.ColumnCount = nbCol&
    If COLONNE_AFFICHAGE_COMBO > nbCol& Then
      CB.BoundColumn = 1
    Else
      CB.BoundColumn = COLONNE_AFFICHAGE_COMBO
    End If
    For i& = 1 To nbCol&
      A$ = A$ & "50;"
    Next i&
    CB.ColumnWidths = Mid(A$, 1, Len(A$) - 1)
    OL.LinkedCell = CELLULE_LIEE
    OL.Left = 200
    OL.Top = 200
    OL.Width = 60 * nbCol&
    OL.Height = 25
    End Sub
    5) Dans le VBE, faites menu Outils/Références… et cherchez dans la liste (ou Parcourir…) puis cochez la référence
    Microsoft Forms 2.0 Object Library qui se trouve, chez moi, dans C:\WINDOWS\system32\FM20.DLL
    6) Lancez la macro ChargeComboBox qui ouvrira le classeur "B" et fera apparaître une ComboBox dont la celule C1 sera la cellule liée

    Adaptez, à votre usage, les différentes constantes.

    Cordialement.

    PMO
    Patrick Morange

  3. #3
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Citation Envoyé par Iceabyssal Voir le message
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Set wb = Workbooks.Open(MODELEFICHE)
        Set ws = wb.Worksheets(1)
        ws.ComboBoxNomControleur.Add = "toto"
    Voila, j'ai le cas pour un combobox, mais la question générale serait même "Comment interagir avec les contrôles d'un autre classeur"
    Si le classeur à ouvrir est dans un répertoir il faut indiquer le chemin complet. Et pas oublier le xls.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Chemin as String
        Chemin = "c:\Répertoir\repertoir\MODELEFICHE.xls"
        Set wb = Workbooks.Open(Chemin )
    Parce que...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ws.ComboBoxNomControleur.Add = "toto"
    devrait normalement fonctionner.
    Sinon tu dit Ou le programme plante ET quel est le libellé de l'erreur.
    Ah oui, autre question, c'est un Combo de la boite à outils contrôles ou formulaire ?
    A+
    Edit:
    Ton combo, il est dans quel classeur ? celui que tu ouvre ou celui où est la macro ?

Discussions similaires

  1. [AC-2007] Remplir une comboBox d'un autre formulaire
    Par Gautch dans le forum VBA Access
    Réponses: 4
    Dernier message: 26/03/2014, 15h54
  2. [XL-2003] Remplir une combobox avec le contenu d'une colonne d'un autre fichier Excel
    Par funkykiwi dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/02/2011, 15h50
  3. remplir une combobox en fonction d'un autre
    Par mima_mine dans le forum Struts 1
    Réponses: 7
    Dernier message: 18/09/2008, 16h57
  4. Réponses: 2
    Dernier message: 07/07/2008, 18h24
  5. Réponses: 1
    Dernier message: 28/11/2007, 09h31

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