Comment trouver une ligne selon plusieurs critères

Bonsoir à tous, j'ai actuellement un premier formulaire de saisie sur laquelle les opérateurs entrent la date, l'heure, le nom de l'opérateur, le client, épaisseur, etc... J'ai un deuxième userform qui me permet de rentrer les rebuts. (je ne peux pas combiner les deux userforms car les données ne sont pas rentrées au même moment)

Je souhaiterais que lors de l'affichage de l'userform 2, l'opérateur entre certaines données rentrées dans le premier userform(date, client, etc) pour pouvoir retrouver ma ligne correspondante et ainsi pouvoir rentrer les rebuts sur la ligne correspondante.

Ma question est donc la suivante : comment puis je retrouver la bonne ligne selon plusieurs critères(Date, heure, client) pour pouvoir après insérer les rebuts dans les colonnes suivantes avec le code suivant :

Dim i As Integer

With Range("Tableau3").ListObject

.ListColumns("Rebut").DataBodyRange.Rows(i) = txtrebut

Merci d'avance pour votre aide

image

Hello,

Sans fichier c'est compliqué d'apporter une réponse précise...

Donc je vais t'apporter une réponse non précise.

Avec une boucle et plusieurs conditions tu peux réaliser ce que tu veux faire

dim i as byte
dim la_ligne as byte

for i = 1 to 50
if range("A" & i) = "01/01/2021" and range("B" & i) = "13:50" and range("C" & i ) = "AIRBUS" then  la_ligne =i
next i

msgbox la_ligne 

Bonsoir, je vais essayé d'être un peu plus précise.

J ai mon premier userform qui remplit une base de donnée comme suit :

image

Ensuite j'ai un second userform sur lequel l'opérateur remplit la date, l 'heure, le num d'OF rentré préalablement :

image

Je souhaite que mon programme reconnaisse la ligne correspondante et ajoute dans les colonnes correspondantes le nombre de rebuts, etc

Mon code actuel est le suivant :

Sheets("POUDRAGE").Activate

With Range("Donnees").ListObject

Dim y As Long
y = Worksheets("POUDRAGE").Range("Donnees").Find(txtdate, txtheure, cboref, txtof).Row

.ListColumns("NbNC Brutes").DataBodyRange.Rows(y) = txtnbncbruts
.ListColumns("Gratton").DataBodyRange.Rows(y) = Val(txtgrattons)
.ListColumns("Manque").DataBodyRange.Rows(y) = Val(txtmanque)
.ListColumns("Limites").DataBodyRange.Rows(y) = Val(txtlimite)
.ListColumns("Coulure").DataBodyRange.Rows(y) = Val(txtcoulures)
.ListColumns("Infiltration").DataBodyRange.Rows(y) = Val(txtinfiltration)
.ListColumns("Peau d'orange").DataBodyRange.Rows(y) = Val(txtpeauorange)
.ListColumns("Autres 1").DataBodyRange.Rows(y) = Val(txtautre1)
.ListColumns("Autres 2").DataBodyRange.Rows(y) = Val(txtautre2)
.ListColumns("Commentaire1").DataBodyRange.Rows(y) = txtcommentaire
.ListColumns("Commentaire2").DataBodyRange.Rows(y) = txtcommentaire2

End With

Merci d'avance pour votre aide

Bonjour,

Le plus simple est de créer dans votre tableau structuré, une nouvelle colonne "clé" se déduisant des colonnes Date, Heure et N OF,

par la formule : ==[@Date]&HEURE([@Heure])&[@[N OF]]

Au niveau du code :

  With Range("Tableau1").ListObject
        Set cell = .ListColumns("clé").Range.Find(CDec(CDate(txtdate)) & Hour(CDate(txtheure)) & txtof)
        If Not cell Is Nothing Then
            y = cell.Row - Header.RowRange.Row
            .ListColumns("NbNC Brutes").DataBodyRange.Rows(y) = txtnbncbruts
            .ListColumns("Gratton").DataBodyRange.Rows(y) = Val(txtgrattons)
            .ListColumns("Manque").DataBodyRange.Rows(y) = Val(txtmanque)
            .ListColumns("Limites").DataBodyRange.Rows(y) = Val(txtlimite)
            .ListColumns("Coulure").DataBodyRange.Rows(y) = Val(txtcoulures)
            .ListColumns("Infiltration").DataBodyRange.Rows(y) = Val(txtinfiltration)
            .ListColumns("Peau d'orange").DataBodyRange.Rows(y) = Val(txtpeauorange)
            .ListColumns("Autres 1").DataBodyRange.Rows(y) = Val(txtautre1)
            .ListColumns("Autres 2").DataBodyRange.Rows(y) = Val(txtautre2)
            .ListColumns("Commentaire1").DataBodyRange.Rows(y) = txtcommentaire
            .ListColumns("Commentaire2").DataBodyRange.Rows(y) = txtcommentaire2
        End If
    End With

Bonjour, merci de votre réponse. J'ai essayé d'utiliser votre super idée. Malheureusement cela ne marche pas rien ne s'affiche dans mes colonnes. Je vous joins

en pièce jointe mon fichier (le code correspondant se trouve dans l'userform4) si vous pouviez jeter un coup d'oeil.

Merci d'avance et bonne journée

Bonjour,

Oubli : comme le contenu de la colonne "clé" est une formule, il faut préciser à l'instruction Find , une recherche par valeur.

ci-dessous code :

    With Range("Donnees").ListObject

        Set cell = .ListColumns("clé").Range.Find(CDec(CDate(txtdate)) & Hour(CDate(txtheure)) & txtof, LookIn:=xlValues)

        If Not cell Is Nothing Then
            Y = cell.Row - Header.RowRange.Row ' On remplit la ligne

            .ListColumns("NbNC Brutes").DataBodyRange.Rows(Y) = txtnbncbruts
            .ListColumns("Gratton").DataBodyRange.Rows(Y) = Val(txtgrattons)
            .ListColumns("Manque").DataBodyRange.Rows(Y) = Val(txtmanque)
            .ListColumns("Limites").DataBodyRange.Rows(Y) = Val(txtlimite)
            .ListColumns("Coulure").DataBodyRange.Rows(Y) = Val(txtcoulures)
            .ListColumns("Infiltration").DataBodyRange.Rows(Y) = Val(txtinfiltration)
            .ListColumns("Peau d'orange").DataBodyRange.Rows(Y) = Val(txtpeauorange)
            .ListColumns("Autres 1").DataBodyRange.Rows(Y) = Val(txtautre1)
            .ListColumns("Autres 2").DataBodyRange.Rows(Y) = Val(txtautre2)
            .ListColumns("Commentaire1").DataBodyRange.Rows(Y) = txtcommentaire
            .ListColumns("Commentaire2").DataBodyRange.Rows(Y) = txtcommentaire2
        End If

    End With

Vous êtes génial ca fonctionne merci infiniment !!!!

Rechercher des sujets similaires à "comment trouver ligne criteres"