Recherche de valeurs a partir dans userform

toto -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Bonjour,
J'ai un userform dans lequel j'ai des texboxs vides. J'aimerai que lorsque je clique sur mon bouton de commande 1, une recherche soit effectuée pour trouver dans la colonne B de mon tableau Excel les cellules dans lesquelles est inscrit : « ok ». Pour toutes ces cellules, il faudrait que les valeurs de la colonne C soient reportées dans les textbox de mon userform.
Je suis un peu perdu...

Merci pour votre aide

Jérémie

3 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
     
    Bonjour,
    Je suppose que tu n'as pas changé la propriété "Name" de tes Textbox, qu'ils ont tous un "N°" qui se "suivent" et que le 1er est nommé TextBox1 (A ADAPTER DANS LE CODE) :
    TextBox1, TextBox2, textBox3 etc...
    Avec une titite boucle par exemple :
    Dim Lign As Long, DrLig As Long
    Dim Cpt As Byte
    
    Cpt = 1 'A ADAPTER : 1 serait le "n°" de ton 1er TextBox
    With Sheets("Feuil1") 'A ADAPTER nom de ta feuille
        DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
        For Lign = 1 To DrLig
            If UCase(.Cells(Lign, 2)) = "OK" Then
                Me.Controls("TextBox" & Cpt).Value = .Cells(Lign, 3)
                Cpt = Cpt + 1
            End If
        Next Lign
    End With
    0
    1. toto
       
      Merci, j'ai adapté, mais je n'arrive pas à mettre le compteur en place
      textbox365

      textbox369

      textbox373

      etc jusqu'a 393:

      Exemple pour les 2 premieres boucles:

      Private Sub CommandButton21_Click()

      With Sheets("SECO")

      If TextBox365 <> "" And TextBox366 <> "" Then

      'boucle sur toutes les lignes pour retrouver la bonne ligne :

      DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
      For Lign = 3 To DrLig

      'si on trouve sur la même ligne la valeur des textbox 1, 2 dans les col B, C
      If .Cells(Lign, 2) = TextBox365 And .Cells(Lign, 3) = TextBox366 Then
      'alors en col F on mets la valeur de la combobox
      .Cells(Lign, 6) = ComboBox1.Value
      Exit For
      End If
      Next

      End If

      If TextBox369 <> "" And TextBox370 <> "" Then

      'boucle sur toutes les lignes pour retrouver la bonne ligne :

      DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
      For Lign = 3 To DrLig

      'si on trouve sur la même ligne la valeur des textbox 1, 2 dans les col B, C
      If .Cells(Lign, 2) = TextBox369 And .Cells(Lign, 3) = TextBox370 Then
      'alors en col F on mets la valeur de la combobox
      .Cells(Lign, 6) = ComboBox2.Value
      Exit For
      End If
      Next


      End If
      End With
      Calculate
      End Sub
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Bonjour,
      Essaye une boucle comme celle ci :
      [Code non testé, c'est pour te donner une piste...]
      Private Sub CommandButton21_Click() 
      Dim i As Byte 
      Dim Cpt As Integer 
      Dim Lign As Long, DrLig As Long 
      
      Cpt = 365 
      For i = 1 to 8 
          With Sheets("SECO")  
              If Me.Controls("TextBox" & Cpt) <> "" And Me.Controls("TextBox" & Cpt + 1) <> "" Then  
                  DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row  
                  For Lign = 3 To DrLig 
                      If .Cells(Lign, 2) = Me.Controls("TextBox" & Cpt) And .Cells(Lign, 3) = Me.Controls("TextBox" & Cpt + 1) Then  
                          .Cells(Lign, 6) = Me.Controls("ComboBox" & i).Value  
                          Exit For  
                      End If  
                  Next Lign 
              End If  
          End With 
      Cpt = Cpt + 4 
      Next i 
      End Sub
      0
  2. toto
     
    Super cela marche pour la prmeiere ligne.mais j'ai apporté une modif pke j'ai trois textbox pour chaque ligne, (comme dans le code ci dessous).
    Du coup mon texbox box 4 sera la prochaine valeur colonne B, la textbox5:prochaine valeur C , etc qd on trouvera une ligne avec :"OK".
    J'arrive pas a adapter.
    Voici mon code pour le moment:

    Merci pôur l'aide

    Private Sub CommandButton3_Click()
    Dim Lign As Long, DrLig As Long

    With Sheets("SECO")
    DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row
    For Lign = 1 To DrLig
    If UCase(.Cells(Lign, 6)) = "OK" Then
    Me.Controls("TextBox1").Value = .Cells(Lign, 2)
    Me.Controls("TextBox2").Value = .Cells(Lign, 3)
    Me.Controls("TextBox3").Value = .Cells(Lign, 4)

    End If
    Next Lign

    End With

    End Sub
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      j'ai apporté une modif pke j'ai trois textbox pour chaque ligne Et tu comptais le dire quand???
      SCROGNEUGNEU!
      Private Sub CommandButton3_Click() 
      Dim Lign As Long, DrLig As Long 
      Dim Cpt As Integer
      
      Cpt = 1
      With Sheets("SECO") 
          DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row 
          For Lign = 1 To DrLig 
              If UCase(.Cells(Lign, 6)) = "OK" Then 
                  Me.Controls("TextBox" & Cpt).Value = .Cells(Lign, 2) 
                  Cpt = Cpt + 1
                  Me.Controls("TextBox" & Cpt).Value = .Cells(Lign, 3) 
                  Cpt = Cpt + 1
                  Me.Controls("TextBox" & Cpt).Value = .Cells(Lign, 4) 
                  Cpt = Cpt + 1
              End If 
          Next Lign 
      End With 
      End Sub
      0
  3. toto
     
    Parfait cela marche très bien.
    Mais est-il possible que lorsque j'ai une valeur dans les texbox, si j'ai un combobox pour chaque ligne de mon userform et que je choisi entre la valeur A, B ou C, celle ci soit enregistrée dans le tableau excel dans la colonne E de la ligne correspondante?

    Merci pour ton aide
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Oui.
      A ADAPTER : les "numéros" des textbox et de la combobox ainsi que les cellules...
      'Si Les textbox sont remplis
      If TextBox1 <> "" And textBox2 <> "" And textBox3 <> ""
          'boucle sur toutes les lignes pour retrouver la bonne ligne :
          With Sheets("SECO") 
              DrLig = .Columns(2).Find("*", , , , xlByColumns, xlPrevious).Row 
              For Lign = 1 To DrLig 
                  'si on trouve sur la même ligne la valeur des textbox 1, 2, 3 dans les col B, C, D
                  If .Cells(Lign, 2) = TextBox1 Ans .Cells(Lign, 3) = TextBox2 And .Cells(Lign, 4) = TextBox3 Then
                      'alors en colE on mets la valeur de la combobox
                      .Cells(Lign, 5) = Combobox1
                      Exit For
                  End If
              Next
          End With
      End If
      0