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 :

Trier un combobox par ordre alphabétique


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut Trier un combobox par ordre alphabétique
    Bonjour à tous,

    Voilà je voudrais trié un combobox par ordre alphabétique pour cela je copie colle ma sélection (FL1) dans une nouvelle feuille (FL2), et je trie la colonne A et C par ordre alphabétique.
    Ensuite je remplie mon combobox avec la colonne A triée sans les doublons.
    Ma ça ne marche pas comme voulu, j'ai seulement la première donnée de la plage dans mon combobox.

    Mon code fonctionne si je ne trie pas ma selection mais avec le code rajouté (en gras) cela ne fonctionne plus.

    Avez vous une idée?
    merci d'avance

    voici mon code

    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
    Private Sub UserForm_Initialize()
        Dim hWnd As Long
        Dim Plage As Range
        Dim FL1 As Worksheet
        Dim FL2 As Worksheet
        
       .
       .
       .
    
        'renseigne la liste des fonction
        NomProjet = FenetrePrincipale.LblProjet.Value
        
        Application.DisplayAlerts = False
        On Error Resume Next
        Set FL1 = Workbooks.Open(RepertoireTravail & "FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        If Err.Number = 1004 Then
        GoTo line1
        End If
        Application.DisplayAlerts = True
    line1:
        Set FL1 = Workbooks("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        
        FL1.Range("A4").Select
        FL1.Range(Selection, Selection.End(xlToRight)).Select
        Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
        Set FL2 = ActiveWorkbook.Worksheets.Add
        FL2.Name = "FMES filtrée par fonction"
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("C1") _
            , Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:= _
            False, Orientation:=xlTopToBottom
        ActiveWindow.SmallScroll Down:=-6
        Range("A1").Select
            
        Set Plage1 = FL2.Range("A1:A" & FL2.UsedRange.Rows.Count)
            
        FenetreFMESUser.CmbListeFonction.Clear
        For Each Cell1 In Plage1
        If Cell1 <> "" Then
        FenetreFMESUser.CmbListeFonction = Cell1.Value
        End If
        If FenetreFMESUser.CmbListeFonction.ListIndex = -1 Then _
            FenetreFMESUser.CmbListeFonction.AddItem Cell1.Value
        Next
      .
      .
      .
      
    End Sub

  2. #2
    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 alex.a
    Bonjour à tous,

    Voilà je voudrais trié un combobox par ordre alphabétique pour cela je copie colle ma sélection (FL1) dans une nouvelle feuille (FL2), et je trie la colonne A et C par ordre alphabétique.
    Ensuite je remplie mon combobox avec la colonne A triée sans les doublons.
    Ma ça ne marche pas comme voulu, j'ai seulement la première donnée de la plage dans mon combobox.

    Mon code fonctionne si je ne trie pas ma selection mais avec le code rajouté (en gras) cela ne fonctionne plus.

    Avez vous une idée?
    merci d'avance

    voici mon code

    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
    Private Sub UserForm_Initialize()
        Dim hWnd As Long
        Dim Plage As Range
        Dim FL1 As Worksheet
        Dim FL2 As Worksheet
        
       .
       .
       .
    
        'renseigne la liste des fonction
        NomProjet = FenetrePrincipale.LblProjet.Value
        
        Application.DisplayAlerts = False
        On Error Resume Next
        Set FL1 = Workbooks.Open(RepertoireTravail & "FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        If Err.Number = 1004 Then
        GoTo line1
        End If
        Application.DisplayAlerts = True
    line1:
        Set FL1 = Workbooks("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        
        FL1.Range("A4").Select
        FL1.Range(Selection, Selection.End(xlToRight)).Select 'ERREUR
        Range(Selection, Selection.End(xlDown)).Select 'ERREUR
        Selection.Copy
        Set FL2 = ActiveWorkbook.Worksheets.Add
        FL2.Name = "FMES filtrée par fonction"
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("C1") _
            , Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:= _
            False, Orientation:=xlTopToBottom
        ActiveWindow.SmallScroll Down:=-6
        Range("A1").Select
            
        Set Plage1 = FL2.Range("A1:A" & FL2.UsedRange.Rows.Count)
            
        FenetreFMESUser.CmbListeFonction.Clear
        For Each Cell1 In Plage1
        If Cell1 <> "" Then
        FenetreFMESUser.CmbListeFonction = Cell1.Value
        End If
        If FenetreFMESUser.CmbListeFonction.ListIndex = -1 Then _
            FenetreFMESUser.CmbListeFonction.AddItem Cell1.Value
        Next
      .
      .
      .
      
    End Sub
    Bonjour, beaucoup d'erreur dans ton code.

    1°)

    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
    'Il n'y aurra pas d'alerte
        '----Application.DisplayAlerts = False
    'Si classeur déjà ouvert....
        On Error GoTo line1
        Set FL1 = Workbooks.Open(RepertoireTravail & "FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
      ' ----- If Err.Number = 1004 Then
       ' -----GoTo line1
      ' ------ End If
      ' ----- Application.DisplayAlerts = True
    line1:
     
    'OK
        Set FL1 = Workbooks("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
     
    'MODIF
        FL1.select
        Range("A4", Range("A65536").End(xlUp).Row).Select
        'Ici je ne vois pas pourquoi 2 sélections ??
        'Je suppose que tu veux trié la colonne A
        'xlDown = existe pas ?? du moins dans mon excel
        '----------------Range(Selection, Selection.End(xlDown)).Select
        Selection.Copy
     
        Set FL2 = ActiveWorkbook.Worksheets.Add
        FL2.Name = "FMES filtrée par fonction"
        FL2.select ' pour être sur que c'est la bonne feuille
        ' et mettre la sélection à partir de A1
        Range("A1").select
        ActiveSheet.Paste
    'la suite parrait allé, bon amusement

    A+

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir


    Tu peux tester cette adaptation

    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
    Dim FL1 As Worksheet
    Dim Plage As Range, Cell As Range
    Dim i As Integer, j As Integer
    Dim Temp As Variant
     
    '
    '...
    '
     
    Set FL1 = Workbooks("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
    Set Plage = FL1.Range("A1:A" & FL1.Range("A65536").End(xlUp).Row)
     
    'Alimentation sans doublon
    For Each Cell In Plage
        If Cell <> "" Then FenetreFMESUser.CmbListeFonction = Cell.Value
     
        If FenetreFMESUser.CmbListeFonction.ListIndex = -1 Then _
                FenetreFMESUser.CmbListeFonction.AddItem Cell.Value
    Next
     
     
    'Tri par ordre alpha
    With FenetreFMESUser.CmbListeFonction
        For i = 0 To .ListCount - 1
            For j = 0 To .ListCount - 1
                If .List(i) < .List(j) Then
                    Temp = .List(i)
                    .List(i) = .List(j)
                    .List(j) = Temp
                End If
            Next j
        Next i
    End With


    michel

  4. #4
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Bonjour LeForestier, bonjour michel
    merci pour vos réponses.

    ca marche

    Michel ton code est remarquable je n'ai plus besoin de copier coller ma plage pour la trier.

    j'ai suivi les conseils de LeForestier en enlevant les Application.DisplayAlerts
    je les avais rajouté parce que par moment j'ai un message me signalant que mon fichier était déjà ouvert, et que si je l'ouvrais a nouveau toute vos modifications seront perdues...

    par contre avec le code
    On Error GoTo line1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        Set FL1 = Workbooks.Open(RepertoireTravail & "FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
    line1:
    j'ai constaté une erreur d'exécution 440. Erreur Automation
    donc j'ai laissé le If Err.Number = 1004 Then GoTo line1

    Citation Envoyé par LeForestier
    'la suite parait allé, bon amusement


    Bonne journée a tous
    et encore merci

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

Discussions similaires

  1. Trier des combobox par ordre croissant et alphabétique
    Par floflo50100 dans le forum Excel
    Réponses: 6
    Dernier message: 09/04/2015, 15h31
  2. Tri d'un combobox par ordre alphabétique
    Par LANGAZOU dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/02/2015, 22h53
  3. [Joomla!] Trier les sections par ordre alphabétique
    Par janclod dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 20/10/2008, 20h15
  4. Trier des lignes par ordre alphabétique ?
    Par Evocatii dans le forum Eclipse
    Réponses: 0
    Dernier message: 11/08/2007, 11h26
  5. trier une ComboBox par ordre alphabétique
    Par poussin_44 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/07/2007, 17h23

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