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 :

Remplir des Combo selon choix de ligne [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Remplir des Combo selon choix de ligne
    Bonjour à tous,

    J'ai donc un formulaire en Excel qui s'ouvre lorsque l'utilisateur clique sur le nom d'un adhérent sur trouvant dans un tableau de la feuille "Adhé".
    J'ai donc mis en place les codes suivants. Les TextBox se remplissent bien mais je n'arrive pas à faire de même pour les Combo. Dans les Combo doivent figurer les données se trouvant dans :
    - pour la combo Csex la colonne H
    - pour la combo Csitfam la colonne J
    - pour la combo Cserv la colonne F
    - pour la combo Csit la colonne L
    - pour la comob Cpos la colonne K

    Les TextBox sont regroupés en Tag comme vous pourrez le constater. Pour les Combo j'ai inscrit la source dans SouceRow des propriétés, j'ai fait cela pour que l'utilisateur puisse modifier la fiche si les données ne sont pas bonnes.

    Voici donc les codes :

    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
     
    'place les textbox dans la collection TextBoxGroup
    'pour être détectés dans Classe1
    Sub InitText()
    Dim Cont As Control
    Dim CL As Classe1
            Set CL = Nothing
            Set Collect = New Collection
        'boucle sur les contrôles de l'UF
            For Each Cont In FrmModAdhe.Controls
        'Tester si le .Tag du contrôle est initialisé
            If Val(Cont.Tag) > 0 Then
                Set CL = New Classe1
                Set CL.TextBoxGroup = Cont
                    Collect.Add CL
            End If
        Next Cont
    End Sub
     
    Sub RemplirFiche()
    Dim Cont As Control
    Dim N As Integer
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Sheets("Adhé").Select
        LstNum.Caption = Cells(Ligne, 2).Value
     
        'c'est la routine "Lire"
        For Each Cont In Me.Controls
            If Val(Cont.Tag) > 0 Then
                N = Val(Cont.Tag)
                Cont.Object.Text = Cells(Ligne, N)
            End If
        Next Cont
     
        Me.Caption = "Fiche de" & " " & Txtnom.Text & " " & Tprenom.Text
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End Sub

    Merci par avance pour votre aide

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Je ne comprend pas ce que tu veux dire pour tes combos ?
    si tu met les données dans RowSouyrce elles y sont définitivement ?
    Tu dis ?
    A+

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Effectivement, pour le choix. Mais lorsque l'utilsateur clique sur un nom, ce qui est inscrit dans la ligne s'affiche par défaut dans la Combo.

    J'ai fait ceci, ça marche pour la Combo Csex mais pas pour les autres

    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
     
    Sub PlaceCombo()
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim l As Integer
    Dim m As Integer
     
    Sheets("Adhé").Select
     
        With ActiveSheet
        'rempli la Combo Csex selon les données de la ligne
            For i = 0 To Csex.ListCount
            If Csex.List(i) = Cells(Ligne, 8) Then
                Csex.ListIndex = i
                Exit Sub
            End If
        Next i
        'rempli la Combo Csitfam selon les données de la ligne
            For j = 0 To Csitfam.ListCount
            If Csitfam.List(j) = Cells(Ligne, 10) Then
                Csitfam.ListIndex = j
                Exit Sub
            End If
        Next j
        'rempli la Combo Cserv selon les données de la ligne
            For k = 0 To Cserv.ListCount
            If Cserv.List(k) = Cells(Ligne, 6) Then
                Cserv.ListIndex = k
                Exit Sub
            End If
        Next k
        'rempli la Combo Csit selon les données de la ligne
            For l = 0 To Csit.ListCount
            If Csit.List(l) = Cells(Ligne, 11) Then
                Csit.ListIndex = l
                Exit Sub
            End If
        Next l
        'rempli la Combo Cpos selon les données de la ligne
            For m = 0 To Cpos.ListCount
            If Cpos.List(m) = Cells(Ligne, 12) Then
                Cpos.ListIndex = m
                Exit Sub
            End If
        Next m
    End With
    End Sub

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Beh évidemment, tu met un ExitSub dans le premier test, donc les autre ne sont jamais activer.
    Remplacer par Exit For.
    NB : Tu peu faire la même chose avec tes combo que tu fais avec les TextBox, suffit de tester les Tag, par exemple si tu a 10 TextBox >0 et <11 c'est un TextBox et mettre par exemple le tag des combos avec 21, 22 etc.. et tester le Tag <>0 >20 pour que Tag-20 corresponde à la colonne.
    A+
    Edit:
    j'ai eu difficile à comprendre..
    'rempli la Combo Csitfam selon les données de la ligne
    Ce devrait plutôt être "Sélectionne la ligne du Combo en fonction de la donnée de la ligne"
    Je pense que j'aurais pigé plus vite.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    NB : Tu peux faire la même chose avec tes combo que tu fais avec les TextBox, suffit de tester les Tag, par exemple si tu a 10 TextBox >0 et <11 c'est un TextBox et mettre par exemple le tag des combos avec 21, 22 etc.. et tester le Tag <>0 >20 pour que Tag-20 corresponde à la colonne.
    Non car je réfléchi à la solution que tu m'as proposé. Cependant je rencontre un sérieux problème.
    Les textBox correspondent aux colonnes (3 4 5 7 9 13 14 15 16 17 18 ) et les Combo les colonnes (6 8 10 11 12).
    Alors je bloque un peu, même beaucoup. De plus je ne peux pas changer l'ordre car cela m'obligerai à beaucoup trop de modif dans mon appli.

    Alors j'ai fait ça mais rien ne se rempli :

    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
     
    Sub InitText()
    Dim Cont As Control
    Dim Conta As Control
    Dim CL As Classe1
    Dim CM As Classe1
            Set CL = Nothing
            Set Collect = New Collection
        'boucle sur les contrôles de l'UF
            For Each Cont In FrmModAdhe.Controls
        'Tester si le .Tag du contrôle est initialisé
            If Val(Cont.Tag) = 3 And Val(Cont.Tag) = 4 And Val(Cont.Tag) = 5 And Val(Cont.Tag) = 9 And Val(Cont.Tag) = 16 And Val(Cont.Tag) = 15 And Val(Cont.Tag) = 17 And Val(Cont.Tag) = 18 And Val(Cont.Tag) = 7 And Val(Cont.Tag) = 13 And Val(Cont.Tag) = 14 Then
                Set CL = New Classe1
                Set CL.TextBoxGroup = Cont
                    Collect.Add CL
            End If
        Next Cont
                Set CM = Nothing
            Set Collecta = New Collection
        'boucle sur les contrôles de l'UF
            For Each Conta In FrmModAdhe.Controls
        'Tester si le .Tag du contrôle est initialisé
            If Val(Conta.Tag) = 6 And Val(Conta.Tag) = 8 And Val(Conta.Tag) = 10 And Val(Conta.Tag) = 11 And Val(Conta.Tag) = 12 Then
                Set CM = New Classe1
                Set CM.ComboBoxGroup = Conta
                    Collecta.Add CM
            End If
        Next Conta
     
    End Sub
     
    Sub RemplirFiche()
    Dim Cont As Control
    Dim Conta As Control
    Dim N As Integer
    Dim P As Integer
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        Sheets("Adhé").Select
        LstNum.Caption = Cells(Ligne, 2).Value
     
        'c'est la routine "Lire"
        For Each Cont In Me.Controls
            If Val(Cont.Tag) = 3 And Val(Cont.Tag) = 4 And Val(Cont.Tag) = 5 And Val(Cont.Tag) = 9 And Val(Cont.Tag) = 16 And Val(Cont.Tag) = 15 And Val(Cont.Tag) = 17 And Val(Cont.Tag) = 18 And Val(Cont.Tag) = 7 And Val(Cont.Tag) = 13 And Val(Cont.Tag) = 14 Then
                N = Val(Cont.Tag)
                Cont.Object.Text = Cells(Ligne, N)
            End If
        Next Cont
            For Each Conta In Me.Controls
            If Val(Conta.Tag) = 6 And Val(Conta.Tag) = 8 And Val(Conta.Tag) = 10 And Val(Conta.Tag) = 11 And Val(Conta.Tag) = 12 Then
                P = Val(Conta.Tag)
                Conta.Object.Text = Cells(Ligne, P)
            End If
        Next Conta
     
        Me.Caption = "Fiche de" & " " & Txtnom.Text & " " & Tprenom.Text
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End Sub
    J'ai, bien entendu, fait toutes les modifs dans Classe1 et autres déclarations

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Faut-il que je créé une autre module de classe pour les Combo ?

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

Discussions similaires

  1. remplir des combo box par une fonction ?
    Par angelevil dans le forum VB.NET
    Réponses: 5
    Dernier message: 06/10/2010, 23h12
  2. [XL-2003] Remplir une feuille selon choix ComboBox
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 30/12/2009, 08h41
  3. [AJAX] renseigner des input selon choix dans une liste deroulante
    Par abconcept dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/02/2009, 15h06
  4. Remplir une liste selon le choix d'une autre
    Par sara21 dans le forum Langage
    Réponses: 3
    Dernier message: 23/05/2007, 01h40
  5. Réponses: 4
    Dernier message: 08/02/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