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 :

Classement alpha dans une Combo [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Classement alpha dans une Combo
    Bonjour à tous,

    Dans un code Initialize d'un formulaire, je remplis une Combo avec des données venant d'une feuille de calcul (du même classeur) nommée "Tiers".
    La colonne où se trouve les données est nommée "NomT".

    Lorsque je clique sur ma Combo, la liste apparaît bien mais pas dans l'ordre alphabétique. L'erreur doit créver les yeux, mais ce matin je plane complètement, pouvez-vous m'apporter votre éclairage s'il vous plait ?
    Je vous en remercie par avance
    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub UserForm_Initialize()
    Dim Vcellule As Object
    For Each Vcellule In Sheets("Tiers").Range("NomT")
                If Vcellule.Value <> "" Then UFDepTier.CmbTiers.AddItem Vcellule.Value
    Next
                UFDepTier.CmbTiers.ListIndex = -1
     
    End Sub

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 226
    Par défaut
    Hello,

    A mon avis c'est sur la feuille que tu dois agir !

    Vois ce code pour la colonne A.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test()
     
        Dim c As Range
     
        Application.ScreenUpdating = False
     
        For Each c In Range("A1:A" & Range("A65536").End(xlUp).Row)
            c.Sort Key1:=Range("A1"), Order1:=xlAscending
        Next c
     
        Application.ScreenUpdating = True
     
    End Sub
    Bonne journée.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour Antonium,

    Merci pour ta réponse je vois ce que je dois faire. Il me faudra simplement remettre le classement originel lors de la fermeture de l'UserForm.

    Je m'explique, dans un Uform j'utilise un numéro de tiers et dans une autre le nom du tiers. Il faut donc que dans les 2 cas il y ait un classement croissant.

    Merci pour ton aide

  4. #4
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    sinon tu peux passer par un tableau et trier ce tableau


  5. #5
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour le forum,

    Pour ne rien changer dans ta feuille et en s'inspirant du tri de tableau évoqué par AALEX (voir le tutoriel de Sylkiroad à ce sujet)

    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
    Private Sub UserForm_Initialize()
     
    Dim l As Byte, i As Byte, j As Byte
     
    'alimentation des items de la combobox
    For l = 1 To Range("A65536").End(xlUp).Row
        Tacombobox.AddItem Range("A" & l)
    Next l
     
    'tri
    For i = 0 To Tacombobox.ListCount
        For j = i + 1 To Tacombobox.ListCount - 1
            If Tacombobox.List(i) > Tacombobox.List(j) Then
                Cible = Tacombobox.List(j)
                Tacombobox.List(j) = Tacombobox.List(i)
                Tacombobox.List(i) = Cible
            End If
        Next j
    Next i
     
    End Sub
    En espérant que ce code te sera utile.

    Cordialement.

    Marcel

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Voici le code tel que je l'ai adapté mais j'ai un message d'erreur sur "Cible" - Variable non définie

    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
    Private Sub UserForm_Initialize()
    Dim L As Byte, I As Byte, J As Byte
    
    'alimentation des items de la Combo
    For L = 1 To Range("B65536").End(xlUp).Row
        CmbTiers.AddItem Range("B" & L)
    Next L
    
    'tri
    For I = 0 To CmbTiers.ListCount
        For J = I + 1 To CmbTiers.ListCount - 1
            If CmbTiers.List(I) > CmbTiers.List(J) Then
                Cible = CmbTiers.List(J)
                CmbTiers.List(J) = CmbTiers.List(I)
                CmbTiers.List(I) = Cible
            End If
        Next J
    Next I
    End Sub

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Variable non définie
    Bonsoir Nec

    Ton module doit être en déclaration obligatoire, autrement dit

    Essaie, au niveau de ta déclaration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim L As Byte, I As Byte, J As Byte, Cible As String
    Cordialement.

    Marcel

  8. #8
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour à tous,

    Dans mon code "Option Explicit" est bien mentionné.
    Par contre lorsque j'essaie de mettre Cible As Byte ou autre chose (String, Integer, etc...), un message d'erreur apparaît :

    "Accès interdit - Erreur 70"

    Pouvez-vous m'apporter votre aide s'il vous plait ?

    Merci

  9. #9
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Erreur 70
    Bonjour Nec,

    J'avais testé le code sur mon poste de travail et n'ai rencontré aucun probème.

    2 pistes (adapte l'une ou l'autre ou les 2) :
    - enlever - modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CmbTiers.AddItem Range("B" & L)
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CmbTiers.AddItem Sheets("Feuil1").Range("B" & L)
    Cordialement.

    Marcel

  10. #10
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,


    Pourquoi définir les variables compteurs en Byte, j'aurai plutôt pensé à Long ?

    Edit

    Chez moi je passe par un talbeau :

    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
     
    Dim Ltab() As String
    .
    .
    .
     
    Dim valeur As Integer
      Dim cible As String
          Do 'tri Croissant
              valeur = 0
     
              For i = 0 To UBound(Ltab) - 1
                     ' Tri sans respecter la casse.
                  If UCase(Ltab(i)) > UCase(Ltab(i + 1)) Then
     
                      cible = Ltab(i)
                      Ltab(i) = Ltab(i + 1)
                      Ltab(i + 1) = cible
     
                      valeur = 1
     
                  End If
              Next i
          Loop While valeur = 1

    Et ensuite je charge mon combobox :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      With .Cx1
            .Enabled = True
            .List() = Ltab
       end with
    Tu pourrai faire ça, tu rempli d'abord un tableau, tu le tri et ensuite du charge directement ta combobox.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Juste une dernière chose. Vu le nombre de tiers qu'il y a dans ma feuille, 772, tous ne peuvent être affichés.
    Est-il possible d'avoir le tableau en 2 ou 3 colonnes.
    Merci par avance

  12. #12
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut Combobox à plusieurs colonnes
    Je n'ai pas encore pratiqué
    Mais plusieurs discussions et/ou tutoriels à ce sujet.

    http://silkyroad.developpez.com/VBA/ControlesUserForm/

    http://www.developpez.net/forums/d80...eurs-colonnes/

    http://www.developpez.net/forums/d40...rer-selection/

    D'autre part, tu ne m'as pas donné le résultat du dernier code que je t'ai soumis. J'en déduis qu'il fonctionne.

    Cordialement.

    Marcel.

  13. #13
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Oui, oui Marcel il fonctionne très très bien.
    Je te présente mes excuses pour cette omission.

    Je vais donc aller faire tour sur les sites que tu me proposes.
    Merci sincèrement pour toute l'aide que tu m'as apporté.
    Je te tiens informé du résultat de mes recherches.
    Cordialement

  14. #14
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Je suis donc allé sur les sites proposés, mais ils ne répondent pas à ma question.

    Lorsque je clique dans ma Combo, une liste apparaît avec un certain nombre de noms, mais pas l'ingralité de ma liste.
    Donc, dans le tableau qui s'ouvre à côté de mon Combo, j'aimerai que celui-ci présente 2 ou 3 colonnes afin d'avoir tous les noms de la liste (772).

    Si cela n'est pas possible ce n'est pas très important, mais cela apporterai un petit plus.

    Merci par avance

  15. #15
    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
    Règle la propriété ListRows de ton ComboBox sur 20 par exemple, à ce moment là il affichera 20 lignes avec une barre de défilement verticale permettant de visualiser les autres lignes.
    Actuellement Listrows est réglée sur 0, raison pour laquelle ton Combo affiche toutes les lignes et vu que tu en as beaucoup, la longueur du combo dépasse la hauteur de ta feuille.

  16. #16
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour Fring,

    C'était tout bête et je n'y ai même pas pensé.
    Merci beaucoup

    Ps : C'est super enfin ça fonctionne correctement.

    Merci à tous ceux qui ont participé à ce poste et plus particulièrement à Marcel
    Amicalement

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

Discussions similaires

  1. [VB.net] Stocker un id dans une combo non chargée via ds ?
    Par RiiiDD dans le forum Windows Forms
    Réponses: 6
    Dernier message: 07/04/2006, 11h21
  2. donnees access dans une combo userform excel
    Par megapacman dans le forum Access
    Réponses: 6
    Dernier message: 06/03/2006, 10h14
  3. [glade] Récupération d'une valeur dans une combo
    Par Poutchjay dans le forum GTK+ avec Python
    Réponses: 1
    Dernier message: 23/01/2006, 14h59
  4. Tri ordre alpha dans une table.
    Par Aurèl90 dans le forum Access
    Réponses: 2
    Dernier message: 19/12/2005, 12h29
  5. Modif d'un ini dans une combo box
    Par Julien.alkaza dans le forum C++Builder
    Réponses: 5
    Dernier message: 03/04/2005, 23h39

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