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 :

Problème avec le dernier item d'un ComboBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Par défaut Problème avec le dernier item d'un ComboBox
    Bonsoir,

    j'ai rédigé une fonction qui renvoie le jour de la semaine dans une langue choisie parmi une liste de langues :
    Code vb : 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
     
    Function NomJourSemaineTrip$(Optional fecha As Date, Optional ChxLangue As Byte, Optional NomLangue As Boolean = False, Optional NbItems As Boolean = False)
    'Renvoie le jour de la semaine correspondant à une date
    '- fecha : une date
    '- ChxLangue : choix de la langue. Ex : 1 --> Afrikaans | 2 --> Alabama | 3 --> Albanais |...
    '- NomLangue : si omis ou False --> nom du jour de la semaine dans la langue choisie
    '              si True --> nom de la langue choisie
    '- NbItems : si True --> nombre de langues répertoriées dams la fonction
    '- transcription : si True --> vérifie si la langue choisie est dans un alphabet ésotérique (grec, cyrillique...) et recherche sa transcription latinisée
    'ATTENTION ! Après toute modification, ne pas oublier de mettre à jour "NbLangues" & les "Case" de "latinisation"
     
    Dim langue, NbLangues As Byte, latinisation
     
        Select Case ChxLangue
            Case 1: langue = Array("Sonndag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrydag", "Saterdag", "Afrikaans")
            Case 2: langue = Array("Nihtahollo", "Nihta a" & ChrW(620) & ChrW(620) & "ámmòona", "Nihta atòkla", "Nihta atótchìina", "Nihta istóstàaka", "Nihta istá" & ChrW(620) & ChrW(620) & "àapi", "Nihtahollosi", "Alabama")
            Case 3: langue = Array("E diel", "E hënë", "E martë", "E mërkurë", "E enjte", "E premte", "E shtunë", "Albanais")
            Case 4: langue = Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Allemand")
            Case 5: langue = Array("Sonndich", "Mendich", "Denschdich", "Mittich", "Donnerschtich", "Fraidich", "Samschdich", "Allemand (Bavarois)")
        End Select
        NbLangues = 5  'nombre de langues répertoriées dans la fonction
     
        If NbItems Then
            NomJourSemaineTrip = NbLangues                   'nombre total de langues répertoriées dans la fonction
        ElseIf NomLangue Then
            NomJourSemaineTrip = langue(7)                   'langue choisie
        Else
            NomJourSemaineTrip = langue(Weekday(fecha) - 1)  'jour de la semaine, correspondant à la date "fecha", dans la langue choisie (Option Base 0)
        End If
     
    End Function
    Pour pouvoir utiliser commodément cette fonction, je charge un ComboBox avec les noms de toutes les langues répertoriées dans la fonction :
    Code vb : 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 UserForm_Initialize()
    'Ouverture de l'UserForm "UF_JS"
     
    Dim dico As Object, ListeLangues, NbItems As Byte, i As Byte
     
        Set dico = CreateObject("Scripting.Dictionary")  'le dictionnaire
        NbItems = NomJourSemaineTrip(, , , True)         'nombre de langues répertoriées dans la fonction "NomJourSemaineTrip"
     
        'Dresse un tableau avec la liste des langues répertoriées dans la fonction "NomJourSemaineTrip"
        ReDim ListeLangues(NbItems)
        For i = 1 To NbItems
            ListeLangues(i) = NomJourSemaineTrip(, i, True)
        Next
     
        'Dresse la liste des items du ComboBox "ComboBox_LanguesProposées"
        For i = 1 To UBound(ListeLangues)  'rempli le dictionnaire ("dico") avec les éléments de la matrice "ListeLangues" (Option Base 0)
            dico(ListeLangues(i)) = ""
        Next
     
        ComboBox_LanguesProposées.List = dico.keys  'charge la liste du ComboBox "ComboBox_LanguesProposées" à partir du dictionnaire
        ComboBox_LanguesProposées.ListIndex = Array_Pos(ListeLangues, [LangueActuelle]) - 1 'sélection de la dernière langue choisie mémorisée dans la cellule nommée "LangueActuelle"
     
    End Sub

    Code vb : 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
     
    Function Array_Pos(tableau, recherche)
    'Connaître la position d'un item dans un Array
    '- tableau : une matrice
    '- recherche : un item de l'Array
     
    Dim i
     
        Array_Pos = -1                      'par défaut, la valeur n'a pas été trouvée dans le tableau
     
        For i = LBound(tableau) To UBound(tableau)
            If tableau(i) = recherche Then  'la valeur a été trouvée
                Array_Pos = i
                Exit For
            End If
        Next
     
    End Function
    La fonction marche très bien, le ComboBox se charge très bien, seulement persiste un problème : si je choisis le dernier item (ici "Allemand (Bavarois)"), le nom du jour de la semaine dans cette langue apparaît bien après fermeture du formulaire, mais si je veux réouvrir le formulaire pour accéder au ComboBox, ça plante avec ce message (traduit de l'espagnol) :
    Erreur 13
    Les types ne coïncident pas


    Comment y remédier ?

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 440
    Par défaut
    Bonjour,

    A mon avis, l'erreur vient de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox_LanguesProposées.ListIndex = Array_Pos(ListeLangues, [LangueActuelle]) - 1
    où LangueActuelle provoque l'erreur 2029 quand il n'y a pas de langue, ou est mal initialisé.
    Pour le voir, mettre un point d'arrêt sur cette ligne, et survoler avec la souris les variables.

    Cordialement.

Discussions similaires

  1. [XL-365] Problème avec Recherche plus rapide dans un ComboBox grâce à la saisie intuitive
    Par Fa1con74 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/05/2020, 11h51
  2. Problème avec le dernier élément du tableau
    Par paskal++ dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 08/11/2018, 22h00
  3. [Débutant] Problème avec un selected Item
    Par jchevalay54 dans le forum C#
    Réponses: 2
    Dernier message: 21/03/2012, 08h45
  4. problème avec les stock items
    Par ndac91 dans le forum GTK+ avec C & C++
    Réponses: 16
    Dernier message: 12/05/2010, 16h50
  5. Problème avec un composant ComboBox
    Par florette dans le forum Composants VCL
    Réponses: 4
    Dernier message: 08/05/2006, 13h07

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