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 :

Fonction personnelle inopérante [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Par défaut Fonction personnelle inopérante
    Bonjour,

    je m'essaie (enfin) aux fonctions afin d'alléger mon code. Je pense que je fais une boulette super simple mais là je coince et j'ai besoin d'un peu de savoir faire pour comprendre là où je foire.

    Voici la fonction que je souhaite réaliser (But : rechercher un texte dans une liste et le sélectionner) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function rechlist(Liste As ListBox, texte As String)
        For i = 0 To L.ListCount - 1 Step 1
            If UserForm1.L.Column(0, i) = texte Then
                UserForm1.L.Selected(i) = True
                Exit For
            End If
        Next i
    End Function
    voici comment j'appelle ma fonction (la ligne apparaît en rouge et je ne comprends pas pourquoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rechlist(ListBox2, "Bob dit l'âne")
    j'ai l'impression qu'il (Excel) veut quelque chose de semblable à variable=rechlist ...

    bref pouvez vous m'indiquer les erreurs et comment faire pour y remédier,

    Merci d'avance (PS j'ai parcouru le document sur les fonctions donc inutile de m'orienter vers ce document)

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    j'aurai plutôt vu une procédure au lieu d'une fonction ... dans la mesure où tu n'as aucun résultat à retourner mais uniquement une action à effectuer

    De plus :

    - L'argument Liste est à typer en msforms.ListBox
    - tu utilises la variable L au lieu de Liste dans la fonction
    - tu ne dois pas rattacher Liste à Userform1 : la variable Liste étant déjà une ListBox rattachée à son userform quand tu appelles la fonction

    voici qui fonctionne chez moi :

    dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Sub rechlist(Liste As msforms.ListBox, texte As String)
        With Liste
            For i = 0 To .ListCount - 1 Step 1
                If .Column(0, i) = texte Then
                    .Selected(i) = True
                    Exit For
                End If
            Next i
        End With
    End Sub

    dans le module du Userform, j'utilise :

    - le contrôle ListBox1 où la recherche et selection se fera
    - le contrôle TextBox1 où j'écris la chaine recherchée
    - le contrôle CommandButton1 qui appelle la procédure quand on clique dessus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CommandButton1_Click()
        With Me
            Call rechlist(.ListBox1, .TextBox1.Value)
        End With
    End Sub

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Par défaut
    Merci pour cette réponse qui semble efficace. J'ai tenté de procéder de manière similaire pour des combobox mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Sub rechcombo(Combo As msforms.ComboBox, texte As String)
        For i = 0 To Combo.ListCount - 1 Step 1
            If Combo.Column(0, i) = texte Then
                Combo.Selected(i) = True
                Exit For
            End If
        Next i
    End Sub
    la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Combo.Selected(i) = True
    semble ne pas convenir

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Les contrôles ListBox et Combobox n'ont pas toujours les mêmes méthodes et propriétés

    Je te conseille de bien lire et assimiler ceci avant de te lancer dans des manipulations de contrôles : http://silkyroad.developpez.com/VBA/...serForm/#LII-F

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub RechCombo(Combo As MSForms.ComboBox, texte As String)
        With Combo
            .Value = texte
            If .ListIndex = -1 Then
                .Value = ""
                MsgBox texte & " est inexistant dans " & Combo.Name
            End If
        End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
    Call RechCombo(Me.ComboBox1, Me.TextBox1.Value)
    End Sub

  5. #5
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 338
    Par défaut
    Merci beaucoup pour ces précieux conseils.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/03/2008, 19h04
  2. Ajout de fonctions personnelles
    Par timoth dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/01/2008, 09h28
  3. Réponses: 7
    Dernier message: 18/09/2006, 11h38
  4. [Tableaux] fonction in_array inopérante
    Par nicoaix dans le forum Langage
    Réponses: 7
    Dernier message: 21/04/2006, 18h37

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