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 : recherche d'après 2 TextBox


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2019
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Mars 2019
    Messages : 10
    Par défaut UserForm : recherche d'après 2 TextBox
    Bonjour,

    Je suis en train de créer un useerform pour gérer mes fichiers d'impression, et en suite gérer mes coûts. Je suis pour le moment sur la partie de l'userform. je passerai au calcul de mes coûts en vba par la suite. j'essaie déjà de finir mon user form comme j'aimerai qu'il soit. Mais je d"bute en VBA, je sollicite donc votree aide :

    J'ai deux textbox en haut (AFFAIRE et BAT) et un bouton recherche. J'aimerai que quand je rentre ces deux données et queje clique sur recherche, il me remplisse automatiquement mes autres textbox, list box et commandbox suivant ces deux critères.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Private Sub CommandButton5_Click()
        Dim M As Long, nbLignes As Long
        Dim Source As Worksheet
        Dim Trouve As Boolean
     
        Set Source = Sheets("FACTURATION")
     
        nbLignes = Source.Cells(Rows.Count, "B").End(xlUp).Row
     
    '    Recherche les valeurs entrées dans txtCommentaire et txtContacte
        For M = 1 To nbLignes
            If LCase(Source.Range("B" & M)) = LCase(TextBoxaffaire.Value) And LCase(Source.Range("C" & M)) = LCase(FrmSaisie.TextBoxbat.Value) Then
                Trouve = True
                FrmSaisie.TextBoxcontact.Text = Source.Cells(M, 3).Value
                FrmSaisie.TextBoxnom.Text = Source.Cells(M, 4).Value
                FrmSaisie.ComboBoxmatiere.Text = Source.Cells(M, 5).Value
                FrmSaisie.TextBoxlargeur.Value = Source.Cells(M, 6).Value
                FrmSaisie.TextBoxhauteur.Value = Source.Cells(M, 7).Value
                FrmSaisie.TextBoxquantite.Value = Source.Cells(M, 8).Value
                FrmSaisie.ComboBoxforme.Text = Source.Cells(M, 7).Value
                FrmSaisie.ComboBoxfinition.Value = Source.Cells(M, 9).Value
                FrmSaisie.ComboBoxaccessoires.Value = Source.Cells(M, 10).Value
                FrmSaisie.TextBoxcommentaire.Value = Source.Cells(M, 11).Value
                Exit For
            End If
        Next
     
        If Not Trouve Then
            MsgBox "Aucun BAT correspondant trouvé"
        End If
     
        Set Source = Nothing
     
    End Sub
    Mais cela ne focntionne pas.

    Par la suite, j'aimerais integrer un bouton modifier qui permettra d'enregristrer par dessus ma base.

    Dans l'ideal, je vais aussi essayer d'afficher dans ma liste box, les dossier par rapport au textbox AFFAIRE. Et que lorsque je clique une ligne, mon userform se remplit.

    Merci pour votre aide

    J'espère que je suis assez clairFACTUREv2.xlsb.xlsm

  2. #2
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour, une réflexion: si vous avez Affaire et bat dans une base de données, ne serait-il pas préférable de travailler avec des ListBox plutôt que des TextBox.
    Pourquoi, parce que la moindre erreur de syntaxe va vous donner des résultats faux, alors que la ListBox pas possible et en plus si vous ne vous rappelez pas le nom, descendre la liste peut rafraichir la mémoire. en plus si vous travaillez avec une ListBox affaire, vous pourrez ne mettre que les Bat concerné dans la liste Bat si cela est possible.
    réfléchissez y ça peut valoir le coup pour la simplicité d'utilisation.
    Enfin moi ce que j'en dit ?
    Cordialement

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    bonjour

    je pense que tu es parti sur un mauvais chemin de conception

    déjà pour commencer :
    ta boucle modifie tes controls a chaque fois que la condition des deux ucase(....)=ucase(....) sont remplis
    ce qui veux dire que tes controls seront rempli avec le derniera la fin
    si c'est ce que tu veux très bien ,sinon tu es déjà dans la panade

    ensuite

    tu souhaiterais pourvoir modifier ta base de donnée de ton userform avec un bouton valider par exemple

    et bien le simple fait de remplir tes combo comme tu le fait fera que si tu sélectionne un index diffèrent dans chaque combo tu va tout mélanger

    conclusion


    charge ta base dans une SEULE combo(multicolonne)en y AJOUTANT UNE COLONNE POUR Y METTRE LES INDEXS DE LIGNES

    attribut des noms a tes controls correspondant aux colonne

    quand tu selectionne un item dans la combo tu rempli avec les text des .column de la combo
    tu pourra modifier les textbox
    et avec le bouton valider tu recup l'index de ligne dans la colonne cité ci dessus et tu remplie ta base avec cet index ret les nom des controls


    tu a des centaines d'exemple sur le forum

    en l'état tel que tu a commencé , prévois de l'arnica et des aspro ,tu va avoir mal au front
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    Un exemple simple de recherche avec 2 TextBox et 1 ListBox.

    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
    Option Compare Text
    Dim f, Rng, TblBD(), NbCol
    Private Sub UserForm_Initialize()
      Set f = Sheets("BD")
      Set Rng = f.Range("A2:G" & f.[A65000].End(xlUp).Row)
      NbCol = Rng.Columns.Count - 1
      TblBD = Rng.Value
      For i = 1 To UBound(TblBD): TblBD(i, NbCol + 1) = i: Next i
      Me.ListBox1.List = TblBD
      Me.ListBox1.ColumnCount = NbCol
    End Sub
     
    Private Sub TextBox1_Change()
      Affiche
    End Sub
     
    Private Sub TextBox2_Change()
      Affiche
    End Sub
     
    Sub Affiche()
       Dim b()
       tmp1 = Me.TextBox1 & "*": tmp2 = Me.TextBox2 & "*"
       n = 0
       For i = LBound(TblBD) To UBound(TblBD)
        If TblBD(i, 3) Like tmp1 And TblBD(i, 4) Like tmp2 Then
          n = n + 1: ReDim Preserve b(1 To NbCol + 1, 1 To n)
          For k = 1 To NbCol + 1: b(k, n) = TblBD(i, k): Next k
        End If
       Next i
       If n > 0 Then Me.ListBox1.Column = b Else Me.ListBox1.Clear
    End Sub
     
    Private Sub ListBox1_Click()
      ligne = Me.ListBox1.Column(NbCol) + Rng.Row - 1
      f.Rows(ligne).Select
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [MySQL] Recherche impossible après import d'un csv
    Par dam28800 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 15/01/2009, 14h45
  2. Userform : traitement identique de plusieurs TextBoxS
    Par VicomteRaoul dans le forum VBA Word
    Réponses: 4
    Dernier message: 01/09/2008, 13h00
  3. Réponses: 3
    Dernier message: 05/06/2008, 08h24
  4. [VBA-E]Editer UserForm Recherche
    Par ananar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/05/2007, 14h50
  5. [vba excel] Recherche valeur d'une textbox dans une feuille
    Par vanessaferraz dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/08/2006, 10h55

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