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 :

Combo de Combobox [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Par défaut Combo de Combobox
    Bonjour à tous,

    Je suis actuellement en train de programmer une petite base de données permettant de consulter différents fichiers ou bien d'ajouter un fichier à la liste.

    Concernant la partie d'ajout de fichiers j'ai besoin que l'utilisateur précise la "provenance" de son fichier. Je veux qu'il choisisse une valeur dans la CBoxCodeCommercial1 (en dessous du Code commercial) et dès qu'il clique sur une valeur de la liste il faut que les 3 autres combobox prennent des valeurs.
    Nom : Urf.JPG
Affichages : 164
Taille : 75,9 Ko

    Les valeurs de la CB1 sont remplie sur un tableau qui se situe en page(2) colonne B, CB2 pareil mais colonne C, CB3 colonne D et CB4 colE. A chaque fois sur la même ligne.

    J'ai programmer la prise de valeurs pour CB1 mais àprès cela je suis totalement bloqué !!

    Voici le code pour ma CB1:
    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
    Private Sub Userform_Initialize()
    Dim sd As Object  'déclare la variable sd (Sans Doublons)
    Dim pl As Range 'déclare la variable pl (PLage)
    Dim cel As Range 'déclare la variable cel (CELlule)
    Dim tbl As Variant 'déclare la variable tbl (TaBLeau)
    Dim i As Integer 'déclare la variable i (incrément)
    Dim j As Integer 'déclare la variable j (incrément)
    Dim temp As Variant 'déclare la variable temp (valeur TEMPoraire)
     
    Set sd = CreateObject("Scripting.Dictionary") 'définit la variable sd
    With Sheets("Bilan-Lien") 'prend en compte l'onglet "Base_de_donnees"
        Set pl = .Range("B3:B" & .Cells(Application.Rows.Count, 2).End(xlUp).Row) 'définit la plage pl
    End With 'fin de la prise en compte de l'onglet "Base_de_donnees"
    For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
        sd(cel.Value) = "" 'alimente la liste sans doublons
    Next cel 'prochaine cellule de la boucle
    tbl = sd.keys 'définit le tableau des valeurs sans doublons
    'tri alphabétique
    For i = 0 To UBound(tbl) 'boucle 1 de 0 au nombre de valeur du tableau
        For j = 0 To UBound(tbl) 'boucle 2 de 0 au nombre de valeur du tableau
            If tbl(i) < tbl(j) Then 'condition : si la valeur de la boucle 1 est invérieure à la valeur de la boucle 2
                temp = tbl(i) 'définit la valeur temporaire temp
                tbl(i) = tbl(j) 'la valeur de la boucle un devient la valeur de la boucle 2
                tbl(j) = temp 'la valeur de la boucle deux devient la valeur temporaire temp
            End If 'fin de la condition
        Next j 'prochaine valeur de la boucle 2
    Next i 'prochaine valeur de la boucle 1
    Me.CBoxCodeCommercial.List = tbl 'alimente la ComboBox1 sans doublons et trié par ordre alphabétique
    End Sub
    Cordialement,

    Edit: Après reflexion peut -être que je peux changer les 3 combo box en un autre outil ? textbox ?

  2. #2
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Par défaut
    J'ai essayé de récupérer l'adresse (Ligne et colonne) de la valeur que prend ma combobox1 pour ensuite essayer de "décaler" le tout d'une colonne mais sans réel succès..
    J'ai essayé également d'utilisé ce post notament le code de jFontaine:
    Pour récupérer l'adresse de la cellule liée à la sélection d'une combobox positionnée sur un onglet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim rg As Range
     
    Set rg = Sheets(Split(ComboBox1.ListFillRange, "!")(0)).Range(Split(ComboBox1.ListFillRange, "!")(1))
     
    MsgBox rg.Cells(ComboBox1.ListIndex + 1, 1).Address
    Malheureusement la méthode ListfillRange n'existe pas dans Excel 2003 (oui je suis sur 2003 en fait) et j'obtient l'erreur:
    Membre de donnée ou de méthode introuvable...

    Je suis dans une impasse, toute idée est la bienvenue !

  3. #3
    Membre Expert
    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
    Par défaut
    Bonjour,

    Pouvez-vous mettre votre fichier ?

  4. #4
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Par défaut
    Voilà, en espérant que cela pourra aider: BDDtest.xls
    Concernant la méthode ListFillRange qui ne fonctionne pas c'est la deuxième partie de la ligne qui est concerné alors que sur la première partie excel ne détecte pas d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rg = Sheets(Split(ComboBox1.ListFillRange, "!")(0)).Range(Split(ComboBox1.ListFillRange, "!")(1))
    La première partie de mon split (0) prend la valeur de la feuille quand à la deuxième split (1) prend les coordonnées de la cellule.
    edit: le message de jFontaine
    Sheets(Split(ComboBox1.ListFillRange, "!")(0) = Feuil2
    Sheets(Split(ComboBox1.ListFillRange, "!")(1) = E8:E14
    J'ai évidement remplacé combobox1 par CBoxCodeCommercial mais je pense que l'erreur peut venir du fait que la deuxième partie de mon split n'as pas été obtenue de la bonne façon précédemment.
    Je n'ai peut être pas remplie ma combobox de la bonne manière

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour !

    Citation Envoyé par Leylone Voir le message
    la méthode ListfillRange n'existe pas dans Excel 2003
    Mais si elle existe cette propriété dans la version 2003, suffit d'interroger l'aide VBA via la touche ‼ …

  6. #6
    Membre Expert
    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
    Par défaut
    Bonjour,

    Edit: Après reflexion peut -être que je peux changer les 3 combo box en un autre outil ? textbox ?
    Oui, c'est ce que j'ai fait. J'ai virer les 3 ComboBoxes et les ai remplacé par des TextBoxes (TextBox5, TextBox6, TextBox7).

    J'ai changé votre par 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
    67
    68
    69
    70
    71
    Private Sub Userform_Initialize()
    Dim Tbl As Variant 'déclare la variable tbl (TaBLeau)
    Dim i& 'déclare la variable i (incrément)
    Dim j& 'déclare la variable j (incrément)
    Dim T()
    Dim cpt&  'compteur
    Dim myColl As New Collection
    '--- Monte les data directement dans un variant (j'ai pris les 4 colonnes de B à E ) ---
    With Sheets("Bilan-Lien") 'prend en compte l'onglet "Base_de_donnees"
        Tbl = .Range("B3:E" & .Cells(Application.Rows.Count, 2).End(xlUp).Row) 'définit la plage pl
    End With 'fin de la prise en compte de l'onglet "Base_de_donnees"
    '--- Tableau sans les doublons (emploi d'une collection) ---
    On Error Resume Next
    For i = LBound(Tbl, 1) To UBound(Tbl, 1)
      myColl.Add Tbl(i, 1), CStr(Tbl(i, 1))
      If Err = 0 Then   'si une erreur se produit, les data ne sont pas affectées dans le tableau
        cpt& = cpt& + 1
        ReDim Preserve T(LBound(Tbl, 2) To UBound(Tbl, 2), 1 To cpt&)
        For j = LBound(Tbl, 2) To UBound(Tbl, 2)
          T(j, cpt&) = Tbl(i, j)
        Next j
      End If
      Err.Clear
    Next i
    On Error GoTo 0
    '--- Transposition du tableau dans un autre tableau su'on passe en paramètre à la fonction de tri ---
    Tbl = TriAlpha(Application.WorksheetFunction.Transpose(T))
     
    '### Pour visualiser et faciliter le développement, je fixe le nombre de colonnes à 4
    '### A l'usage, si vous ne voulez voir que la première colonne remplacez 4 par 1
    Me.CBoxCodeCommercial.ColumnCount = 4
     
    Me.CBoxCodeCommercial.List = Tbl 'alimente la ComboBox1 sans doublons et trié par ordre alphabétique
    End Sub
     
    Private Sub CBoxCodeCommercial_Change()
    Dim i&
    With Me.CBoxCodeCommercial
      i& = .ListIndex
      If i& = -1 Then
        Me.TextBox5 = ""
        Me.TextBox6 = ""
        Me.TextBox7 = ""
      Else
        Me.TextBox5 = .List(i&, 1)
        Me.TextBox6 = .List(i&, 3)
        Me.TextBox7 = .List(i&, 2)
      End If
    End With
    End Sub
     
    Private Function TriAlpha(Tbl As Variant) As Variant
    Dim i As Long 'déclare la variable i (incrément)
    Dim j As Long 'déclare la variable j (incrément)
    Dim temp As Variant 'déclare la variable temp (valeur TEMPoraire)
    Dim k As Long
    '---
    'tri alphabétique
    For i = LBound(Tbl, 1) To UBound(Tbl, 1) 'boucle 1 de 0 au nombre de valeur du tableau
        For j = LBound(Tbl, 1) To UBound(Tbl, 1) 'boucle 2 de 0 au nombre de valeur du tableau
            If Tbl(i, 1) < Tbl(j, 1) Then 'condition : si la valeur de la boucle 1 est invérieure à la valeur de la boucle 2
              For k = LBound(Tbl, 2) To UBound(Tbl, 2)
                temp = Tbl(i, k) 'définit la valeur temporaire temp
                Tbl(i, k) = Tbl(j, k) 'la valeur de la boucle un devient la valeur de la boucle 2
                Tbl(j, k) = temp 'la valeur de la boucle deux devient la valeur temporaire temp
              Next k
            End If 'fin de la condition
        Next j 'prochaine valeur de la boucle 2
    Next i 'prochaine valeur de la boucle 1
    TriAlpha = Tbl
    End Function
    Le mieux est de voir la pièce jointe.

  7. #7
    Membre habitué
    Homme Profil pro
    Etudiant
    Inscrit en
    Juin 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 10
    Par défaut
    Citation Envoyé par Marc-L Voir le message

    Mais si elle existe cette propriété dans la version 2003, suffit d'interroger l'aide VBA via la touche ‼ …
    Pourtant le message d'erreur semble indiquer le contraire..

    Merci PMO jcela fonctionne bien avec des textbox, c'est moins compliqué !

  8. #8
    Membre Expert
    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
    Par défaut
    Bonjour,

    ListFillRange ne s'applique qu'à
    1) ControlFormat
    Cet objet contient les propriétés de contrôle Microsoft Excel.
    2) OLEObject
    Cet objet représente un contrôle ActiveX ou un objet OLE incorporé ou lié dans une feuille de calcul.
    *********
    Conclusion :
    ListFillRange ne s'applique pas à un control MSForms.

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

Discussions similaires

  1. [VB6]PréRemplissage combobox (dropDown Combo)
    Par KilKennY dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 12/05/2009, 17h08
  2. Réponses: 2
    Dernier message: 09/12/2007, 23h35
  3. [VB6]Combobox: Combo de choix de couleurs
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 16/05/2007, 15h19
  4. combo et combobox
    Par philippef dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 27/09/2006, 11h56
  5. [VB] Ecrire dans une ComboBox -> Combo = TexBox
    Par zejo63 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 26/01/2006, 11h25

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