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 :

réglages d'un form


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juillet 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : juillet 2010
    Messages : 152
    Points : 96
    Points
    96
    Par défaut réglages d'un form
    Bonjour à tous,

    Merci pour votre aide et les différents tutos ça m'a bien aidé à avancer.
    Mon form fonctionne très bien j'ai juste un petit problème lorsque je charge ma listbox j'ai 2 lignes selectionnées, toujours les mêmes si je les supprime de la base il m'en selectionne toujours 2. Je n'ai pourtant pas l'impression de selectionner des lignes. J'ai tenté le code suivant sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 To Me.ListBox1.ListCount - 1
     If Me.ListBox1.Selected(i) = True Then Me.ListBox1.Selected(i) = False
    Next i:
    je l'avais mis dans mon UserForm_Activate() et il y avait déjà dans mon code un " ListBox1.Clear" bref je sais plus trop quoi faire

    Je vous mets le code de mon userform_activate


    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
     
    Private Sub UserForm_Activate()
        Dim i As Long
        Dim x As Integer, DerniereLigne As Integer
     
    Sheets("data_global").Select
     'On récupère la dernière ligne de la source de données
        If Cells(Rows.Count, 1).End(xlUp).Row = 1 Then
            DerniereLigne = 2
        Else
            DerniereLigne = Cells(Rows.Count, 1).End(xlUp).Row
        End If
     
            ListBox1.Clear
     'On définit la dimension de nos colonnes
             With Me.ListBox1
                .ColumnHeads = True
                .ColumnWidths = "15;30;100;100;100;100;100;0"
                .ColumnCount = 7
                .ListStyle = 1
                .MultiSelect = 1
            End With
     'On alimente la list box avec les données qui nous intéressent
            For x = 1 To DerniereLigne
            If Left(Cells(x, 2), 7) = "Demande" Then
            Me.ListBox1.AddItem Cells(x, 1)
            Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = Cells(x, 4)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = Cells(x, 10)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = Cells(x, 11)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = Cells(x, 7)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = Cells(x, 6)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = Cells(x, 8)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 7) = Cells(x, 9)
                Me.ListBox1.List(Me.ListBox1.ListCount - 1, 8) = Cells(x, 3)
         '       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 9) = Cells(x, 10)
            End If
        Next x
              For i = 0 To Me.ListBox1.ListCount - 1
     If Me.ListBox1.Selected(i) = True Then Me.ListBox1.Selected(i) = False
    Next i:
    End Sub
    Enfin le fait d'utiliser la méthode additem m'a fait sauter les entêtes. Y a t'il une manière de les définir même manuellement. En regardant sur internet j'ai vu que certains positionnaient des labels mais j'aimerai une solution un peu plus "propre" si possible.
    Désolé pour la pavé ^^

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juillet 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : juillet 2010
    Messages : 152
    Points : 96
    Points
    96
    Par défaut
    please help

    Pour la partie en tete, au pire je ferai avec des libelés même si je trouve ça un peu "barbare". Mais pour la selection de mes deux lignes lors du chargement du formulaire ça m'embête vraiment parce que je sais déjà qu'on va me demander de corriger ce bug...
    Si quelqu'un a une piste je suis vraiment preneur parce que je ne comprends pas cette selection

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 815
    Points : 51 138
    Points
    51 138
    Billets dans le blog
    94
    Par défaut
    Salut.

    Les entêtes ne sont disponibles que lorsque la listbox est liée à une plage. Additem fait que la listbox n'est pas liée à une plage => plus d'entêtes...

    Pour le reste, je n'ai pas compris ton problème... Une petite copie d'écran pourrait aider.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    janvier 2010
    Messages
    10 774
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : janvier 2010
    Messages : 10 774
    Points : 25 720
    Points
    25 720
    Billets dans le blog
    33
    Par défaut
    Bonjour,
    Juste une petite remarque sur le premier code publié et que je reproduis ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 To Me.ListBox1.ListCount - 1
     If Me.ListBox1.Selected(i) = True Then Me.ListBox1.Selected(i) = False
    Next i:
    Pourquoi effectuer un test alors que manifestement la propriété de chaque élément doit être à False. Il serait plus simple et plus logique d'écrire simplement Me.ListBox1.Selected(i) = False
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Ma dernière contribution : VBA - Les macros complémentaires

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    mars 2021
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2021
    Messages : 270
    Points : 470
    Points
    470
    Par défaut
    Oui pour les entêtes il faut utiliser la méthode RowSource.

    C'est assez facile a remplir avec un tableau structuré.

    Voici la fonction de remplissage d'un listbox :

    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
    Public Function ListRefresh(LstBox As MSForms.ListBox, sht As Worksheet, nomtab As String)
    Dim nbcol As Integer
    Dim ColW As String
    Dim errNum As Integer
     
    On Error GoTo err
    LstBox.RowSource = vbNullString
    errNum = 0
     
    If sht.ListObjects(nomtab).ListRows.count = 0 Then GoTo err
     
    errNum = 1
     
    nbcol = sht.ListObjects(nomtab).ListColumns.count
     
    For i = 1 To nbcol
        ColW = ColW & sht.ListObjects(nomtab).ListColumns(i).DataBodyRange.Width & ";"
    Next i
     
    With LstBox
    .ColumnHeads = True
    .ColumnCount = nbcol
    .ColumnWidths = ColW
    .RowSource = sht.Range(nomtab).Address(External:=True)
    End With
     
    Exit Function
     
    err:
    Select Case errNum
        Case 0
        MsgBox "La liste est vide, aucun OF n'est en cours", vbInformation
        Case 1
        MsgBox " Erreur lors de la génération de la liste, vérifiez que le tableau " & nomtab & " est bien présent dans la feuille " & sht.Name
        Case Else
        Exit Function
    End Select
     
    End Function
    En entrée de la fonction tu dois mettre ta listbox, la feuille ou se trouve le tableau structuré et en dernier le nom du tableau structuré.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    ListRefresh Me.ListBox1, Feuil5, "OF_en_cours"
    End Sub
    Si tu as tout ça la listbox se remplira toute seule avec les entêtes de ton tableau ainsi que la largeur des colonnes de ton tableau.

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    juillet 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : juillet 2010
    Messages : 152
    Points : 96
    Points
    96
    Par défaut
    Merci aux admin pour avoir déplacer mon post qui trouvent de nombreuses réponses ici.

    @Pierre, il me semble bien, mais ça parait tellement incompréhensible qu'on ne puisse pas au moins les définir manuellement...

    @Merci Philippe tu as allégé mon code effectivementce controle n'a pas de sens

    @christian oui je suis d'accord j'utilise au départ ce type de code, mais j'ai du passer par le additem afin d'avoir une case à cocher qui me permette de faire una validation de certaines lignes, et je ne crois pas que ça soit possible directement.

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    mars 2021
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2021
    Messages : 270
    Points : 470
    Points
    470
    Par défaut
    Sinon il y a possibilité d'utiliser l'item listview a la place des listbox, cet objet dispose de plus de possibilités que la listbox dont l'ajout d'un checkbox sur les lignes. J'en parle ici https://www.developpez.net/forums/d2...faut-listview/ (j'avais un problème de sélection des lignes mais tous le code utilisé est dans la conv)

Discussions similaires

  1. [XL-2010] Réglages de mise en forme d'un graphique CD
    Par SadeMan dans le forum Excel
    Réponses: 0
    Dernier message: 05/09/2018, 08h17
  2. Formulaire : réglages du "form action" ?
    Par imudo dans le forum Langage
    Réponses: 0
    Dernier message: 29/11/2011, 19h59
  3. Réponses: 87
    Dernier message: 06/07/2011, 15h33
  4. [FORMS] Chemin des icones (intégré FAQ 150 QR)
    Par jerome62 dans le forum Forms
    Réponses: 2
    Dernier message: 30/07/2002, 08h32
  5. Form principale non visible au demarrage!!!!
    Par toufou dans le forum Composants VCL
    Réponses: 2
    Dernier message: 20/07/2002, 21h49

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