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 :

Combobox efface textbox


Sujet :

Macros et VBA Excel

  1. #1
    Membre actif
    Homme Profil pro
    artiste peintre
    Inscrit en
    Mai 2017
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : artiste peintre
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2017
    Messages : 66
    Par défaut Combobox efface textbox
    Bonjour

    Je viens vers vous car j'ai un petit problème j'ai une combobox qui s'alimente avec la colonne des noms donc quand je tape une lettre si il existe il me rempli et rempli les autres textbox

    Je voudrais que si le nom n'existe pas il puisse effacer les autres textbox exemple si je tape la lettre D il me présente Dupont ce qui est normal car il existe dans tableau

    mais par exemple si je rajoute ensuite la lettre A par exemple pour Dallas je voudrais qu'ils puissent effacer les autres texbox

    s'il vous plaît

    En remerciant d'avance

    clear_texbox_selon_combobox.xlsm

  2. #2
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut
    Bonjour

    peut étre comme ceci.
    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
    Private Sub ComboBox1_Change()
    Dim Fin As Integer
        Fin = Feuil1.Range("B" & Rows.Count).End(xlUp).Row
     
                If Me.ComboBox1.Value <> "" Then
                     Me.Label5.Caption = Clear
                     Me.TextBox1.Value = Clear
                     Me.TextBox2.Value = Clear
                        For ligne = 2 To Fin
     
                            If Feuil1.Cells(ligne, 2).Value = Me.ComboBox1.Value Then
                                Me.Label5.Caption = Feuil1.Cells(ligne, 1).Value
                                Me.TextBox1.Value = Feuil1.Cells(ligne, 3).Value
                                Me.TextBox2.Value = Feuil1.Cells(ligne, 4).Value
                            End If
     
                        Next ligne
     
                    Else
     
                    If Me.ComboBox1.Value <> Feuil1.Range("B" & Rows.Count).End(xlUp).Row Then
     
                                Me.Label5.Caption = Clear
                                Me.TextBox1.Value = Clear
                                Me.TextBox2.Value = Clear
                    End If
     
                End If
     
    End Sub
    Du coup,je ne sais pas si le esle est utile.

    Dans ce cas

    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 ComboBox1_Change()
     
    Dim Fin As Integer
     
        Fin = Feuil1.Range("B" & Rows.Count).End(xlUp).Row
     
                If Me.ComboBox1.Value <> "" Then
                     Me.Label5.Caption = Clear
                     Me.TextBox1.Value = Clear
                     Me.TextBox2.Value = Clear
                        For ligne = 2 To Fin
     
                            If Feuil1.Cells(ligne, 2).Value = Me.ComboBox1.Value Then
                                Me.Label5.Caption = Feuil1.Cells(ligne, 1).Value
                                Me.TextBox1.Value = Feuil1.Cells(ligne, 3).Value
                                Me.TextBox2.Value = Feuil1.Cells(ligne, 4).Value
                            End If
     
                        Next ligne
     
     
                End If
     
    End Sub

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    j'ai une combobox qui s'alimente avec la colonne des noms donc quand je tape une lettre
    Une combobox est par définition une "zone de liste modifiable".
    Autant donc l'alimenter pour en gérer la valeur ensuite et modifier la propriété Caption d'un contrôe Label, ou la propriété Text d'un contrôle Textbox.

    Quant aux End(xl..., cette fonction est plus qu'inusitées avec l'apparition des tableaux structurés.

    Ici, mais c'est mon avis, j'aurais opté pour un Label plutôt qu'une Texbox.
    Ce étant donné que la valeur retournée dépend de la Combobox.

    Soit:
    Un tableau structuré T_Famille comprenant 2 colonnes Parent, Voiture.
    Un formulaire doté d'une zone de liste modifiable Cbx_Parent et d'un label Lb_Voiture
    Le changement de la zone de liste modifiable impactera la propriété Caption du contrôle Label.

    Dans un module standard

    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
    Option Explicit
     
    Public Sub lavoiture()
     
    With Usf_choix
          With .Cbx_Parent
                'Effacement des items
                .Clear
                'Complétude des items
                .List = Range("T_Famille[Parent]").Value
                'Initalisation à vide
                .ListIndex = -1
          End With
          .Lb_Voiture.Caption = ""
          .Show
    End With
     
    End Sub
    Dans l'espace VBE du formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Private Sub Cbx_Parent_Change()
    Dim eq As Long
    'Recherche de la ligne où se trouve l'item sélectionné
    eq = Evaluate("=MATCH(""" & Cbx_Parent.Value & """,T_Famille[Parent],0)")
    'Retour du champ Voiture à cette ligne
    Lb_Voiture.Caption = Range("T_Famille[Voiture]")(eq)
    End Sub
    Nota: Dans la fonction Evaluate, il n'est pas utile de gérer l'erreur.
    La combobox étant alimentée depuis le tableau structuré.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je plussoie Marcel sur l'utilisation du tableau structuré. Ca simplifie grandement le code => Mon tuto sur les tableaux structurés

    Vu que ta combo se remplit à partir de la plage non triée, ce qui n'est pas le top point de vue ergonomie, soit, tu pourrais te passer de la recherche de la ligne. Ton combo commence en ligne 0, ton tableau en ligne 1. Tu peux donc utiliser la propriété ListIndex du combo pour pointer vers la bonne ligne de la plage. Je pars du principe que ton userform est déchargé après utilisation, ce qui implique que les contrôles sont vides.

    Perso, je n'aime pas alimenter le combobox avec une référence à une plage en utilisant RowSource. Je préfère charger les données comme Marcel le propose (nettoyage en moins)

    Pour préparer et ouvrir le userform:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    https://fauconnier.developpez.com/tutoriels/tableaux-structures/
    Sur changement du combobox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ComboBox1_Change()
      With ComboBox1
        TextBox1 = Range("t_Contacts[Prenom]")(.ListIndex + 1).Value
        TextBox2 = Range("t_Contacts[Adresse]")(.ListIndex + 1).Value
        Label5.Caption = Range("t_Contacts[ID]")(.ListIndex + 1).Value
      End With
    End Sub

    Tu tagues Excel 365, donc tu pourrais trier les données du combobox, pour présenter la liste par ordre alphabétique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Ouvre()
      With UserForm1
        .ComboBox1.List = Application.Sort(Range("t_Contacts[Nom]"))
        .Show
      End With
    End Sub

    Tu devras alors utiliser Match, soit comme Marcel le propose, soit avec Application.Match, comme ci-dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ComboBox1_Change()
      Dim Index As Long
     
      Index = Application.Match(ComboBox1.Value, Range("t_Contacts[Nom]"), 0)
      TextBox1 = Range("t_Contacts[Prenom]")(Index).Value
      TextBox2 = Range("t_Contacts[Adresse]")(Index).Value
      Label5.Caption = Range("t_Contacts[ID]")(Index).Value
    End Sub


    Je me demande comment tu vas faire si tu as plusieurs personnes du même nom. Perso, j'irais plus vite soit vers un listbox, soit vers un combobox à au moins deux colonnes pour afficher le nom et le prénom, éventuellement triés avec Sort.

    Comme je vois que tu as les boutons Ajouter et Modifier, je me dis que tu vas vouloir échanger avec ta table de données. Je te conseillerais dès lors une approche plus générique.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Pour éviter les aller-retours vers le tableau, on peut aussi embarquer les données dans le combobox. Ici, on préciserait qu'il possède 4 colonnes et on en donnerait les largeurs.

    Nom : 2021-10-12_073150.png
Affichages : 78
Taille : 4,0 Ko

    On pourrait alors alimenter les autres contrôles directement au départ du combobox, en utilisant sa propriété .List, qui renvoie un array de base 0.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ComboBox1_Change()
      With ComboBox1
        TextBox1 = .List(.ListIndex, 2)
        TextBox2 = .List(.ListIndex, 3)
        Label5.Caption = .List(.ListIndex, 0)
      End With
    End Sub

    PS: Il serait intéressant de nommer correctement tes contrôles, même si je suppose que ton classeur est un classeur d'apprentissage. Adopter les bonnes pratiques dès le début me semble judicieux
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Utilisation comboBox et textbox
    Par lolo81 dans le forum C++/CLI
    Réponses: 35
    Dernier message: 11/03/2008, 21h20
  2. liaison combobox et textbox? Access 2007
    Par mira2008 dans le forum IHM
    Réponses: 5
    Dernier message: 13/01/2008, 05h58
  3. VBA Access combobox et textbox
    Par vibalistic dans le forum IHM
    Réponses: 5
    Dernier message: 15/11/2007, 09h58
  4. combobox.text = textbox
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 09/08/2007, 21h14
  5. faire communiquer une combobox et textbox
    Par aliosys dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 27/12/2005, 10h20

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