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 d'execution LISTBOX [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut Erreur d'execution LISTBOX
    Bonjour,

    Je débute dans le VBA et j'essaye de coder une listbox qui m'affiche le nom de tous mes onglets.

    Voici le code que j'ai écrit :

    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 ListBox1_Change()
    n = 0
    m = 0
    Z = 0
     
    Sheets("Feuil35").Activate
    Z = ListBox1.ListIndex
    n = ListBox1.List(Z)
    m = Sheets(n).Index
    Range("A1").Value = n
    Range("A2").Value = m
     
    UserForm1.Hide
     
    End Sub
    -----------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub UserForm_Activate()
     
    Me.ListBox1.Clear
    For i = 8 To 33
    Me.ListBox1.AddItem Sheets(i).Name
    Next
     
    End Sub
    Il marche plutôt bien seulement il y a un hic !
    Il marche une fois et la seconde fois il me renvoi l'erreur d'execution 381. et il a quelquechose contre le ligne suivante :

    Auriez vous une réponse ?

    Merci d'avance !

    Thomas

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Tu devrais déclarer tes variables de façon explicite et bien sûr les typées aussi de façon explicite car sinon elles sont de type "Variant". Dans ton code, au début, la variable "n" est de type "Integer" (n = 0) ensuite le compilateur doit faire une conversion de type pour en faire un type "String" (ce qui, si ça se produit souvent dans le code, le ralenti). Comme tu commence à programmer je te conseillerai d'aller dans le menu Outils > Options... > Onglet Editeur et cocher la case "Déclaration des variables obligatoire", ce qui aura pour effet d'inscrire en tête de tous modules la mention "Option Explicit". Ensuite, le débogueur s'arrêtera sur chaque variable non déclarée.
    Bien sûr, il te faudra aussi typer chaque variable, si elle doit recevoir du texte, elle sera de type String ce qui est le cas dans ton code, etc...
    De cette façon, je n'ai pas d'erreur en exécutant plusieurs fois l'évènement Change de la 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
     
    Private Sub ListBox1_Change()
     
        Dim n As String
        Dim m As Integer
        Dim z As Integer
     
        'Integer retouné
        z = ListBox1.ListIndex
     
        'String retourné
        n = ListBox1.List(z)
     
        'Integer retourné
        m = Sheets(n).Index
     
        Range("A1").Value = n
        Range("A2").Value = m
     
        UserForm1.Hide
     
    End Sub
     
    Private Sub UserForm_Initialize()
     
        Dim I As Integer
     
        For I = 8 To 33
     
            ListBox1.AddItem Sheets(I).Name
     
        Next
     
        'ceci peut être mis ici, il ne sert à rien de l'exécuter plusieur fois
        Sheets("Feuil35").Activate
     
    End Sub
    Hervé.

  3. #3
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour Thomas , Hervé, le forum,

    Une petite explication complémentaire sur le dysfonctionnement que tu as constaté avec ton code.
    A la première activation de l'Userform, l'effacement de la ListBox (ListBox1.Clear) ne provoque pas l'évènement Change puisque la ListBox est vide.
    Par contre, à la deuxième activation de l'Userform, cet effacement provoque l'évènement Change, la ListBox étant alors renseignée.
    La procédure ListBox1_Change() étant lancée avec la ListBox vide, z est égal à -1 et ListBox1.List(Z) ne peut pas retourner un élément puisque la liste est vide.

    Cordialement.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Merci Hervé mais ça ne marche toujours pas.

    gFZT82 que dois je faire pour qu'il marche ? qu'elles sont les modifs necessaires ?

    Merci d'avance

  5. #5
    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 175
    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 175
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ceci devrait fonctionner
    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
    Option Explicit
    Private Sub ListBox1_Change()
     With ListBox1
      If .ListIndex > -1 Then WriteData .ListIndex: UserForm1.Hide
     End With
    End Sub
    Private Sub UserForm_Activate()
     Dim i As Byte
     Me.ListBox1.Clear
     For i = 8 To 33: Me.ListBox1.AddItem Sheets(i).Name: Next
    End Sub
    Private Sub WriteData(Selection As Byte)
     With Sheets("Feuil1")
     .Range("A1").Value = ListBox1.List(Selection)
     .Range("A2").Value = Sheets(ListBox1.List(Selection)).Index
     End With
    End Sub
    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

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 8
    Par défaut
    Ca marche super !!!
    Merci beaucoup !!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/03/2015, 11h56
  2. listbox probleme erreur d execution 13
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/12/2007, 17h41
  3. Réponses: 3
    Dernier message: 03/11/2005, 18h41
  4. [LDAP][Interface Winldap.h] Erreur d'execution
    Par -=Spoon=- dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 10/03/2005, 17h10
  5. [javamail] erreur d'execution
    Par bibx dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 05/12/2003, 11h04

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