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 :

ListBox.value ne se modifie pas toujours


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut ListBox.value ne se modifie pas toujours
    Bonjour à tous,
    Pour l'un de mes projets Excel, j'ai un souci que je n'arrive pas à résoudre (et pour lequel ce forum ne me donne pas la solution, c'est bien la première fois! ). Dans un de mes userform j'ai le code en dessous (mon problème s'applique lorsque preUSF = 9) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Userform_Initialize()
        Call InitProd 'fonction d'initialisation ; ne devrai pas être la cause de mon problème
        List_TypeMac.List = Array("HAND CRIMPERS", "ELECTRIC CRIMPERS", "PRODUCTION CRIMPERS", "INDUSTRIAL CRIMPERS", "CUTTING MACHINES", "SKIVING MACHINES", "OTHER EQUIPMENT")
        If preUSF = 9 Then
            MultiPage1.Value = 1
            List_TypeMac.Value = TypeMac 'ici la valeur de List_TypeMac se change bien à chaque fois
            List_Mac.Value = NomEN 'ici la valeur reste parfois à "" alors que NomEN lui n'est pas égal à ""
        Else
            MultiPage1.Value = 0
        End If
    End Sub
    Les commentaires indiquent mon problème : l'une de mes listbox ne change pas toujours de valeur. Je précise que j'ai un sub List_TypeMac_Change qui modifie la valeur des items de List_Mac :

    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
     
    Private Sub List_TypeMac_Change()
        List_Mac.Clear
        Entry_Nom_FR.Value = ""
        Entry_Nom_EN.Value = ""
        Entry_Nom_DE.Value = ""
        Entry_Nom_ES.Value = ""
        Entry_Nom_IT.Value = ""
     
        Select Case List_TypeMac.ListIndex
        Case 0, 1, 2, 3
            For Y = 1 To UBound(TabMac, 2) 'TabMac est un tableau de 2 dimensions qui comprend les valeurs que doivent prendre les items de List_Mac
                If TabMac(List_TypeMac.ListIndex + 1, Y) <> "" Then List_Mac.AddItem TabMac(List_TypeMac.ListIndex + 1, Y)
            Next Y
        Case 4
            For Y = 1 To UBound(TabMac, 2)
                If TabMac(List_TypeMac.ListIndex + 3, Y) <> "" Then List_Mac.AddItem TabMac(List_TypeMac.ListIndex + 3, Y)
            Next Y
        Case 5, 6
            For Y = 1 To UBound(TabMac, 2)
                If TabMac(List_TypeMac.ListIndex + 4, Y) <> "" And TabMac(List_TypeMac.ListIndex + 4, Y) <> "SKIVING TOOLS" And TabMac(List_TypeMac.ListIndex + 4, Y) <> "OTHER : OPTIONS AND SPARE PARTS" Then List_Mac.AddItem TabMac(List_TypeMac.ListIndex + 4, Y)
            Next Y
        End Select
    End Sub
    J'ai également un sub List_Mac_Change qui s'applique, l'objectif est de donner des valeurs par défaut aux inputbox de mon 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
     
    Private Sub List_Mac_Change()
    If List_Mac.Value <> "" Then 'j'ai précisé cette condition pour éviter de faire buguer ma macro en attendant de résoudre mon problème
        NomMac = List_Mac.Value
        i = Application.Match(NomMac, PriceList.Columns(4), 0)
        Entry_Nom_FR.Value = PriceList.Range("C" & i).Value 'tous ces "entry" sont des inputbox ; PriceList et ProductGuide sont des sheets de mon classeur
        Entry_Nom_EN.Value = PriceList.Range("D" & i).Value
        Entry_Nom_DE.Value = PriceList.Range("E" & i).Value
        Entry_Nom_ES.Value = PriceList.Range("F" & i).Value
        Entry_Nom_IT.Value = PriceList.Range("G" & i).Value
        If PriceList.Range("O" & i).Value <> "" Then Entry_IMG.Value = ThisWorkbook.Path & "\IMAGES\" & PriceList.Range("O" & i).Value
        i = Application.Match(NomMac, ProductGuide.Columns(1), 0)
        Entry_Position.Value = ProductGuide.Range("B" & i).Value
        Entry_Benefits.Value = ProductGuide.Range("C" & i).Value
        Entry_Notes.Value = ProductGuide.Range("E" & i).Value
        If ProductGuide.Range("F" & i) Like "*English*" Then CheckBoxEN = True Else CheckBoxEN = False
        If ProductGuide.Range("F" & i) Like "*French*" Then CheckBoxFR = True Else CheckBoxFR = False
        If ProductGuide.Range("F" & i) Like "*German*" Then CheckBoxDE = True Else CheckBoxDE = False
        If ProductGuide.Range("F" & i) Like "*Spanish*" Then CheckBoxES = True Else CheckBoxES = False
        If ProductGuide.Range("F" & i) Like "*Italian*" Then CheckBoxIT = True Else CheckBoxIT = False
        If ProductGuide.Range("H" & i).Value <> "" Then Entry_DeliveryTime.Value = Left(ProductGuide.Range("H" & i).Value, Len(ProductGuide.Range("H" & i).Value) - 25)
        Entry_Codes.Value = ProductGuide.Range("I" & i).Value
        Entry_Packing.Value = ProductGuide.Range("J" & i).Value
    End If
    End Sub
    D'où mon problème : si List_Mac ne change pas de valeur comme attendu, mon userform ne se comporte pas du tout comme je le veux! Si vous pouviez m'aider, soit à résoudre le problème soit à le contourner (une préférence tout de même pour la résolution car je ne comprends pas du tout d'où ça peut venir :p) ça serait super chouette! Merci d'avance!

    Edit : je précise que ce problème ne survient même pas systématiquement, et pourtant avec exactement les mêmes actions.
    Edit2 (je vous donne des infos au fur à mesure que j'en ai) : Quand le problème survient, pas moyen de modifier la valeur de ce listbox, même en insistant :

    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
    Private Sub Userform_Initialize()
        Call InitProd
        List_TypeMac.List = Array("HAND CRIMPERS", "ELECTRIC CRIMPERS", "PRODUCTION CRIMPERS", "INDUSTRIAL CRIMPERS", "CUTTING MACHINES", "SKIVING MACHINES", "OTHER EQUIPMENT")
        If preUSF = 9 Then
            MultiPage1.Value = 1
            List_TypeMac.Value = TypeMac
            List_Mac.Value = NomEN
            If List_Mac.Value <> NomEN Then
                List_Mac.ListIndex = 0
                List_Mac.Value = NomEN
            End If
        Else
            MultiPage1.Value = 0
        End If
    End Sub
    Ici même en modifiant la valeur via ListIndex, List_Mac.Value reste toujours égal à ""

    Deuxième essai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Userform_Initialize()
        Call InitProd
        List_TypeMac.List = Array("HAND CRIMPERS", "ELECTRIC CRIMPERS", "PRODUCTION CRIMPERS", "INDUSTRIAL CRIMPERS", "CUTTING MACHINES", "SKIVING MACHINES", "OTHER EQUIPMENT")
        If preUSF = 9 Then
            MultiPage1.Value = 1
            List_TypeMac.Value = TypeMac
            List_Mac.Value = NomEN
            While List_Mac.Value <> NomEN 
                List_Mac.Value = NomEN
            Wend
        Else
            MultiPage1.Value = 0
        End If
    End Sub
    Et la ça tourne en boucle...

    Edit3 : J'ai une info intéressante! Le problème survient quand List_Mac.Value vaut "" avant modification de List_Mac.Value. S'il vaut Null alors ma macro marche. Mais pas moyen d'affecter Null à la valeur de List_Mac...

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2018
    Messages : 4
    Par défaut
    J'ai beau tourner le problème dans tous les sens, quand la valeur List_Mac.Value se bloque à "", mon seul moyen pour modifier sa valeur est de le faire en cliquant sur ma liste en tant qu'utilisateur. Mais vraiment ça m'embête de pas l'automatiser. Avez-vous une solution pour simuler un clic sur mon interface par macro ?

Discussions similaires

  1. Fonction ne retournant pas toujours une valeur
    Par mastochard dans le forum C
    Réponses: 14
    Dernier message: 25/05/2006, 12h13
  2. [CSS] a:active ne fonctionne pas toujours ?
    Par KpTn dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/05/2006, 17h25
  3. Réponses: 9
    Dernier message: 04/10/2005, 19h39
  4. db enregistre pas toujour
    Par cre3000 dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/05/2005, 12h16
  5. [VB6] [Validate et CausesValidation] Ca marche pas toujours !!!
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 16/12/2003, 22h09

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