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

  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 : 63
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    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
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  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
    Points : 2 416
    Points
    2 416
    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 : 63
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    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
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  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
    Points : 2 416
    Points
    2 416
    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 : 63
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    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
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  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 : 63
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Faut-il que je créé une autre module de classe pour les Combo ?
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  7. #7
    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
    Points : 2 416
    Points
    2 416
    Par défaut
    Essaye ce code, j'ai pas tester vu que je n'ai pas ton classeur mais ça devrais aller.
    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
    Sub RemplirFiche()
    Dim Cont 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
    'Csex.tag = 28
    'Cserv.tag =26
    'Csit.tag = 31
    'Cpos.tag = 32
    'Csitfam.tag = 30
        'c'est la routine "Lire"
        For Each Cont In Me.Controls
            If Val(Cont.Tag) > 0 Then
                If Val(Cont.Tag) < 20 Then
                    N = Val(Cont.Tag)
                    Cont.Object.Text = Cells(ligne, N)
                ElseIf Val(Cont.Tag) > 20 Then
                    N = Val(Cont.Tag) - 20
                    For P = 0 To Cont.ListCount
                        If Cont.List(P) = Cells(ligne, N) Then
                            Cont.ListIndex = P
                            Exit For
                        End If
                    Next P
                End If
            End If
        Next Cont
     
        Me.Caption = "Fiche de" & " " & Txtnom.Text & " " & Tprenom.Text
        Application.ScreenUpdating = True
        Application.EnableEvents = True
    End Sub
    si ça coince sur If Cont.List(P) essaye en ajoutant If Cont.Object.List(P)
    Tu dis..

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

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Le message d'erreur suivant apparaît : "Incompatibilité de Type - Erreur 13"
    sur le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Target.Count > 1 Then Exit Sub 'quand sélectionne un bloc, sinon oups!
        Fin = Range("A65536").End(xlUp).Row
        
        If Target.Column < 21 Then
            If Target.Row <= Fin + 1 And Target.Row > 3 Then
            Ligne = Target.Row
           FrmModAdhe.Show 1
            End If
        End If
    End Sub
    Vois-tu pourquoi ?

    J'ai trouvé mon erreur. Par contre les Combo sont toujours vides. Je regarde de plus près
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  9. #9
    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
    Points : 2 416
    Points
    2 416
    Par défaut
    La macros que tu à montré est la fonction "Lire"
    dons j'ai fait en sorte que les texte soit rempli et LES COMBO INITIALISER AVEC LES DONNEES DE LA LIGNE et pas pour remplir les combo, ça tu peu le faire dans l'initialize de l'UF en employant la même approche pour remplir tes combo, ça ça ne change pas.
    Où sont les données de tes combos ? les listes.
    Et il ne faut pas de classe pour les combo ni les mettre dans les objet.
    Comment tu remplissais les combo avant ?
    Poste ton code qui est dans l'initialize.
    Edit: si tu veux vraiment tout optimiser, tu a de la lecture ici

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

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    J'ai mis la source des données dans RowSource des propriétés.
    Sinon les données se trouvent dans la feuille "Données"
    Csex S1:S2
    Cserv M3:M57
    Csitfam U1:U6
    Csit T1:T4
    Cpos R1:R4

    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
     
    Private Sub UserForm_Initialize()
     
        Action = True
     
        If Ligne > Fin Then
            Me.Caption = "Nouvelle fiche"
                If Ligne = 5 Then
                LstNum.Caption = Sheets("Données").Range("U12")
                Else
                LstNum.Caption = Sheets("Adhé").Cells(Ligne - 1, 2) + 1
                End If
            Else
            RemplirFiche
     
        End If
        Modif = False
        InitText
        Action = False
    End Sub
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  11. #11
    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
    Points : 2 416
    Points
    2 416
    Par défaut
    J'ai trouvé mon erreur. Par contre les Combo sont toujours vides. Je regarde de plus près
    ça je ne comprend pas puisque tu dis...
    J'ai mis la source des données dans RowSource des propriétés.
    Alors y savent pas êtres vide ??
    Tu a bien mis les données dans les Tag des combo comme indiquer ?
    Tu a lu mon édit dans poste précédant ?
    Et où c'est que tu initialise tes TextBox dans la classe ?

    EDIT:
    Je pense à une chose, si c'est pas ta feuille "Données" qui est active et que tu met simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Csex.RowSource= S1:S2
    'Ca va pas, y faut mettre
    Csex.RowSource= Données!S1:S2
    EDIT 2 :
    Quand tu LIS dans une feuille, ces lignes ne sont absolument pas nécessaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Application.ScreenUpdating = False
        Application.EnableEvents = False
    Sauf si tu a du code dans Selection_Change où enabledEvents peu être nécessaire

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

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour LeForestier,

    Mes Combo sont ok, dans mon précédent post, j'avais oublié de remettre les données dans RowSource.
    Par contre, lorsque je clique sur une ligne vide un message d'erreur apparaît
    "Impossible de lir la propriété List. Index de table de propriété non valide" et je ne sais pas ce que cela veut dire. La ligne en couleur est en surbrillance dans le débogage.
    Peux-tu m'éclairer s'il te plait ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        If Target.Count > 1 Then Exit Sub 'quand sélectionne un bloc, sinon oups!
        Fin = Range("A65536").End(xlUp).Row
        
        If Target.Column < 21 Then
            If Target.Row <= Fin + 1 And Target.Row > 3 Then
            Ligne = Target.Row
           FrmModAdhe.Show 1
            End If
        End If
    End Sub
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  13. #13
    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
    Points : 2 416
    Points
    2 416
    Par défaut
    Oui, quand tu a une erreur dans l'initialize d'un UF le débogueur revient toujours sur la ligne d'appel.
    Pour trouver l'erreur, mettre un point d'arret sur la ligne que tu montre et avancer pas à pas, (F8) mais regarde bien jusqu'où tu va car sur l'erreur Op, c'est repartit.
    A+

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

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Tant que la ligne contient des données ça fonctionne, mais dès qu'elle est complètement vide ça bug.
    J'ai certainement oublié quelque chose dans ma programmation, je vais regarder au niveau des Combo.
    Si tu as une idée n'hésites pas.
    Je te tiens informé
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  15. #15
    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
    Points : 2 416
    Points
    2 416
    Par défaut
    Quand tu fait le positionnement des combo, faut mettre..
    Listcount compte de 1 à 4 (par exemple) et Listindex de 0 à 3
    J'y ai pas pensé quand je t'ai mis l'exemple.

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

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    J'ai tout essayé et j'ai toujours le même message d'erreur.
    Je n'y comprends rien. Le formulaire ne veut pas s'afficher lorsque la ligne est vide, le même message d'erreur apparaît. ça m'énerve sérieusement.

    Voilà mes codes peut-être y verras-tu mon erreur, moi je nage complètement.

    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
     
    Private Sub UserForm_Initialize()
        RempliCombo
        Action = True
     
        If Ligne > Fin Then
            Me.Caption = "Nouvelle fiche"
    If Ligne = 5 Then
                LstNum.Caption = Sheets("Données").Range("U12")
                Else
                LstNum.Caption = Sheets("Adhé").Cells(Ligne - 1, 2) + 1
                End If
            Else
            RemplirFiche
            PlaceCombo
        End If
        Modif = False
        InitText
        Action = False
    End Sub
    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
    80
    81
     
    Sub RempliCombo()
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    Dim e As Integer
        a = 1
        b = 1
        c = 3
        d = 1
        e = 1
            With Sheets("Données")
                While .Cells(a, 19) <> ""
                    Csex.AddItem .Cells(a, 19)
                    a = a + 1
                Wend
                While .Cells(b, 21) <> ""
                    Csitfam.AddItem .Cells(b, 21)
                    b = b + 1
                Wend
                While .Cells(c, 13) <> ""
                    Cserv.AddItem .Cells(c, 13)
                    c = c + 1
                Wend
                While .Cells(d, 20) <> ""
                    Csit.AddItem .Cells(d, 20)
                    d = d + 1
                Wend
                While .Cells(e, 18) <> ""
                    Cpos.AddItem .Cells(e, 18)
                    e = e + 1
                Wend
            End With
     
     
    End Sub
    Sub PlaceCombo()
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    Dim e As Integer
        a = 1
        b = 1
        c = 3
        d = 1
        e = 1
            With Sheets("Adhé")
                For a = 0 To Csex.ListCount
                    If Csex.List(a) = .Cells(Ligne, 8) Then
                        Csex.ListIndex = a
                        Exit For
                    End If
                    Next a
                For b = 0 To Csitfam.ListCount
                    If Csitfam.List(b) = .Cells(Ligne, 10) Then
                        Csitfam.ListIndex = b
                        Exit For
                    End If
                    Next b
                For c = 0 To Cserv.ListCount
                    If Cserv.List(c) = .Cells(Ligne, 6) Then
                        Cserv.ListIndex = c
                        Exit For
                    End If
                    Next c
                For d = 0 To Csit.ListCount
                    If Csit.List(d) = .Cells(Ligne, 11) Then
                        Csit.ListIndex = d
                        Exit For
                    End If
                    Next d
                For e = 0 To Cpos.ListCount
                    If Cpos.List(e) = .Cells(Ligne, 12) Then
                        Cpos.ListIndex = e
                        Exit For
                    End If
                    Next e
                End With
    End Sub
    PS : j'ai un autre problème lors de la mise à jour. Dans les TextBox où il y a des dates, lors de la validation des modifications, le format qui est "dd/mm/yyy" devient "mm/dd/yyyy" dans la feuille de calcul.
    Je ne connais pas la solution, mes formats sont identiques dans l'UF et dans la feuille.

    après avoir tout épluché, je n'ai rien trouvé. J'ai repris toutes mes lignes de code, fais des essais, ça bug toujours.
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  17. #17
    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
    Points : 2 416
    Points
    2 416
    Par défaut
    Eh.. Oh... A oui mais non...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For a = 0 To Csex.ListCount
    A quoi ça sert que je me décarcace si tu ne suis pas mes remarques
    Où est le -1
    Et pourquoi encore cette sub alors que je t'ai passer un code qui fait tout en même temps.

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

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    J'ai repris tout le post et effectivement j'ai fait ce que tu m'as dit. Mais ça bug quand même avec le même message.
    Je reprends tout encore une fois.
    Voici l'Initialize de l'UF
    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
     
    Private Sub UserForm_Initialize()
        RempliCombo
        Action = True
     
        If Ligne > Fin Then
            Me.Caption = "Nouvelle fiche"
            Csex.ListCount -1
            Csitfam.ListCount -1
            Cserv.ListCount -1
            Csit.ListCount -1
            Cpos.ListCount -1
    If Ligne = 5 Then
                LstNum.Caption = Sheets("Données").Range("U12")
                Else
                LstNum.Caption = Sheets("Adhé").Cells(Ligne - 1, 2) + 1
                End If
            Else
            RemplirFiche
        End If
        Modif = False
        InitText
        Action = False
    End Sub
    J'ai essayé Csex.ListIndex = 0, avec toujours le même résultat.

    ListCount n'est pas uniquement une propriété des ListBox ? Simple question
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  19. #19
    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
    Points : 2 416
    Points
    2 416
    Par défaut
    T'est sur que t'est bien réveillé..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            With Sheets("Adhé")
                For a = 0 To Csex.ListCount  - 1                
                         If Csex.List(a) = .Cells(Ligne, 8) Then
                        Csex.ListIndex = a
                        Exit For
                    End If
                    Next a
                For b = 0 To Csitfam.ListCount  - 1                
                        If Csitfam.List(b) = .Cells(Ligne, 10) Then
                        Csitfam.ListIndex = b
                        Exit For
                    End If
                    Next b
    ......
    et pour quand la ligne est vide.. tu devrais modifier,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
           With Sheets("Adhé")
              if .Cells(Ligne, 8) <> "" then
                For a = 0 To Csex.ListCount  - 1                
                         If Csex.List(a) = .Cells(Ligne, 8) Then
                        Csex.ListIndex = a
                        Exit For
                    End If
                    Next a
               else
                   Csex.ListIndex = 0
              end if
    Tu fais la même chose pour les autre combo
    Sans ça, quand la ligne est vide les combos seront pas mis à jour.
    Remet un peu le code de RempliText

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

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

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Désolé, j'avais mal compris ton propos.

    J'ai donc suivi tes instructions mais j'ai toujours le même message. "Impossible de lire la propriété List - Index de table de propriété non valide"

    Voici 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
     
    Private Sub UserForm_Initialize()
        RempliCombo
        Action = True
     
        If Ligne > Fin Then
            Me.Caption = "Nouvelle fiche"
     
    If Ligne = 5 Then
                LstNum.Caption = Sheets("Données").Range("U12")
                Else
                LstNum.Caption = Sheets("Adhé").Cells(Ligne - 1, 2) + 1
                End If
            Else
            RemplirFiche
            PlaceCombo
        End If
        Modif = False
        InitText
        Action = False
    End Sub
    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
     
    Sub PlaceCombo()
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim d As Integer
    Dim e As Integer
        a = 1
        b = 1
        c = 3
        d = 1
        e = 1
            With Sheets("Adhé")
              If .Cells(Ligne, 8) <> "" Then
                For a = 0 To Csex.ListCount - 1
                         If Csex.List(a) = .Cells(Ligne, 8) Then
                        Csex.ListIndex = a
                        Exit For
                    End If
                    Next a
               Else
                   Csex.ListIndex = 0
              End If
            If .Cells(Ligne, 10) <> "" Then
                For b = 0 To Csitfam.ListCount - 1
                    If Csitfam.List(b) = .Cells(Ligne, 10) Then
                        Csitfam.ListIndex = b
                        Exit For
                    End If
                    Next b
               Else
                   Csitfam.ListIndex = 0
              End If
            If .Cells(Ligne, 6) <> "" Then
                For c = 0 To Cserv.ListCount - 1
                    If Cserv.List(c) = .Cells(Ligne, 6) Then
                        Cserv.ListIndex = c
                        Exit For
                    End If
                    Next c
               Else
                   Cserv.ListIndex = 0
              End If
             If .Cells(Ligne, 11) <> "" Then
                For d = 0 To Csit.ListCount - 1
                    If Csit.List(d) = .Cells(Ligne, 11) Then
                        Csit.ListIndex = d
                        Exit For
                    End If
                    Next d
               Else
                   Csit.ListIndex = 0
              End If
             If .Cells(Ligne, 12) <> "" Then
                For e = 0 To Cpos.ListCount - 1
                    If Cpos.List(e) = .Cells(Ligne, 12) Then
                        Cpos.ListIndex = e
                        Exit For
                    End If
                    Next e
               Else
                   Cpos.ListIndex = 0
              End If
            End With
    End Sub
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

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