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 :

Appel fonction création combobox depuis un Private Sub UserForm_Initialize


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 28
    Points
    28
    Par défaut Appel fonction création combobox depuis un Private Sub UserForm_Initialize
    Bonjour,

    Je voudrais faire appel à une fonction pour gérer plusieurs COMBOBOX similaires
    Comme d'habitude ma requête est floue. Donc je vais mettre la procédure qui fonctionne :

    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
    'Private Sub UserForm_Initialize()
    '
    '    Me.ComboExercice.Clear
    '
    '    With Worksheets(2)
    '        For Each C In Range(Cells(DEBLIG + 4, DEBCOL + 5), Cells(DerLig, DEBCOL + 5).End(xlDown))
    '            ComboExercice = C
    '            If ComboExercice.ListIndex = -1 And ComboExercice <> "" Then ComboExercice.AddItem C
    '        Next C
    '    End With
    '    On Error Resume Next
    '
    '    With ComboExercice
    '        For i = 0 To .ListCount - 1
    '            For j = 0 To .ListCount - 1
    '                If .List(i) < .List(j) Then
    '                    Temp = .List(i)
    '                    .List(i) = .List(j)
    '                    .List(j) = Temp
    '                End If
    '            Next j
    '        Next i
    '
    '        .ListIndex = -1
    '
    '    End With
    '
    'End Sub
    la fonction:

    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
    Function AppelForm(NomCombo, Colonne, Ligne)
     
        Me.Controls("Combo" & NomCombo).Clear
     
        With Worksheets(2)
            For Each C In Range(Cells(Ligne, Colonne), Cells(DerLig, Colonne).End(xlDown))
                Me.Controls("Combo" & NomCombo) = C
                If Me.Controls("Combo" & NomCombo).ListIndex = -1 And Me.Controls("Combo" & NomCombo) <> "" Then Me.Controls("Combo" & NomCombo).AddItem C
            Next C
        End With
        On Error Resume Next
     
        With Me.Controls("Combo" & NomCombo)
            For i = 0 To .ListCount - 1
                For j = 0 To .ListCount - 1
                    If .List(i) < .List(j) Then
                        Temp = .List(i)
                        .List(i) = .List(j)
                        .List(j) = Temp
                    End If
                Next j
            Next i
     
            .ListIndex = -1
     
        End With
     
    End Function
    et ce que je voudrais obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
        Call AppelForm(Exercice, 6, 5)
    End Sub
    Exercice est le nom de ma combox box
    6 est la colonne
    5 est la ligne

    lorsque je lance j'obtiens une erreur de compilation.....

  2. #2
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Tu obtiens une erreur de compilation à quelle ligne ?
    Il faut te mettre en mode pas à pas et avancer avec F8, sinon tu l'auras sur la ligne 2 de ta procédure.

    Ensuite je te suggère de bannir On Error Resume Next qui ne fait que masquer les erreurs, et donc les problèmes de conceptions. (C'est un peu comme mettre un sparadrap sur une fracture ouverte, ça fait au mieux que de masquer le bazar)

    Ensuite, lorsque tu appelle un Range, (et ton erreur vient peut être de la), tu dois écrire
    et pas Dans le premier cas, tu récupère le range et la cellule liée à ton "With Worksheets", dans le second cas, tu récupère le range de la feuille active.
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Bonjour Nico Chg

    J'obtiens une erreur de type :

    Erreur de compilation
    Utilisation du mot clé Me

    Quand je rentre dans la fonction AppelForm.

  4. #4
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Bonjour,

    Ce qui me laisse croire que ta fonction n'est pas dans un Userform, mais dans un module standard.
    Essaie de déplacer ta fonction dans ton userform.
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Justement c'est ce que je veux éviter , cela me sert à rien si je dois mettre le code dans le userform.
    Je veux pouvoir créer X userform en insérant juste dans le UserForm intialize l'appel à la fonction.

    Franck 87

  6. #6
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Et bien dans ce cas, n'utilise pas le Me

    Me. fait référence à l'objet dans lequel tu écris le code. Un module standard n'est pas un objet, donc Me ne référence rien du tout, d'ou ton erreur.

    Je te suggère de modifier ta fonction pour inclure un argument supplémentaire, un Userform, qui va remplacer ton 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Function AppelForm(NomCombo, Colonne, Ligne, UF as Userform)
     
        UF.Controls("Combo" & NomCombo).Clear
     
        With Worksheets(2)
            For Each C In Range(Cells(Ligne, Colonne), Cells(DerLig, Colonne).End(xlDown))
                UF.Controls("Combo" & NomCombo) = C
                If UF.Controls("Combo" & NomCombo).ListIndex = -1 And UF.Controls("Combo" & NomCombo) <> "" Then UF.Controls("Combo" & NomCombo).AddItem C
            Next C
        End With
     
    'On Error Resume Next
    'Cette ligne ne sert au mieux qu'a masquer les erreurs, un peu comme une autruche qui cache sa tête dans le sable
     
        With UF.Controls("Combo" & NomCombo)
            For i = 0 To .ListCount - 1
                For j = 0 To .ListCount - 1
                    If .List(i) < .List(j) Then
                        Temp = .List(i)
                        .List(i) = .List(j)
                        .List(j) = Temp
                    End If
                Next j
            Next i
     
            .ListIndex = -1
     
        End With
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
        Call AppelForm(Exercice, 6, 5, Me)
    End Sub
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    ça fonctionne.....
    Et là je dis RESPECT et MERCI à toi..Nico Chg
    je ne connaissais pas le préfixe UF. à la place de Me

  8. #8
    Membre éclairé Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Points : 758
    Points
    758
    Par défaut
    Méfie toi, ce n'est pas un préfixe, mais un argument que j'ai déclaré dans la fonction, ça aurait pu être n'importe quoi !
    Citation Envoyé par Oscar Wilde
    Je déteste les discussions: elles vous font parfois changer d'avis.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    D'accord pour l'argument.
    Ce qui est dommageable c'est que je perds en rapidité de traitement.

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

Discussions similaires

  1. Appel fonction pl/sql depuis perl
    Par pietrus46 dans le forum SGBD
    Réponses: 0
    Dernier message: 07/01/2011, 18h39
  2. Réponses: 4
    Dernier message: 27/11/2009, 17h08
  3. [DOM] Appel fonction avec paramètre depuis document.write
    Par kev42100 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/05/2008, 14h12
  4. [XSLT] [JAVA] Appeler fonction java depuis XSL
    Par greg_one dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 30/05/2007, 22h11
  5. Réponses: 1
    Dernier message: 25/05/2007, 14h33

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