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 d'affectation d'un controle a une variable [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
    Mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 7
    Par défaut Problème d'affectation d'un controle a une variable
    Bonjour a tous,

    Je viens de commencer le VBA dans le cadre d'un stage. Je dois faire une interface utilisateur avec plusieurs ComboBox fonctionnant en Cascade. Cependant je voudrais que le point de départ de la Cascade ne soit pas fixe, c'est a dire que je puisses influencer les autres comboBox grace à n'importe laquelle. Pour cela j'ai créer une fonction Alim_Combo pour qu'a chaque changement la même fonction puisse être utilisée.

    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
    Private Sub Alim_Combo(Cbxindex As String, valeur As Variant)
     
    Dim j As Integer, temp As Variant
    Dim obj As Control
    Set obj = Me.Controls("ComboBox" & Cbxindex)
     
     
     
    For j = 4 To Range("B65536").End(xlUp).Row
     
    temp = Range("I" & j)
     
    If temp = valeur And obj.ListIndex = -1 And obj <> "" Then obj.AddItem Range("C" & j)
     
    Next
     
     
     
    End Sub
    Ici ma variable obj est constamment vide, j'ai essayé plusieurs syntaxes mais aussi la collection OLEObject qui pour le coup n'est pas comprise par VBA.
    En espérant que vous pourrez m'éclairer, je vous souhaite une bonne journée.

    Je vous met en dessous l'appel de cette fameuse fonction, peut etre que le problème vient de là mais je ne penses pas car les paramètres d'entrée passe bien.

    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
     
    Private Sub ComboBox_Tranche_Change()
     
     
    If bool = True Then
     
    ComboBox_Type.Clear
    Alim_Combo "_Type", ComboBox_Tranche.Value
     
     
    End If
     If bool = False Then
     
     Exit Sub
     
    End If
     
     
    End Sub

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour et bienvenue au forum !
    Je ne suis pas sûre de ma réponse, mais essayons ...
    Dans quoi as-tu placé la fonction? Dans un module ou dans le UserForm?
    Si tu l'as placé dans un module, il risque d'y avoir un problème. En effet, à quoi correspond Me dans un module? Utilise plutôt la référence au UserForm.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 7
    Par défaut
    Bonjour,

    Merci de votre réponse. J'ai en effet placé ce code dans le UserForm, voulant accéder à chaque ComboBox en fonction des paramètres d'entrée. J'ai également essayé de remplacer Me par le nom de mon UserForm qui n'est autre que UserForm. Rien à faire, ma variable obj ressort toujours vide après le set. Voici mon code complet, peut être ai je oublié des détails importants.

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    Option Explicit
     
    Public bool As Boolean
     
    Private Sub ComboBox_Tranche_Change()
     
     
    If bool = True Then
     
    ComboBox_Type.Clear
    Alim_Combo "_Type", ComboBox_Tranche.Value
     
     
    End If
     If bool = False Then
     
     Exit Sub
     
    End If
     
     
    End Sub
     
     
     
     
    Private Sub UserForm_Initialize()
    Dim j As Integer
     
     
     
     
     
    bool = False
     
     
     
    For j = 4 To Range("B65536").End(xlUp).Row
     
    Me.ComboBox_Tranche = Range("I" & j)
    Me.ComboBox_Type = Range("C" & j)
     
    If ComboBox_Tranche.ListIndex = -1 And ComboBox_Tranche <> "" Then ComboBox_Tranche.AddItem Range("I" & j)
     
    If ComboBox_Type.ListIndex = -1 And ComboBox_Type <> "" Then ComboBox_Type.AddItem Range("C" & j)
     
     
     
    Next
     
     
     
    bool = True
     
     
    End Sub
     
    Private Sub Alim_Combo(Cbxindex As String, valeur As Variant)
     
    Dim j As Integer, temp As Variant
    Dim obj As Control
     
     
    Set obj = Me.Controls("ComboBox" & Cbxindex)
     
     
     
    For j = 4 To Range("B65536").End(xlUp).Row
     
    temp = Range("I" & j)
     
    If temp = valeur And obj.ListIndex = -1 And obj <> "" Then obj.AddItem Range("C" & j)
     
     
    Next
     
     
     
    End Sub
    Le booléen me sert à ne pas rentré dans la fonction ComboBox_Tranche_Change lors de l'initialisation de mon UserForm.

    Rebonjour,

    Je viens d'effectuer un changement dans ma condition, sachant l'objet vide j'ai retiré la condition dans mon if de la fonction Alim_Combo qui empêchait le remplissage de la comboBox si celle ci tombait sur une case vide. L'ordinateur remplit alors correctement la combobox (avec des valeurs cooherentes) cependant la condition obj.ListIndex=-1 n'est pas respectée et il y a autant de valeurs affichées que de cellules la contenant.

    En espérant être assez clair sur ma situation, je vous remercie d'avance pour vos pistes de solutions.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2017
    Messages : 7
    Par défaut
    Problème résolu !

    Il me manquait une ligne de code.

    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
     
     
     
    Private Sub Alim_Combo(Cbxindex As String, valeur As Variant)
     
    Dim j As Integer, temp As Variant
    Dim obj As Control, ws As Worksheet
     
    Set ws = Worksheets("RechercheEC")
     
     
     
    Set obj = Me.Controls("ComboBox" & Cbxindex)
     
     
     
    For j = 4 To Range("B65536").End(xlUp).Row
     
    temp = Range("I" & j)
    obj = Range("c" & j) ' ligne qui sauve la vie
     
     
     
    If temp = valeur And obj.ListIndex = -1 Then obj.AddItem Range("C" & j)
     
     
     
    Next
     
     
     
    End Sub
    Après une bonne journée sur ce problème, le projet continue. Merci à ce forum qui grâce à ces nombreuses discussions, résout la majorité de mes problèmes.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/04/2011, 10h31
  2. Réponses: 1
    Dernier message: 21/05/2007, 13h37
  3. Valeur d'un controle dans une variable
    Par kevaccess dans le forum IHM
    Réponses: 3
    Dernier message: 07/04/2007, 16h15
  4. [PHP-JS] affectation de la valeur d'une variable js à dans variable php
    Par Mat_DZ dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 24/08/2006, 17h21
  5. [SQL] Problème d'affichage de caractère spéciaux dans une variable chaîne
    Par Kryptonaute dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/08/2006, 08h40

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