Recherche de valeurs a partir dans userform

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. Modérateur
    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. 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. Modérateur
      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. 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. Modérateur
      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. 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. Modérateur
      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