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 :

UserForm et interactions entre deux Combobox avec auto remplissage [XL-365]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    thérapeute
    Inscrit en
    Mai 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : thérapeute

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par défaut UserForm et interactions entre deux Combobox avec auto remplissage
    Bonjour, je rencontre des difficultés dans le codage qui voit interagir deux Combobox. Pour le moment j'ai quelquechose de focntionnel mais qui ne respecte pas les critères de intreaction que j'aimerais atteindre. J'explique un peu:

    J'ai une base de données sous forme de tableau excel dans la feuille nommée CLIENTS. dans l'ordre les colonnes sont ID CLIENT, Civilité, Nom, Prénom, Date de naissance, Adresse - Rue, Adresse - Code postal , Adresse - Ville, Adresse - Région, Adresse - Pays, Téléphone 1, E-mail 1, Notes .

    Dans un UserForm de nommé UserForm_Factures sont présents deux combobox avec liste déroulante que je veux faire interagir: ComboBox_NomClientFacture et ComboBox_IDClientFacture.
    ComboBox_NomClientFacture liste les valeurs de la colonne Nom de la feuille CLIENTS qui présente les noms de famille des patients, la particularité est que plusieurs patients peuvent présenter le même nom de famille.
    ComboBox_IDClientFacture liste les valeurs de la colonne ID CLIENT de la feuille CLIENTS qui présente les numéro d'identification de patients et chaque valeur est unique.

    J'aimerais traduire en code ce qui suit:

    1. Quand je sélectionne un Nom de famille dans le ComboBox_NomClientFacture il est possible qu'il y ait plusieurs ID CLIENT correspondants, il faut filtrer le contenu de la liste déroulante ComboBox_IDClientFacture pour plusieurs cas de figure:
    a. aucune correspondance : message d'alerte "pas de correspondances" ;
    b. une seule correspondance : auto remplissage de ComboBox_IDClientFacture avec la valeur correspondante;
    c. deux ou plus correspondances: filtrage/triage de la liste déroulante ComboBox_IDClientFacture qui présentera les correspondances de ID trouvées en fonction du Nom de famille.
    2. Quand je sélectionne un ID CLIENT depuis la liste ComboBox_IDClientFacture, il y a auto remplissage de la ComboBox_NomClientFacture avec la valeur nom de famille correspondante au ID CLIENT
    3. après les points 1. et/ou 2. auto remplir les Label de controle LabelChange_DataClientNom, LabelChange_DataClientAdresse, LabelChange_DataClientTelMail, LabelChange_DataClientNotes en changeant leur valeur .caption en fonction des valeurs correspondants dans le tableau dela feuille CLIENTS
    4. réinitialisation du formulaire remet par défaut les listes des combobox et les autres textbox du

    Comment je peux changer mon code pour répondre à ces conditions?

    J'ai déjà essayé de trouver des solutions en me faisant aider par Chat GPT, j'arrive à diverses résultats qui sont moins satisfaisants que le code que j'ai écrit et posté ci-dessous mais qui n'est que partiellement fonctionnel car il n'y a pas les interactions que j'ai décrites ci-dessus et en annexe l'export du UserForm:
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    'FORMULAIRE GESTION FACTURES
     
    Private Sub CommandButton_Reset_Click()
     
        Unload Me
        UserForm_Factures.Show
     
        'Pour réinitialisation personnalisée de l'UserForm_Factures
        'TextBox_IDFacture.Text = ""
        'TextBox_DateFacture.Text = ""
        'ComboBox_IDClientFacture.ListIndex = -1
        'ComboBox_NomClientFacture.ListIndex = -1
        'LabelChange_DataClientNom.Caption = "Nom, Prénom, Naissance"
        'LabelChange_DataClientAdresse.Caption = "Adresse"
        'LabelChange_DataClientTelMail.Caption = "Téléphone, e-mail"
        'LabelChange_DataClientNotes.Caption = "Notes"
        'ComboBox_P1.ListIndex = -1
        'TextBox_DateP1.Text = ""
        'TextBox_QteP1.Text = ""
        'ComboBox_P2.ListIndex = -1
        'TextBox_DateP2.Text = ""
        'TextBox_QteP2.Text = ""
        'TextBox_Remise.Text = ""
        'LabelChange_TotalP1.Caption = "Total P1 (chf)"
        'LabelChange_TotalP2.Caption = "Total P2 (chf)"
        'LabelChange_TotalRemise.Caption = "Total remise (chf)"
        'LabelChange_FTotal.Caption = "Total (chf)"
        'TextBox_DateReglementFacture.Text = ""
        'TextBox_NotesFacture.Text = ""
     
    End Sub
     
    'Bouton Fermer
    Private Sub CommandButton_FermerGestionFactures_Click()
     
        Unload Me
        Sheets("Print").Activate
     
    End Sub
     
    'Ouverture de l'UserForm
    Private Sub UserForm_Initialize()
     
        Dim i As Integer
     
        'Boucle pour ajouter les NomClient dans la liste déroulante
        For i = 2 To 10000
            ComboBox_NomClientFacture.AddItem Sheets("CLIENTS").Cells(i, 3)
        Next
     
        'Boucle pour ajouter les IDClient dans la liste déroulante
        For i = 2 To 10000
            ComboBox_IDClientFacture.AddItem Sheets("CLIENTS").Cells(i, 1)
        Next
     
    End Sub
     
    'remplissage automatique selon NomClient
    Private Sub ComboBox_NomClientFacture_Change()
        Dim i As Integer
        Dim Nomclient As String
        Nomclient = Me.ComboBox_NomClientFacture.Value
     
        ' Trouve dans la feuille "CLIENTS"  la ligne qui concorde avec NomClient et restitue les data
        For i = 2 To 10000
        If Sheets("CLIENTS").Cells(i, 3).Value = Nomclient Then
                ' Populate the other fields with the corresponding values from the "CLIENTS" sheet
                Me.ComboBox_IDClientFacture.Value = Sheets("CLIENTS").Cells(i, 1).Value
                Me.LabelChange_DataClientNom.Caption = Sheets("CLIENTS").Cells(i, 3).Value & " " & Sheets("CLIENTS").Cells(i, 4).Value & " - " & Sheets("CLIENTS").Cells(i, 5).Value
                Me.LabelChange_DataClientAdresse.Caption = Sheets("CLIENTS").Cells(i, 6).Value & " - " & Sheets("CLIENTS").Cells(i, 7).Value & " " & Sheets("CLIENTS").Cells(i, 8).Value
                Me.LabelChange_DataClientTelMail.Caption = "+" & Sheets("CLIENTS").Cells(i, 11).Value & " - " & Sheets("CLIENTS").Cells(i, 12).Value
                Me.LabelChange_DataClientNotes.Caption = Sheets("CLIENTS").Cells(i, 13).Value
                Exit For
            End If
        Next
    End Sub
     
    'remplissage automatique selon IDClient
    Private Sub ComboBox_IDClientFacture_Change()
        Dim i As Integer
        Dim idclient As String
        idclient = Me.ComboBox_IDClientFacture.Value
     
        ' Trouve dans la feuille "CLIENTS"  la ligne qui concorde avec IDClient et restitue les data
        For i = 2 To 10000
        If Sheets("CLIENTS").Cells(i, 1).Value = idclient Then
                ' Populate the other fields with the corresponding values from the "CLIENTS" sheet
                Me.ComboBox_NomClientFacture.Value = Sheets("CLIENTS").Cells(i, 3).Value
                Me.LabelChange_DataClientNom.Caption = Sheets("CLIENTS").Cells(i, 3).Value & " " & Sheets("CLIENTS").Cells(i, 4).Value & " - " & Sheets("CLIENTS").Cells(i, 5).Value
                Me.LabelChange_DataClientAdresse.Caption = Sheets("CLIENTS").Cells(i, 6).Value & " - " & Sheets("CLIENTS").Cells(i, 7).Value & " " & Sheets("CLIENTS").Cells(i, 8).Value
                Me.LabelChange_DataClientTelMail.Caption = "+" & Sheets("CLIENTS").Cells(i, 11).Value & " - " & Sheets("CLIENTS").Cells(i, 12).Value
                Me.LabelChange_DataClientNotes.Caption = Sheets("CLIENTS").Cells(i, 13).Value
                Exit For
            End If
        Next
    End Sub

  2. #2
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 484
    Par défaut
    Salut
    Il n'y-a pas de tableau dans le Zip
    en admettant que tu ai Un tableau comme cela feuille "shClients" tableau "vt_Clients"
    ID Civilité Nom Prénom Adresse
    1 M. Térieur Alex 5 Rue du grand air
    2 M. Térieur Alain 3 Impasse du cagibi

    Alors tu peux charger la liste déroulante comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With Combobox1
        .ColumnCount = 4
        .ColumnWidth = 0pt
        .List = shClients.Range("vtClient[[ID][Prénom]").Value ' // La liste sera chargée avec quatre colonnes "ID", "Civilité", "Nom", "Prénom"
    End With
    Pour la deuxième liste déroulante, si tu as Office 2021 ou 365 tu peux utiliser Filter. N'ayant pas les tableaux c'est au pif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox2.List = Evaluate("FILTER(vt_ClientFacture[[ID]:[Nom]],vt_Clients[Nom]=""" & ComboBox1.Value & """)")

  3. #3
    Membre du Club
    Homme Profil pro
    thérapeute
    Inscrit en
    Mai 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : thérapeute

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par défaut
    merci Valtrase,
    entre temps j'ai trouvé une autre solution qui fait l'affaire en passant par la fonction InStr(). Malheureusement je perds la possibilité de sélectionner d'abord le id client et faire restituer les données correspondantes. mais ceci n'est pas essentiel dans la pratique, vu que je connais toujours le nom client au quel fait référence un id client ou un id facture. Ci-dessous voici comment j'ai adapté mon code.

    (!!!!! cependant je suis intéressé à comprendre comment fonctionne ta solution je reprends cela dans une prochaine réponse)

    feuille "CLIENTS"
    tableau "vt_Clients"
    formulaire UserForm_factures

    IDCLIENT Civilité Nom Prénom Date de naissance Adresse - Rue Adresse - Code postal Adresse - Ville Adresse - Région Adresse - Pays Téléphone 1 E-mail 1 Notes
    1 M. Favre Bernard 12.05.1975 Rue Marchand 3 30000 Cetteville test reg1 FR +33 123456789 bernard@email.fr test n1
    2 Mme. Favre Julie 27.01.2001 av. Beauregard 4 20000 Saville test reg2 FR +33 987654321 julie@email.fr test n2

    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    'FORMULAIRE GESTION FACTURES
     
    Private Sub CommandButton_Reset_Click()
     
        Unload Me
        UserForm_Factures.Show
     
    End Sub
     
    'Bouton Fermer
    Private Sub CommandButton_FermerGestionFactures_Click()
     
        Unload Me
        Sheets("Print").Activate
     
    End Sub
     
    'Ouverture de l'UserForm
    Private Sub UserForm_Initialize()
     
    'installe la liste des noms
     
        Dim Ws_data As Worksheet
        Dim lstrw As Long
        Dim liste_valeurs As String
        Dim nomfam As String
     
        'feuille
        Set Ws_data = Sheets("CLIENTS")
     
        'dernière ligne
        lstrw = Ws_data.Cells(Rows.Count, 1).End(xlUp).Row
     
        'Par defaut
        liste_valeurs = ""
     
        'boucle
        For i = 2 To lstrw
     
            nomfam = Ws_data.Cells(i, 3)
     
            'vérifier que le nom de famille n'est pas inclu dans la liste
            If InStr(liste_valeurs, nomfam) < 1 Then
                ComboBox_NomClientFacture.AddItem "" & nomfam
     
                If liste_valeurs = "" Then
                    liste_valeurs = nomfam
                Else
                    liste_valeurs = liste__valeurs & ";" & nomfam
                End If
     
            End If
     
        Next
     
    End Sub
     
    'Trie et restitue la liste des id clients (forcement uniques) en fonction du nom de famille (pas forcement uniques)
    Private Sub ComboBox_NomClientFacture_Change()
     
        Dim Ws_data As Worksheet
        Dim lstrw As Long
     
        'effacer le contenu du menu deroulant des ID Client
        ComboBox_IDClientFacture.Clear
     
        'verifier qu'on a selectionne un nom de famille
        If ComboBox_NomClientFacture.Value <> "" Then
     
        'ajouter des ID correspondants
     
            'feuille
            Set Ws_data = Sheets("CLIENTS")
     
            'dernière ligne
            lstrw = Ws_data.Cells(Rows.Count, 1).End(xlUp).Row
     
            'boucle
            For i = 2 To lstrw
                'verifier le nom de famille
                If Ws_data.Cells(i, 3) = ComboBox_NomClientFacture.Value Then
                    'ajoute le ID Client
                    ComboBox_IDClientFacture.AddItem "" & Ws_data.Cells(i, 1)
                    ComboBox_IDClientFacture.SetFocus
                    SendKeys "%{Down}"
                End If
     
            Next
        End If
    End Sub
     
    Private Sub ComboBox_IDClientFacture_Change()
     
        Dim Ws_data As Worksheet
        Dim lstrw As Long
     
        'vérifier qu'on a sélectionné un nom de famille
        If ComboBox_NomClientFacture.Value <> "" Then
            'changer les labelchange et affiche le donnés client relatif au ID client unique
     
            'feuille
            Set Ws_data = Sheets("CLIENTS")
     
            'dernière ligne
            lstrw = Ws_data.Cells(Rows.Count, 1).End(xlUp).Row
     
            'boucle
            For i = 2 To lstrw
     
                'vérifier le id client
                If Ws_data.Cells(i, 1).Value = ComboBox_IDClientFacture.Value Then
                ' rempli les labelchange avec les valeurs correspondantes de la feuil "CLIENTS"
                Me.LabelChange_DataClientNom.Caption = Ws_data.Cells(i, 3).Value & " " & Ws_data.Cells(i, 4).Value & " - " & Ws_data.Cells(i, 5).Value
                Me.LabelChange_DataClientAdresse.Caption = Ws_data.Cells(i, 6).Value & " - " & Ws_data.Cells(i, 7).Value & " " & Ws_data.Cells(i, 8).Value
                Me.LabelChange_DataClientTelMail.Caption = "+" & Ws_data.Cells(i, 11).Value & " - " & Ws_data.Cells(i, 12).Value
                Me.LabelChange_DataClientNotes.Caption = Ws_data.Cells(i, 13).Value
                Exit For
            End If
            Next
        End If
    End Sub

  4. #4
    Membre du Club
    Homme Profil pro
    thérapeute
    Inscrit en
    Mai 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : thérapeute

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par défaut
    Ré- hello! J'ai rencontré quelques soucis.
    Voici ce à quoi je suis arrivé...
    avec:
    feuille: "CLIENTS"
    tableau: "vt_Clients"
    formulaire: "UserForm_factures"
    ComboBox: "ComboBox_NomClientFacture" et "ComboBox_IDClientFacture"


    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
     
    Private Sub UserForm_Initialize()
     
            ComboBox_NomClientFacture.List = ThisWorkbook.Worksheets("CLIENTS").Range("vt_Clients[[IDCLIENT]:[Prénom]]").Value
     
            ComboBox_NomClientFacture.ColumnCount = 4     'rngList.Columns.Count à la place du numéro donne l'ensemble des colonne du tableau
            ComboBox_NomClientFacture.ColumnWidths = "45;0;45;45" 'défini la largeur des colonnes dans la iste deroulante
            ComboBox_NomClientFacture.TextColumn = 3 ' definit la colonne qui affichera la valeur une fois selectionné le choix
            ComboBox_NomClientFacture.BoundColumn = 1 ' definit la colonne qui contient leS valeurs uniques
     
     
       ' evaluate ("filter ("vt_Clients[[ID]:[Nom]]","vt_Clients[Nom]"=""" & ComboBox_IDClientFacture.Value & """)")
       ' la fonction evaluate est en commentaire car me donne un warning "attendu séparateur de liste ou )" me suis cassé la tête à essayer plusieurs façons mais rien à faire je n'arrive pas à régler le problème
     
    End Sub
    Enfin la partie qui appelle les données dans la ComboBox_NomClientFacture fonctionne en multicolonne même si:
    - ça ne filtre pas les données (par exemple admettons qu'il y a un 3ème client qui ne s'appelle pas Favre quand je type les initiales les valeurs du 3ème client ne disparaissent pas de la liste déroulante
    - ça ne remplit pas le ComboBox_IDClientFacture avec la liste ID CLIENT filtrée

    la partie evaluate... je n'arrive pas à trouver une syntaxe correcte ni l'appliquer au ComboBox_IDClientFacture qui donc reste blanc et vide
    Dans le code la fonction evaluate/filtre est en commentaire car me donne un warning "attendu séparateur de liste ou )" me suis cassé la tête à essayer plusieurs façons mais rien à faire je n'arrive pas à régler le problème

    qu'est ce que je fais de faux??
    merci de l'aide

  5. #5
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 484
    Par défaut
    Tu n'a pas bien lu mes commentaires...
    Si tu as :
    (!!!!! cependant je suis intéressé à comprendre comment fonctionne ta solution je reprends cela dans une prochaine réponse)

    feuille "CLIENTS"
    tableau "vt_Clients"
    formulaire UserForm_factures
    tu ne peux pas appeler des colonnes qui n'existes pas comme ici Id ne sera pas reconnue.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "filter ("vt_Clients[[ID]:[Nom]]","vt_Clients[Nom]"=""" & ComboBox_IDClientFacture.Value & """)")
    Tout d'abord je te conseille de donner un nom aux feuilles de datas c'est plus simple pour y accéder et aura l'Autocompletion disponible.
    Dans l'environnement VBE tu changes le nom de la feuille CLIENTS qui dois se nommer Feuil1 2 ou 3, ou 4, en shClients
    Tu dois ensuite adapter la fonction Evaluate par rapport à ton tableau donc :

    Imaginons notre filtre, je ne veux afficher que les lignes dans la plage IdClient : Prénom dont le nom est Dupond la formule sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filter (vt_Clients[[IDClient]:[Prénom]],vt_Clients[Nom]="Dupond"
    Pour pouvoir entourer la valeur du ComboBox par des guillemets on est obliger de les tripler
    Ensuite je te conseille de lire la doc sur la fonction Filtre et Evaluate (voir plus bas)
    Tu dois aussi adapter la deuxième Combo pour recevoir les données filtrées
    Et pour finir Evaluate doit-être affecter à une variable tableau ou une zone de liste...

    Donc le code devrait ressembler à cela
    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
    Private Sub UserForm_Initialize()
         ComboBox_NomClientFacture.List = ThisWorkbook.Worksheets("CLIENTS").Range("vt_Clients[[IDCLIENT]:[Prénom]]").Value
     
        ComboBox_NomClientFacture.ColumnCount = 4                        'rngList.Columns.Count à la place du numéro donne l'ensemble des colonne du tableau
        ComboBox_NomClientFacture.ColumnWidths = "45;0;45;45"     'défini la largeur des colonnes dans la iste deroulante
        ComboBox_NomClientFacture.TextColumn = 3                          ' definit la colonne qui affichera la valeur une fois selectionné le choix
     
        ' // Attention BoundColumn et la colonne qui sera renvoyée à la sélection d'une ligne
        ComboBox_NomClientFacture.BoundColumn = 1                      ' definit la colonne qui contient leS valeurs uniques
    End Sub
     
    Sub ComboBox_NomClientFacture_Change()
        ' // Tu dois adapter la fonction Evaluate selon les données de ton tableau
        ' // Attention aux guillemets ils englobes la formule totale
        ' // Comme l'on ajoute la valeur du Combo on triple les guillemets pour ajouter un guillement dans la formule
        ComboBox_IDClientFacture.List = Evaluate("filter (vt_Clients[[IDClient]:[Prénom]],vt_Clients[Prénom]=""" & ComboBox_IDClientFacture.Value & """)")
        ' la fonction evaluate est en commentaire car me donne un warning "attendu séparateur de liste ou )" me suis cassé la tête à essayer plusieurs façons mais rien à faire je n'arrive pas à régler le problème
    End Sub


    Références :
    Fonction FILTRE - Support Microsoft
    Méthode Application.Evaluate (Excel) | Microsoft Learn

  6. #6
    Membre du Club
    Homme Profil pro
    thérapeute
    Inscrit en
    Mai 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : thérapeute

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par défaut
    Tu n'a pas bien lu mes commentaires...
    [...] tu ne peux pas appeler des colonnes qui n'existes pas comme ici Id ne sera pas reconnue.
    sisi, je t'assure j'ai lu et ré-lu 47 fois ton message et j'ai bel et bien changé aussi la balise ID en IDCLIENT, mais au bout d'un moment j'ai juste fait un reset de toute la m... que j'ai fait et posté le code en commentaire comme tu l'as trouvé.. bref je te remercie du temps que tu prends pour me répondre j'apprécie et apprends bcp!

    mtn je me met à l'ouvre pour décrypter tous cela! Et au passage, j'arrive tant bien que mal à me débrouiller en m'informant par ci par là, mais il me manquent clairement quelques notions de base, est-ce que tu as une bonne référence pour avoir de bonnes bases? Du style simple mais complet...

    je te redis quand j'ai fini d'appliquer tes précieux conseils et voir le bout de code que tu m'as donné

  7. #7
    Membre du Club
    Homme Profil pro
    thérapeute
    Inscrit en
    Mai 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : thérapeute

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par défaut
    je suis désolé mais je n'y arrive pas... j'ai suivi tes instructions à la lettre et me suis documenté sur les fonctions et j'ai même cherché des solutions dans d'autres forums et j'arrive tout le temps à l'erreur d'exécution 381: impossible de définir la propriété List. Index de table de propriétés non valide. L'erreur selectionne colore toute la ligne 18 celle qui contient evaluate et filtre :/

    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 UserForm_Initialize()
     
            ComboBox_NomClientFacture.List = ThisWorkbook.Worksheets("CLIENTS").Range("vt_Clients[[IDCLIENT]:[Prénom]]").Value
     
            ComboBox_NomClientFacture.ColumnCount = 4     'rngList.Columns.Count à la place du numéro donne l'ensemble des colonne du tableau
            ComboBox_NomClientFacture.ColumnWidths = "45;0;45;45" 'défini la largeur des colonnes dans la iste deroulante
            ComboBox_NomClientFacture.TextColumn = 3 ' definit la colonne qui affichera la valeur une fois selectionné le choix
            ComboBox_NomClientFacture.BoundColumn = 3 ' definit la colonne qui stocke la valeur dans le combobox. Identifie la source de données dans un contrôle ComboBox ou ListBox multicolonne.
     
    End Sub
     
    Sub ComboBox_NomClientFacture_Change()
        ' // Tu dois adapter la fonction Evaluate selon les données de ton tableau
        ' // Attention aux guillemets ils englobes la formule totale
        ' // Comme l'on ajoute la valeur du Combo on triple les guillemets pour ajouter un guillement dans la formule
        Sheets("CLIENTS").Activate
        ComboBox_IDClientFacture.List = Evaluate("FILTRE (vt_Clients[[IDCLIENT]:[Prénom]],vt_Clients[Nom]=""" & ComboBox_NomClientFacture.Value & """)")
    End Sub

  8. #8
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 484
    Par défaut
    Salut,
    Peux-tu envoyer un fichier sans données confidentielles pour voir.

  9. #9
    Membre du Club
    Homme Profil pro
    thérapeute
    Inscrit en
    Mai 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : thérapeute

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par défaut
    oui, annexé tu trouves le fichier "Gestion_version pour valtrase.xlsm"
    Pièce jointe 638423

  10. #10
    Membre émérite Avatar de Valtrase
    Homme Profil pro
    Jeune retraité...
    Inscrit en
    Janvier 2016
    Messages
    484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Jeune retraité...
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2016
    Messages : 484
    Par défaut
    Re,
    Je viens de revoir mon post, remplace FILTRE par FILTER erreur de frappe, VBA parle Anglais

  11. #11
    Membre du Club
    Homme Profil pro
    thérapeute
    Inscrit en
    Mai 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : thérapeute

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par défaut
    j'ai déjà essayé, même erreur d'exécution 381 impossible de définir la propriété List. Index de table de propriétés non valide

  12. #12
    Membre du Club
    Homme Profil pro
    thérapeute
    Inscrit en
    Mai 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : thérapeute

    Informations forums :
    Inscription : Mai 2023
    Messages : 9
    Par défaut
    Cher Valtrase, si tu as trouvé une réponse au problème de l'erreur 381 lié à ta proposition je suis encore preneur car ta proposition est bien plus élégante et concise et surtout que j'aimerai comprendre d'où vient cet erreur sur le quel je me suis cassé la tête pendant des heures. Dans le message du 09/05/2023 tu trouves le fichier avec data anonymisés. as tu une idée d'où vient cette erreur?

    J'ai encore cherché d'autres alternatives et trouvé une autre solution qui marche mais qui n'est pas en "pur code" puisqu'on a besoin d'ajouter à la feuille du tableau (ici "CLIENTS") deux autres tableaux qui feront office de colonnes hôtes pour le filtre.
    La source de cette autre solution a été cette video youtube:
    Dependent Combo Boxes with Advanced Filter - Excel VBA

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

Discussions similaires

  1. [XL-2003] Aide Interaction entre deux Combobox
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/03/2011, 14h03
  2. Réponses: 18
    Dernier message: 28/08/2008, 18h23
  3. [C#] interactions entre deux WebUserControl
    Par owtee dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/10/2006, 09h16
  4. Réponses: 1
    Dernier message: 05/10/2006, 04h20
  5. [VB .Net][Forms] Interaction entre deux forms
    Par plasticgoat dans le forum Windows Forms
    Réponses: 7
    Dernier message: 24/08/2005, 13h14

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