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 :

Erreur avec Listbox_Change


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 24
    Par défaut Erreur avec Listbox_Change
    Bonjour à tous,

    Dans une Listbox (case à cocher), j'aimerai pouvoir stipuler que si on coche la premiere alors toutes les suivantes doivent être coché : (case "Select All") ou alors si une case est coché aucune autre ne peut etre coché.

    J'utilise pour ca la commande ListBox_Change mais ca plante et quand je fais la mode pas à pas, une fois arrivé en End Sub il repart au mileu de la macro o_O.

    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
     
    Private Sub ListBox2_Change()
     
    Dim i As Integer
    Dim InWork As Boolean
     
    If Not InWork Then
        If ListBox2.ListIndex = 0 Then
     
                If ListBox2.Selected(0) Then
                ListBox2.Selected(1) = True
                ListBox2.Selected(2) = True
                ListBox2.Selected(3) = True
                ListBox2.Selected(4) = True
                Else
                ListBox2.Selected(1) = False
                ListBox2.Selected(2) = False
                ListBox2.Selected(3) = False
                ListBox2.Selected(4) = False
                End If
     
        End If
     
        InWork = False
    End If
     
    End Sub

  2. #2
    Membre habitué
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Par défaut
    Bonjour

    Il faudrait que tu déclare ta variable InWork à l’extérieure de la routine Sub, et que tu passe cette variable à 1 après son test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim InWork As Boolean
     
    Private Sub ListBox2_Change()
    Dim i As Integer
    If Not InWork Then
        InWork = True
        If ListBox2.ListIndex = 0 Then
    Mais pour l’instant ça ne réglera que la partie tout sélectionner et tout désélectionner.

    Cordialement

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 24
    Par défaut
    Il n'accepte pas que je déclare la variable hors-routine.

  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
    13 176
    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 : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour ne pas boucler dans un ListBox ou ComboBox mettre la propriété ListIndex à -1 mais je ne crois pas que tu vas pour autant résoudre ton problème.
    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
     If ListBox2.ListIndex = 0 Then
       ListBox2.ListIndex = -1
       If ListBox2.Selected(0) Then
         ListBox2.Selected(1) = True
         ListBox2.Selected(2) = True
         ListBox2.Selected(3) = True
         ListBox2.Selected(4) = True
       Else
         ListBox2.ListIndex = -1
         ListBox2.Selected(1) = False
         ListBox2.Selected(2) = False
         ListBox2.Selected(3) = False
         ListBox2.Selected(4) = False
       End If
     End If
    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
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre habitué
    Homme Profil pro
    Automaticien
    Inscrit en
    Avril 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Automaticien
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 14
    Par défaut
    Bonjour

    Je ne vois pas ou est le problème par rapport à ce que je t’ai conseillé, j’ai testé ceci dans un nouveau classeur.

    - création d’un UserForm
    - placer une ListBox appelé ListBox2
    - Pour la ListBox2 positionner la propriété MultiSelect à fmMultiSelectMulti
    - Puis placer ce code dans le Userform

    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 InWork As Boolean
     
    Private Sub ListBox2_Change()
    Dim i As Integer
    If Not InWork Then
        InWork = True
        If ListBox2.ListIndex = 0 Then
     
                If ListBox2.Selected(0) Then
                ListBox2.Selected(1) = True
                ListBox2.Selected(2) = True
                ListBox2.Selected(3) = True
                ListBox2.Selected(4) = True
                Else
                ListBox2.Selected(1) = False
                ListBox2.Selected(2) = False
                ListBox2.Selected(3) = False
                ListBox2.Selected(4) = False
                End If
     
        End If
     
        InWork = False
    End If
     
    End Sub
     
    Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = 0 To 4
      ListBox2.AddItem "Choix : " & i
    Next
    End Sub
    J’ai testé et ça fonctionne, quand est-il pour toi ?

  6. #6
    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
    Bonjour,

    Supprime tout le code de l'évènement Change et teste ceci :
    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
    Private Sub ListBox2_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Dim i As Integer
     
    With Me.ListBox2
        If .ListIndex = 0 Then
            If .Selected(0) = True Then
                For i = 0 To .ListCount - 1
                    .Selected(i) = True
                Next
            Else
                For i = 0 To .ListCount - 1
                    .Selected(i) = False
                Next
            End If
        Else
            For i = 0 To .ListCount - 1
                .Selected(i) = False
            Next
            .Selected(.ListIndex) = True
        End If
    End With
    End Sub

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 24
    Par défaut
    C'est déjà bien mieux comme ça ! Mais en faite avec ta solution fring, c'est un mix des 2 type de Listbox que je veux créer.
    Car avec ta solution, le select all marche bien mais j'aimerai pouvoir quand meme pouvoir sélectionner plusieurs cases en meme temps.

    Par ailleurs, pour une autre listbox j'aimerai qu'une seule sélection soit possible sans qu'il y est de select all en item 0.

    Mais j'ai déjà matière à creuser avec ça, merci pour votre réactivité!

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

Discussions similaires

  1. Erreur Avec Interbase
    Par smokemon dans le forum Bases de données
    Réponses: 1
    Dernier message: 29/10/2004, 07h24
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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