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 :

Mise en forme listbox [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    superviseur maintenance mine
    Inscrit en
    Juillet 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : superviseur maintenance mine
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 13
    Par défaut Mise en forme listbox
    Bonjour à tous
    tout d'abord un grand merci à vous pour vos contributions.
    Je débute en VBA et les nombreux codes présents sur le site m'ont beaucoup aidé.

    je rencontre encore deux obstacles dans un code que j'ai "emprunté".
    Je voudrais que le troisième colonnes de ma listbox soit au format hh:mm et pas 41450.5555.
    ensuite quand le filtre n'a pas de résultat, je voudrais qu'un msgbox s'affiche, que mon combobox soit remis à zero plutôt qu'un plantage.

    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
    Private Sub combobox3_change()
     
    Dim MonDico As Object
    Dim c As Range
    Dim L As Long
    Dim i As Byte, k As Byte, Nbc As Byte
     
    Application.ScreenUpdating = False
    Nbc = 10
     
    With ListBox1
        .Visible = True
        .ColumnCount = Nbc
        .ColumnHeads = False
        .ColumnWidths = "55;65;35;58;55;35;300;40;30"
        .AddItem Range("a1").Text
        .Clear
    End With
    Set MonDico = CreateObject("Scripting.Dictionary")
     
        With Sheets("or_sup")
            .AutoFilterMode = False
            L = .Cells(.Rows.Count, "E").End(xlUp).Row
            .Range("A1:O" & L).AutoFilter Field:=5, Criteria1:=ComboBox3
            .Range("A1:O" & L).AutoFilter Field:=8, Criteria1:=""
            'If .Range("E2:E" & L).Count = 0 Then
             '       result = MsgBox("la machine n'est pas DOWN", vbExclamation)
             '       ComboBox3.Clear
     
            If .Range("E2:E" & L).SpecialCells(xlCellTypeVisible).Count > 1 Then
                For Each c In .Range("A5:A" & L).SpecialCells(xlCellTypeVisible)
                    If Not MonDico.Exists(c.Value) Then
                        MonDico.Add c.Value, c.Value
                        ListBox1.AddItem
                        For k = 0 To Nbc - 1
                            ListBox1.List(ListBox1.ListCount - 1, k) = c.Offset(0, k)
     
                        Next k
                    End If
                Next c
             End If
            .AutoFilterMode = False
        End With
    Set MonDico = Nothing
     
     
    End Sub
    Merci pour votre aide

    Ben

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Vous pourriez remplacer la ligne de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.List(ListBox1.ListCount - 1, k) = c.Offset(0, k)
    par celles-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If k = 2 Then
        ListBox1.List(ListBox1.ListCount - 1, k) = Format(c.Offset(0, k), "HH:MM")
    Else
        ListBox1.List(ListBox1.ListCount - 1, k) = c.Offset(0, k)
    End If
    Pensez également à rajouter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ScreenUpdating = True
    à la fin de votre code.

    Cdt

  3. #3
    Membre averti
    Homme Profil pro
    superviseur maintenance mine
    Inscrit en
    Juillet 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : superviseur maintenance mine
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 13
    Par défaut
    Merci Benjamin, cela fonctionne parfaitement pour la mise en forme.


    reste le bug quand mon filtre est vide.

    Ben

  4. #4
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Content que cela marche.

    Pour l'erreur quand le filtre est vide, je remarque que dans les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If .Range("E2:E" & L).SpecialCells(xlCellTypeVisible).Count > 1 Then
    For Each c In .Range("A5:A" & L).SpecialCells(xlCellTypeVisible)
    les plages testées ne commencent pas à la même ligne. Est-ce voulu ?

    Sinon, difficile de vous aider plus sans des explications complémentaires sur le plantage, l'endroit où il se produit, voire un fichier exemple.

    Cdt

  5. #5
    Membre averti
    Homme Profil pro
    superviseur maintenance mine
    Inscrit en
    Juillet 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : superviseur maintenance mine
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 13
    Par défaut
    Bonjour Benjamin,
    l'erreur se produit sur la première ligne car le IF est conditionné par >1
    Dans mon cas, je désirerai un code qui m'affiche une msgbox pour =0 et revenir au USF pour un nouveau choix du combobox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .Range("E2:E" & L).SpecialCells(xlCellTypeVisible).Count > 1 Then
    Concernant cette ligne, le code est bon, si je mets "E5:E" j'ai un décalage de colonnes dans l'affichage de ma listbox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In .Range("A5:A" & L).SpecialCells(xlCellTypeVisible)
    Merci
    Ben

  6. #6
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour Ben,

    Il faudrait vérifier, lors d'un cas d'exécution de ton code qui conduit à un plantage, si l'objet Range que tu utilises est vide ou non.
    Si tel est le cas, il n'est possible d'utiliser la méthode Count.

    Ci-dessous un exemple qui contourne ce problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        '...
        Dim NbCells As Long, Erreur As Boolean
        '...
        On Error Resume Next
        NbCells = .Range("E2:E" & L).SpecialCells(xlCellTypeVisible).Count
        If Err.Number <> 0 Then Erreur = True
        On Error GoTo 0
        If NbCells > 0 And Not Erreur Then
            '...
        End If
        '...
    A adapter.

    Cdt

  7. #7
    Membre averti
    Homme Profil pro
    superviseur maintenance mine
    Inscrit en
    Juillet 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : superviseur maintenance mine
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 13
    Par défaut
    Comme on dit ici sur le caillou: "Tu es un King"

    Merci beaucoup

    Ben

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

Discussions similaires

  1. Mise en forme listbox
    Par Chris171717 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/02/2013, 23h52
  2. Réponses: 8
    Dernier message: 19/06/2006, 16h31
  3. mise en forme rapide d'applets
    Par appletj dans le forum Applets
    Réponses: 11
    Dernier message: 03/06/2004, 13h28
  4. Mise en forme HTML
    Par Regis.C dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 25/04/2004, 11h55
  5. Mise en forme fichier avant Import
    Par jeff37 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 21/04/2004, 15h16

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